在挑战-响应机制(和其他系统)中,建议不要使用基于时间的随机数。
为什么应该避免?
(免责声明:我没有加密学位,我写的一切都只是外行的意见。)
不鼓励使用基于时间的随机数,因为它们可能会偶然发生冲突并且很容易以错误的方式实现。
随机数(“仅使用一次的数字”)与密钥或初始化向量不同。使用它们的密码通常在设计时考虑到:
因此,选择零作为起始随机数并在发送每个连续消息之前递增它是完全可以的。Nonce 可预测性根本不是问题。
不鼓励基于时间的 nonce 的唯一原因是可能的向后时钟调整。如果您的系统 NTP 服务将时钟倒回两秒,那么您很可能会在短时间内发送两条具有相同随机数的加密消息。如果你能保证不会发生时钟倒带,那就继续吧。
反对基于时间的随机数的另一点是时钟分辨率可能不足以为每条消息提供唯一的编号。
升级版:
就加密强度而言,使用基于计数器或基于时间的随机数是安全的。但是,它们可能会通过向攻击者提供额外信息来削弱您的安全系统,即:您的系统已经发送了多少消息,这是平均消息速率,即它同时服务的客户端数量等等。攻击者或许能够利用这些信息为自己谋利。这就是所谓的旁道攻击。
也可以看看:
基于时间或计数器的 nonce 可能会导致攻击者可以提前准备的情况......单独通常不会破坏系统,但这是朝着错误方向迈出的一步......不可预测的 nonce 通常不会造成伤害...