在阅读了罗斯·安德森 (Ross Anderson) 的书《安全工程》( Security Engineering ) 的第一部分并澄清了 Wikipedia 上的一些主题之后,我想到了 Client Nonce (cnonce) 的概念。罗斯从未在他的书中提到它,我正在努力理解它在用户身份验证中的作用。
正常的 nonce 用于避免重放攻击,其中涉及使用过期响应来获得特权。服务器为客户端提供一个随机数(使用一次的数字),客户端被迫使用它来散列其响应,然后服务器使用它提供的随机数对它期望的响应进行散列,如果客户端的散列与客户端的散列匹配server 然后服务器可以验证请求是否有效且新鲜。这就是它所验证的一切;有效和新鲜。
然而,我为客户 nonce 找到的解释不那么直截了当且值得怀疑。用于摘要访问身份验证的维基百科页面和 Stack Overflow 上的几个响应似乎表明使用客户端随机数来避免选择明文攻击。我对这个想法有几个问题:
- 如果一个人可以嗅探和插入数据包,那么最大的漏洞是中间人攻击,无论是随机数还是随机数都无法克服,因此两者都毫无意义。
- 假设攻击者不想进行中间人攻击并想恢复身份验证详细信息,那么 cnonce 如何提供额外的保护?如果攻击者拦截通信并用自己的 nonce 回复请求,那么客户端的响应将是 nonce、data 和 cnonce 的哈希以及未加密形式的 cnonce。现在攻击者可以访问随机数、随机数和散列。攻击者现在可以使用 nonce 和 cnonce 散列其彩虹表并找到匹配项。因此,cnonce 提供零附加保护。
那么,无名氏的目的是什么?
我假设方程式的某些部分我不理解,但我还没有找到关于那部分是什么的解释。
编辑一些答案表明客户可以提供一个随机数,它将用于相同的目的。然而,这打破了挑战-响应模型,这意味着什么?