如果Nonce只能使用一次,那么OAuth中的时间戳有什么意义?

时间:2011-07-28 21:08:22

标签: oauth unix-timestamp nonce

我起初误解了OAuth的时间戳实现,认为这意味着时间戳不会超过当前时间30秒内被拒绝,但事实证明这是错误的,原因包括我们可以无论时区如何,都不能保证每个系统时钟足够同步到分钟和秒。然后我再次阅读它以获得更清晰:

  

“除非服务提供商另有规定,否则时间戳为   表示自格林威治标准时间1970年1月1日00:00:00以来的秒数。   时间戳值必须是正整数,并且必须相等或   大于先前请求中使用的时间戳。“

来源: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值包含在   签名,攻击者无法在不知情的情况下更改签名   共享秘密。

     

对服务提供商而言,使用随机数可能会非常昂贵   永久存储所有收到的nonce值。要做   实现更简单,OAuth为每个请求添加时间戳值   这允许服务提供商仅保留a的nonce值   有限的时间。 当请求带有更旧的时间戳时   与保留的时间范围相比,它被拒绝作为服务提供者   在那个时间段内不再有随机数。可以安全地假设   在允许的时间限制之后发送的请求是重放攻击。 OAuth的   提供了实现时间戳的一般机制但是离开了   实际执行到每个服务提供商(一个很多的领域)   相信应该由规范重新考虑)。来自安全   实际上,nonce是时间戳值的组合   和nonce字符串。只有在一起,它们才能提供永恒的独特价值   攻击者永远不能再使用它。

我感到困惑的原因是,如果Nonce仅使用一次,为什么服务提供商会根据时间戳拒绝? “服务提供商不再具有该时间段内的随机数”对我来说很困惑,并且听起来好像只能在最后一次使用它之后的30秒内重新使用现时。

所以有人可以为我清除这个吗?如果nonce是一次性使用而且我没有将时间戳与我自己的系统时钟进行比较(因为这显然不可靠),时间戳的重点是什么。有意义的是,时间戳只相对于彼此,但是由于具有独特的随机数要求,它似乎无关紧要。

4 个答案:

答案 0 :(得分:31)

时间戳用于允许服务器优化其随机数的存储。基本上,将读取的随机数视为时间戳和随机字符串的组合。但是通过具有单独的时间戳组件,服务器可以使用短窗口(例如,15分钟)实现基于时间的限制,并限制其所需的存储量。如果没有时间戳,服务器将需要无限存储来保存每个随机数。

假设您决定在时钟和客户端之间留出长达15分钟的时差,并跟踪数据库表中的nonce值。该表的唯一键将是“客户端标识符”,“访问令牌”,“随机数”和“时间戳”的组合。当有新请求进入时,检查时间戳是否在时钟的15分钟内,然后在表中查找该组合。如果找到,请拒绝该呼叫,否则将其添加到您的表中并返回所请求的资源。每次向表中添加新的随机数时,请删除该“客户端标识符”和“访问令牌”组合的任何记录,时间戳超过15分钟。

答案 1 :(得分:6)

好的,经过充分的思考,我相信我已经破解了这个。

他们希望我始终知道上次成功请求的时间戳,以便在此之前有任何时间戳进入时会被忽略。

此Nonce必须是唯一的,但我只会将它们存储到某个日期范围,因此如果时间戳是这么多小时,Nonce将被删除然后可以再次使用,但是因为最后使用的时间戳也被存储,即使Nonce被认为是唯一的,它们也不能重用旧的请求,因为该请求的时间戳将过时。

然而,这仅适用于签名。如果他们在请求中更改了时间戳或Nonce,则签名将不再与请求匹配,并且将被拒绝(因为时间戳和Nonce都是签名创建的一部分,并且他们没有签名密钥)。

呼!

答案 2 :(得分:0)

如果OAuth只使用了timstamp,攻击者可以相对容易地猜出下一个时间戳是什么,并将自己的请求注入进程。他们只需要做“之前的时间戳+ 1”。

通过使用以加密安全方式(希望)生成的nonce,攻击者不能简单地注入TS + 1,因为他们没有适当的nonce来自我验证。

将其视为安全门锁,需要钥匙卡和密码。你可以偷钥匙卡,但仍然无法通过门,因为你不知道别针。

答案 3 :(得分:-1)

有理由假设有人可能试图用暴力破解现时。时间戳可以减少某人成功的机会。