我有一个关于nonce的问题。我知道这是为了防止重放攻击,但如果黑客不知何故获得了nonce并在用户之前使用了它,会发生什么?
发布于 2010-09-11 19:55:31
nonce的目的是让每个请求都是唯一的,这样攻击者就不能在不同的上下文中重放请求。攻击者是否获得现时值并不重要:实际上,重点是因为数据包含现时值,所以对攻击者没有用处。
添加了
随机数是由将其引入会话的一方随机生成的。至关重要的是,攻击者不能影响随机数的选择,有时攻击者无法预测该选择。在分布式协议的一次运行中,每一方至少生成一次nonce,这是非常典型的。
有些协议中nonce是保密的。会话密钥可以是现时值(即,由一个参与者随机选择)和秘密(即,不直接通过线路传输)。事实上,在设计良好的协议中,会话密钥通常由两个随机数派生而来,一旦来自每一方。但保密并不是随机数的定义属性。
让我们以authentication protocol on the wikipedia page为例。正常的操作顺序是:
snonce并将其发送回客户端。cnonce,并将其连同其凭据、服务器随机数和客户端随机数(hash(snonce + cnonce + password))的哈希一起发送到服务器。<代码>H214<代码>H115服务器验证哈希并接受或拒绝登录。<代码>H216<代码>G217假设Mallory (攻击者)可以观察所有流量并发送自己的消息。如果她在步骤2之后获得了nonce,她可以将自己的凭据发送到服务器。这可能会帮助她造成拒绝服务,但如果她可以注入流量,她无论如何都可以做到这一点。没有客户的凭证,她就不能冒充客户。
假设Mallory在步骤3中获得了客户端发送的数据包。由于凭证和随机数是散列的,因此她不能修改数据包,只能将其作为一个整体再次发送。同样,根据服务器实现协议的方式,她可能会导致拒绝服务,但不会更多。(请注意,此协议要求服务器跟踪哪个现时值与哪个客户端相关联,并在步骤4中响应该客户端。)步骤3中的散列操作使Mallory无法获得她不能获得的数据(客户端的密码)。
要了解为什么服务器nonce在那里,假设它丢失了。然后,马洛里将能够获得包含hash(cnonce + passoword)的数据包,并且她可以稍后在单独的连接中重新发送该数据包,从而模拟客户端。
客户端现时值服务于类似的目的,尽管这在这里描述的简化协议中并不明显;在完整的协议中,“令牌”将包括包含该现时值的数据的散列,并且它将参与防止Mallory模拟服务器。
客户端随机数还用于防止密码猜测攻击。假设Mallory在步骤2截获了服务器的响应,并替换为她自己的服务器nonce。如果客户端使用hash(snonce + password)回复,这将使马洛里更容易运行大规模密码猜测攻击:她可以预先计算许多“容易猜测”的密码x的hash(snonce + x),并在许多客户端上运行她的攻击,希望其中一个具有弱密码。在这里,客户端现时值充当散列密码的盐。
客户端现时值还有助于保护客户端不受实现不佳的服务器的影响。假设服务器没有生成随机随机数,而是生成了一个常数,Mallory可以通过观察流量轻松找到该常数。然后,Mallory可以被动地执行上一段中描述的猜测攻击。因此,客户端现时值为客户端提供了额外的保护,即使服务器没有正确地实现协议。类似地,服务器现时值为服务器提供了一些保护,使其免受未正确生成现时值的客户端的影响,如果Mallory想要运行密码猜测攻击,则再次要求Mallory主动攻击客户端。这是一个常见的场景:每一方的现时值都为该方提供了一些保护,即使另一方偏离了协议。
发布于 2010-09-11 19:32:59
如果黑客在用户之前获得了nonce并使用了它,黑客就赢了。nonce背后的想法是,在某些情况下,黑客很难窃取nonce (通常是XSRF,nonce受同源策略保护)。因此,如果黑客可以窃取有效的nonce,那么nonce就不能保护您的用户。
https://stackoverflow.com/questions/3690738
复制相似问题