OpenID Connect 规范要求隐式流客户端生成和验证随机数:
用于将客户端会话与 ID 令牌相关联并缓解重放攻击的字符串值。
那些是什么重放攻击?
换句话说,nonce使用隐式流时不验证的安全影响是什么?
OpenID Connect 规范要求隐式流客户端生成和验证随机数:
用于将客户端会话与 ID 令牌相关联并缓解重放攻击的字符串值。
那些是什么重放攻击?
换句话说,nonce使用隐式流时不验证的安全影响是什么?
我目前的理解如下:
客户端(在用户浏览器中运行的 Web 应用程序)生成一个 nonce,将其放入浏览器的会话存储中,并重定向到身份验证服务器,将 nonce 作为参数传递。身份验证后,身份验证服务器重定向回客户端,传递一个包含 nonce 的签名 id 令牌,客户端必须根据会话存储中的 nonce 验证该令牌。
如果 nonce 未被验证,攻击者可以通过诱使用户访问他的站点并使用从不同请求中获得的有效 id 令牌发送重定向来替换另一个 id 令牌。
除了 id 令牌,身份验证服务器还回复一个访问令牌。如果 nonce 未被验证,攻击者可以通过欺骗用户到他的站点并使用该令牌重定向来替换不同的访问令牌。这可能用于客户端拒绝服务攻击(特别是如果浏览器选项卡共享令牌存储,即使用本地而不是会话存储)。
总之,nonce 验证对于信任 id 令牌是必要的。如果不需要信任 id 令牌,则可以跳过随机数验证。
给出重放数据包和使用随机数的疯狂想法。这不涉及 OpenId,这是我的一般想法。
假设在 A 和 B 两方的通信中;A 将他的密钥分享给 B 以证明他的身份,但与此同时,攻击者 C 窃听他们之间的对话并将证明他身份所需的信息保留给 B。
后来C联系B并证明其真实性。
示例:如果 A 有一个 nonce 缓存,它存储一个伪随机 nonce 数。B 直接使用它来制作回复数据包。当 A 收到 B 的第一个回复数据包时,它会清除缓存。
对于下一次传输,一个新的随机 nonce 被保存在 A 的 nonce 缓存中。并用于将数据包传输到 B。
如果 C 在一段时间后尝试向 A 重放一个数据包。A 将由于错误的 nonce 而丢弃。
注意:Nonce 可以加密发送。根据协议,可以有多种使用 nonce 的方法。