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