在实现 HTTP Digest 服务器时,存在随机数问题。
服务器随机数(相对于客户端随机数)
- 必须由服务器发出
- 只要服务器允许,客户端就可以重新使用它
- 不知道用户以后会使用什么随机数
一个简单的实现是在内存中记住所有已发布的随机数,但这会引入状态:客户端需要与同一个服务器通信,或者服务器需要共享有效随机数列表,这成为可伸缩性问题。
我的问题是:是否有可能提供安全和无状态的随机数?我相信是这样,并希望它被(in)验证:
使 nonce 成为来自服务器的加密签名消息:
- 过期时间戳(例如,未来 86400 秒)
- 一个随机数(也许?)
- 加密签名(也许是 sha 或 hmac?)
这可以全部捆绑在 401 Www-Authenticate 标头中提供的随机数中。当任何服务器看到这一点时,他们可以验证消息的完整性(通过重新计算签名)。然后可以检查时间戳,如果是,那么随机数是好的。
- 这种技术在其他地方有描述吗?
- 这种提供随机数的方式是否违背了随机数的目的?
- 还有其他提供无状态 HTTP Digest 身份验证的方法吗?