Mar*_*cin 32
Nonce用于使请求唯一.在没有随机数的认证方案中,恶意客户端可以生成请求ONCE并重播多次,即使计算成本很高.如果身份验证模式要求客户端为每个请求执行昂贵的计算,则通过使用nonce使请求变得唯一,重放攻击将被折叠,因为它的速度从O(1)变为O(N).
拥有客户端nonce的原因是为了防止恶意客户端进行重放攻击.
拥有服务器nonce的原因是为了防止中间人攻击,以防攻击者捕获有效的服务器响应,并尝试将其重播到客户端.
http://en.wikipedia.org/wiki/Cryptographic_nonce对如何使用随机数有一个很好的解释和图表.
http://en.wikipedia.org/wiki/Digest_access_authentication有一个很好的例子,说明在现实世界中如何使用随机数.
首先,有时客户端确实在摘要身份验证中提供随机数,但主要依赖于服务器(参见 RFC2617)
其次,因为如果您将身份验证过程视为握手,那么使用 Oauth,当您已经拥有令牌时,您已经完成了一半的握手,您已经与服务器进行了对话,因此您的下一步是联系服务器并提出您的服务请求。这也需要通过随机数来保护,因此您需要提供它。
或者,相反。我已经有了令牌,那么为什么我要联系服务器来获取随机数,以便我可以再次通过我的服务请求联系服务器呢?我可能会发出 1000 个服务请求,通过生成我自己的随机数,它会减少 2000 位不需要的网络流量。