在基于摘要的身份验证中,nonce由服务器生成。然而,在基于oauth的身份验证中,nonce是由客户机生成的。我想知道是否有人知道产生差异的原因?
最佳答案
nonce用于使请求唯一。在没有nonce的身份验证方案中,恶意客户端可能会生成一次请求并多次重播,即使计算代价很高。如果身份验证模式要求客户端对每个请求执行昂贵的计算,因为使用nonce使请求唯一,则重放攻击将被折叠,因为其速度刚刚从o(1)变为o(n)。
使用客户端nonce的原因是为了防止恶意客户端进行重播攻击。
使用服务器nonce的原因是为了防止中间人攻击,以防攻击者捕获有效的服务器响应并尝试将其重播给客户端。
http://en.wikipedia.org/wiki/Cryptographic_nonce对如何使用nonce有很好的解释和图表。
http://en.wikipedia.org/wiki/Digest_access_authentication有一个很好的例子说明了在现实世界中如何使用nonce。