是否可以在 HTTP Digest 中使用无状态服务器随机数

信息安全 http 随机数
2021-08-28 12:05:48

在实现 HTTP Digest 服务器时,存在随机数问题。

服务器随机数(相对于客户端随机数)

  • 必须由服务器发出
  • 只要服务器允许,客户端就可以重新使用它
  • 不知道用户以后会使用什么随机数

一个简单的实现是在内存中记住所有已发布的随机数,但这会引入状态:客户端需要与同一个服务器通信,或者服务器需要共享有效随机数列表,这成为可伸缩性问题。

我的问题是:是否有可能提供安全和无状态的随机数我相信是这样,并希望它被(in)验证:

使 nonce 成为来自服务器的加密签名消息

  1. 过期时间戳(例如,未来 86400 秒)
  2. 一个随机数(也许?)
  3. 加密签名(也许是 sha 或 hmac?)

这可以全部捆绑在 401 Www-Authenticate 标头中提供的随机数中。当任何服务器看到这一点时,他们可以验证消息的完整性(通过重新计算签名)。然后可以检查时间戳,如果是,那么随机数是好的。

  • 这种技术在其他地方有描述吗?
  • 这种提供随机数的方式是否违背了随机数的目的?
  • 还有其他提供无状态 HTTP Digest 身份验证的方法吗?
1个回答

如果服务器是无状态的,则客户端发送给“获得身份验证”的任何内容都可以重播。攻击者只需窃听客户端的请求,然后可以发送自己的请求,并简单地复制相关标头。到期日期可以防止攻击者无限期地这样做,但即使攻击者只能在一天内破坏您的服务器,这仍然不能令人满意。重放攻击的可能性是无国籍状态的实质;这是不可避免的。

无论如何,HTTP Digest 并不是一个很好的协议。HTTP Digest 仅在攻击者可以监视交换数据但不能更改数据的模型中确保安全服务;这不是一个非常现实的模型。在实践中,您需要更彻底的东西,例如 SSL,此时您可以按原样发送密码(HTTP Basic)而忘记 HTTP Digest。