【发布时间】:2011-10-15 11:50:27
【问题描述】:
一开始我误解了 OAuth 的时间戳实现,认为这意味着一个不在当前时间之后 30 秒内的时间戳将被拒绝,结果证明这是错误的,原因包括我们可以不保证每个系统时钟都足够同步到分钟和秒,无论时区如何。然后我又读了一遍以更清楚:
"除非服务提供者另有规定,否则时间戳为 以自 1970 年 1 月 1 日 00:00:00 GMT 以来的秒数表示。 时间戳值必须是正整数并且必须等于或 大于之前请求中使用的时间戳。”
来源:http://oauth.net/core/1.0/#nonce
意味着时间戳仅与来自同一来源的先前请求进行比较,而不是与我的服务器系统时钟进行比较。
然后我在这里阅读了更详细的描述:http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iii-security-architecture/
(TL;DR? - 跳到下面的粗体部分)
为防止再次使用(重放)受损请求, OAuth 使用随机数和时间戳。术语nonce的意思是“使用的数字 一次'并且是一个唯一且通常是随机的字符串,旨在 唯一标识每个签名的请求。通过拥有唯一标识符 对于每个请求,服务提供者都能够阻止请求 被多次使用。 这意味着消费者生成一个 发送给服务提供者的每个请求的唯一字符串,以及 服务提供者跟踪所有用于防止它们的随机数 避免被第二次使用。 因为 nonce 值包含在 签名,攻击者不能在不知道签名的情况下更改它 共享秘密。
根据服务提供商的需求,使用 nonce 的成本可能非常高 永久存储收到的所有随机数值。做 实现更简单,OAuth 为每个请求添加一个时间戳值 这允许服务提供者只保留随机值 有限的时间。 当请求带有较早的时间戳时 超过保留的时间范围,作为服务提供者被拒绝 不再有该时间段的随机数。 可以安全地假设 在允许的时间限制之后发送的请求是重放攻击。身份验证 提供了实现时间戳的通用机制,但离开 到每个服务提供者的实际实施(一个领域很多 相信应该由规范重新审视)。从证券 从观点来看,真正的 nonce 是时间戳值的组合 和随机数字符串。只有结合在一起,它们才能提供永恒的独特价值 攻击者永远无法再次使用。
我感到困惑的原因是,如果 Nonce 只使用一次,为什么服务提供商会根据时间戳拒绝? “服务提供商不再拥有该时间段的随机数”让我感到困惑,听起来好像可以重复使用随机数,只要它在 最后一次使用的 30 秒内。
那么任何人都可以为我解决这个问题吗?如果 nonce 是一次性使用,并且我没有将时间戳与我自己的系统时钟进行比较(因为这显然不可靠),那么时间戳的意义何在。时间戳只会相互关联是有道理的,但对于唯一的随机数要求,它似乎无关紧要。
【问题讨论】:
标签: oauth unix-timestamp nonce