据我了解 https://security.stackexchange.com/a/3024/13447的答案,客户端随机数旨在防止攻击者通过重用计算结果来分摊暴力哈希计算的成本
- 对于多个用户和/或
- 多台服务器
但是,即使在最简单的摘要式身份验证变体 (qop = none) 中,theusername和realm(假定每个服务器唯一) 和nonce(不仅仅是每个服务器唯一) 都包含在经过哈希处理的数据中(通常是 MD5)。
这不是已经不可能在用户/服务器之间重复使用预先计算的哈希了吗?
因此,如果https://www.rfc-editor.org/rfc/rfc2617#section-4.9正确,客户端 nonce 只会增加安全性:
众所周知,选择随机数的能力使密码分析更容易[8]。
但是同一部分接着说
然而,目前还没有任何方法可以分析 Digest 使用选择的明文使用的 MD5 单向函数。
这是 1999 年的声明。从那时起,针对 MD5 发布了各种碰撞攻击,但如果我没记错的话,在这种情况下没有任何帮助。
我错过了什么?
更新我想把我们正在谈论的内容准确地说明是有道理的。在摘要式身份验证的最基本形式中,客户端计算并将以下结果发送到服务器:
MD5(MD5(username + ":" + REALM + ":" + password)
+ ":" + NONCE + ":" +
MD5(http-method) + ":" + uri))
除密码外,所有值也以纯文本形式发送。
为了更清楚,由客户端设置值的变量是小写的,而客户端从服务器检索的变量是大写的。(这使得我上面的“领域和随机数”谬误立即显而易见,因为 MITM 可以自由选择这些大写值,假设领域没有被客户检查,从“复杂性”来看,我'在大多数管理员的密码中已经看到,这将是常态,而不是例外)。
顺便说一句,uri 的值应该是一个绝对的 uri,例如http://servername/path?query,因此将是全局唯一的,但是,这取决于客户端的实现,而Opera 以这种方式实现它,我测试的Chrome、IE、Firefox的版本确实如此不是,而只是使用 '/path?query' (因为这违反了https://www.rfc-editor.org/rfc/rfc2617#section-3.2.2.5)。
因此,预计算表是否可以跨服务器重用取决于客户端实现,如果 MITM 可以选择,如果他有预计算表,它当然会更喜欢较弱的浏览器而不是 Opera。