需要帮助理解nonce

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要帮助理解nonce相关的知识,希望对你有一定的参考价值。

我有一个关于nonce的问题。我理解这是为了防止重放攻击但是如果黑客以某种方式得到nonce并在用户之前使用它会发生什么?

答案

nonce的目的是使每个请求都是唯一的,这样攻击者就无法在不同的上下文中重放请求。攻击者获得nonce并不重要:事实上,重点在于因为数据包含nonce,所以对攻击者没用。

添加:

随机数是由将其引入对话的一方随机生成的。攻击者无法影响nonce的选择至关重要,有时攻击者无法预测该选择。通常,每个参与者在分布式协议的运行中至少生成一次随机数。

存在nonce保密的协议。会话密钥既可以是随机数(即,由一个参与者随机选择)和秘密(即不直接通过网络传输)。事实上,在一个设计良好的协议中,会话密钥通常来自两个nonce,一旦来自每一方。但保密并不是随意的定义属性。


我们以authentication protocol on the wikipedia page为例。正常的操作顺序是:

  1. 客户端启动与服务器的连接。
  2. 服务器生成并将nonce snonce发送回客户端。
  3. 客户端生成另一个nonce cnonce,并将其加上其凭据的散列,服务器nonce和客户端nonce(hash(snonce + cnonce + password))发送到服务器。
  4. 服务器验证哈希并接受或拒绝登录。

假设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 创建订阅

需要一点帮助来理解 Apple 关于 Core Data 的文档

PHP必用代码片段

CSP nonce 实现是啥样的?