【问题标题】:need help understanding nonce需要帮助理解 nonce
【发布时间】:2010-09-11 11:07:41
【问题描述】:

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

【问题讨论】:

  • 您无法真正缓解这种情况,对吗?如果有人偷了你的车,你如何阻止他们偷你的车?
  • 还不如抱怨攻击者可以获取您的明文...

标签: security


【解决方案1】:

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

添加

随机数是由将其引入对话的一方随机生成的。 攻击者不能影响随机数的选择,这一点至关重要,有时攻击者无法预测该选择。在分布式协议的运行中,每一方至少生成一次随机数是很典型的。

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


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

  1. 客户端发起与服务器的连接。
  2. 服务器生成一个随机数snonce 并将其发送回客户端。
  3. 客户端生成另一个随机数cnonce,并将其连同其凭据的哈希、服务器随机数和客户端随机数 (hash(snonce + cnonce + password)) 发送到服务器。
  4. 服务器验证哈希并接受或拒绝登录。

假设 Mallory(攻击者)可以观察所有流量并发送她自己的消息。如果她在第 2 步之后获得了 nonce,她可以将自己的凭据发送到服务器。这可能有助于她导致拒绝服务,但如果她可以注入流量,她无论如何都可以这样做。如果没有客户的凭据,她就无法冒充客户。

假设 Mallory 在步骤 3 中获取了客户端发送的数据包。由于凭据和 nonce 已被散列,她无法修改数据包,只能将其作为一个整体再次发送。同样,根据服务器实现协议的方式,她可能会导致拒绝服务,但仅此而已。 (请注意,此协议要求服务器跟踪哪个 nonce 与哪个客户端相关联,并在步骤 4 中响应该客户端。)步骤 3 中的散列操作使 Mallory 无法获取她不能获取的数据(客户端的密码)。

要查看为什么存在服务器随机数,假设它丢失了。然后,Mallory 将能够获得一个包含 hash(cnonce + passoword) 的数据包,她可以稍后在单独的连接中重新发送它,从而冒充客户端。

客户端 nonce 用于类似的目的,尽管这在此处描述的简化协议中并不明显;在完整的协议中,“令牌”将包含包含此随机数的数据散列,并且它将参与防止 Mallory 冒充服务器。

客户端随机数还用于防止密码猜测攻击。假设 Mallory 在步骤 2 中截获了服务器的响应并替换了她自己的服务器 nonce。如果客户端回复hash(snonce + password),这将使Mallory 更容易进行大规模密码猜测攻击:她可以预先计算hash(snonce + x) 以获取许多“容易猜到”的密码x,并在多个客户端上运行她的攻击。希望有一个弱密码。在这里,客户端 nonce 充当散列密码的盐。

客户端随机数还有助于保护客户端免受实施不当的服务器的影响。假设服务器没有生成一个随机的 nonce,而是一个 Mallory 可以通过观察流量很容易找到的常数。然后马洛里可以被动地执行上一段中描述的猜测攻击。因此,即使服务器没有正确实现协议,客户端 nonce 也会为客户端提供额外的保护。类似地,服务器 nonce 为服务器提供了一些保护,以防止未正确生成其 nonce 的客户端,再次要求 Mallory 在她想要运行密码猜测攻击时主动攻击客户端。这是一种常见的情况:即使另一方偏离协议,每一方的 nonce 也会为该方提供一些保护。

【讨论】:

  • 感谢您花时间给出如此详细的解释。我很好奇服务器将如何生成随机数(随机数?)以及服务器将如何检查随机数是否正确。客户端随机数也是由客户端生成的,那么服务器如何知道它的正确性。还是我错过了什么?
  • @jiewmeng:我已经扩展了我最初的解释。我还添加了更多在我最初的答案中错过的随机数有用的方法。顺便说一句,如果您对安全性感兴趣,我建议您阅读Ross Anderson's book。这是一本很棒的书。对于您的直接关注,请参阅协议章节。
  • @Gilles 嗨,你能解释一下客户端如何生成第 3 点中提到的哈希(snonce + cnonce + 密码)。我的意思是,考虑到 Web 应用程序,它将使用哪种语言生成哈希.
  • @Gilles - 如果您确定客户端正确生成了它的随机数,您就不需要服务器随机数正确了吗?
  • @JoãoPimentelFerreira 客户端也发送cnonce
【解决方案2】:

如果黑客在用户之前得到了 nonce 并使用了它,那么黑客就赢了。 nonce 背后的想法是,在某些情况下,黑客很难窃取 nonce(通常是 XSRF,nonce 受同源策略保护)。 因此,如果黑客可以窃取有效的 nonce,nonce 就无法保护您的用户。

【讨论】:

  • 一般来说,nonce 的意义不是攻击者不能看到它,而是攻击者不能选择它。有时必须对 nonce 保密(例如会话密钥);然后它被加密了。
  • +1 Julien Parlard 是正确的,如果黑客可以在用户之前使用随机数,那么随机数就被打败了。
  • 在安全方面我还是个初学者,但我不认为在客户端之前获得服务器随机数会给黑客带来任何优势。如果不将其与密码结合起来,他将无法做任何事情。因此,唯一对黑客有利的事情就是在服务器接收到来自真实用户的哈希(密码,随机数)之前拦截一个带有哈希(密码,随机数)的包并将其发送到服务器。对不对?
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2022-01-15
  • 1970-01-01
  • 2012-09-01
  • 2014-11-25
相关资源
最近更新 更多