需要帮助理解nonce
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要帮助理解nonce相关的知识,希望对你有一定的参考价值。
我有一个关于nonce的问题。我理解这是为了防止重放攻击但是如果黑客以某种方式得到nonce并在用户之前使用它会发生什么?
nonce的目的是使每个请求都是唯一的,这样攻击者就无法在不同的上下文中重放请求。攻击者获得nonce并不重要:事实上,重点在于因为数据包含nonce,所以对攻击者没用。
添加:
随机数是由将其引入对话的一方随机生成的。攻击者无法影响nonce的选择至关重要,有时攻击者无法预测该选择。通常,每个参与者在分布式协议的运行中至少生成一次随机数。
存在nonce保密的协议。会话密钥既可以是随机数(即,由一个参与者随机选择)和秘密(即不直接通过网络传输)。事实上,在一个设计良好的协议中,会话密钥通常来自两个nonce,一旦来自每一方。但保密并不是随意的定义属性。
我们以authentication protocol on the wikipedia page为例。正常的操作顺序是:
- 客户端启动与服务器的连接。
- 服务器生成并将nonce
snonce
发送回客户端。 - 客户端生成另一个nonce
cnonce
,并将其加上其凭据的散列,服务器nonce和客户端nonce(hash(snonce + cnonce + password)
)发送到服务器。 - 服务器验证哈希并接受或拒绝登录。
假设Mallory(攻击者)可以观察所有流量并发送自己的消息。如果她在第2步之后获取了nonce,她可以将自己的凭据发送到服务器。这可能有助于她导致拒绝服务,但无论如何,如果她可以注入流量,她也可以这样做。没有客户的凭据,她就无法冒充客户端。
假设Mallory在步骤3中获取了客户端发送的数据包。由于凭证和随机数经过哈希处理,她无法修改数据包,因此她只能将其作为一个整体再次发送。同样,根据服务器如何实现协议,她可能会导致拒绝服务,但不会更多。 (请注意,此协议要求服务器跟踪哪个nonce与哪个客户端关联,并在步骤4中响应该客户端。)步骤3中的散列操作使Mallory无法获取她不能获取的数据(客户端的密码)。
要查看服务器nonce存在的原因,假设它已丢失。然后,Mallory将能够获得包含hash(cnonce + passoword)
的数据包,并且她可以稍后在单独的连接中重新发送它,从而冒充客户端。
客户端nonce用于类似的目的,尽管这在此处描述的简化协议中并不明显;在完整协议中,“令牌”将包含包含此随机数的数据散列,并且它将参与阻止Mallory模拟服务器。
客户端随机数也用于防止密码猜测攻击。假设Mallory在步骤2截获服务器的响应并替换她自己的服务器nonce。如果客户回复hash(snonce + password)
,这将使Mallory更容易运行大规模密码猜测攻击:她可以预先计算hash(snonce + x)
许多“容易猜到的”密码x
,并对许多客户进行攻击,希望有一个弱者密码。这里客户端现时充当哈希密码的盐。
客户端现时还有助于保护客户端免受严重实现的服务器的影响。假设服务器没有生成随机nonce,而是生成Mallory可以通过观察流量轻松找到的常量。然后,马洛里可以被动地执行前一段中描述的猜测攻击。因此,即使服务器未正确实现协议,客户端随机数也会为客户端提供额外的保护。类似地,服务器nonce为服务器提供了一些保护,以防止未正确生成其nonce的客户端,再次要求Mallory在她想要运行密码猜测攻击时主动攻击客户端。这是一种常见的情况:即使另一方偏离协议,每一方的nonce都会为该方提供一些保护。
如果黑客获得了nonce并在用户之前使用它,则黑客获胜。在某些情况下,黑客很难窃取一个nonce(通常是XSRF,nonce受同源策略的保护)。因此,如果黑客可以窃取有效的nonce,则nonce无法保护您的用户。
以上是关于需要帮助理解nonce的主要内容,如果未能解决你的问题,请参考以下文章
没有让 wordpress nonce 与 wp-rest api 应用程序一起工作
无法使用 Braintree Payment Nonce 创建订阅