【问题标题】:Using 64 bit counter as nonce for HMAC使用 64 位计数器作为 HMAC 的随机数
【发布时间】:2018-03-22 07:25:21
【问题描述】:

我有一种情况,我需要在两台机器之间发送的消息的 HMAC 计算中添加随机数。我正在考虑使用无符号 64 位计数器作为随机数。

 // key pre-shared between sender and receiver
 HMAC(key, message || nonce)

我会在每条消息后递增计数器。接收机器将验证 HMAC 并增加其计数器。我在网上搜索了一下,发现 nonce 不能重复,但我也读到 counter 可以作为 nonce 工作。

由于 64 位值最终会回绕为零,这样的计数器是否可以被视为随机数?

【问题讨论】:

  • 估计它何时会达到 0。我怀疑是否会存储 2^64 个“随机顺序”随机数以供检查(与只需要检查最高计数器的计数器相反)。用 2^16 试试。否则有 128 位 UUID。
  • 我打算只存储最新的柜台。您如何看待 @Arthom 在 cmets 中的建议:stackoverflow.com/a/34968641/682869
  • 似乎有办法做到这一点,我认为Arthom在这个话题上比我好。
  • 一个随机数不应重复使用相同的键。给定预期的使用水平,粗略计算随机数计数器循环回 0 所需的时间。在这段时间内定期更换您的密钥,并将计数器重置为 0。您必须确保随机数/密钥组合永远不会重复。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Cryptography Stack ExchangeInformation Security Stack Exchange 会是一个更好的提问地点。

标签: cryptography hmac nonce


【解决方案1】:

是的。

由于 64 位值最终会回绕为零,这样的计数器是否可以被视为 nonce?

2^64 = 18446744073709551616。这个数字相当大。如果您每秒发送 100 万 条消息,那么您将不得不在 000 年 年内发送消息,直到 64 位随机数结束。

【讨论】:

  • 攻击者也可能发送消息,只是为了包装计数器。可能仍然需要很长时间,但想象一下 10Gb 以太网连接上的本地攻击者,甚至是本地人。所以这取决于细节。
  • 他提到“接收机器将验证 HMAC 并 [然后] 增加其计数器”,所以我有点假设涉及到一个密钥(攻击者不知道)。跨度>
猜你喜欢
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多