【发布时间】:2010-09-11 11:07:41
【问题描述】:
我有一个关于nonce 的问题。我知道这是为了防止重放攻击,但是如果黑客以某种方式获得了随机数并在用户之前使用它会发生什么?
【问题讨论】:
-
您无法真正缓解这种情况,对吗?如果有人偷了你的车,你如何阻止他们偷你的车?
-
还不如抱怨攻击者可以获取您的明文...
标签: security
我有一个关于nonce 的问题。我知道这是为了防止重放攻击,但是如果黑客以某种方式获得了随机数并在用户之前使用它会发生什么?
【问题讨论】:
标签: security
nonce 的目的是使每个请求都是唯一的,这样攻击者就无法在不同的上下文中重放请求。攻击者是否获得 nonce 无关紧要:事实上,关键是因为数据包含 nonce,所以它对攻击者没有用处。
添加:
随机数是由将其引入对话的一方随机生成的。 攻击者不能影响随机数的选择,这一点至关重要,有时攻击者无法预测该选择。在分布式协议的运行中,每一方至少生成一次随机数是很典型的。
有些协议中的 nonce 是保密的。会话密钥既可以是随机数(即由一个参与者随机选择)也可以是秘密(即不直接通过网络传输)。事实上,在设计良好的协议中,会话密钥通常派生来自两个随机数,一次来自每一方。但保密并不是随机数的定义属性。
我们以authentication protocol on the wikipedia page 为例。正常的操作顺序是:
snonce 并将其发送回客户端。cnonce,并将其连同其凭据的哈希、服务器随机数和客户端随机数 (hash(snonce + cnonce + password)) 发送到服务器。假设 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 也会为该方提供一些保护。
【讨论】:
cnonce。
如果黑客在用户之前得到了 nonce 并使用了它,那么黑客就赢了。 nonce 背后的想法是,在某些情况下,黑客很难窃取 nonce(通常是 XSRF,nonce 受同源策略保护)。 因此,如果黑客可以窃取有效的 nonce,nonce 就无法保护您的用户。
【讨论】: