public 随机数的安全隐患

Security implications of public nonce

我打算使用 crypto_box() functions of Nacl 加密消息作为 client/server 协议的一部分。服务器必须处理多个客户端,从客户端到服务器的每条消息都使用服务器的 public 密钥加密,并使用客户端的私钥签名。

cypto_box()函数也需要我提供随机数。当前的消息编号可以用作随机数——据我所知,随机数对于能够跟踪交换了多少消息的攻击者来说一定是已知的。然后,客户端和服务器都会维护一个消息计数器,并简单地使用最新的计数器值作为随机数。

但是,我必须处理消息重新排序或丢失的情况。因此,我会将随机数以明文形式与加密消息一起发送。只要相同的 nonce 没有被使用两次,我认为这种方法没有任何问题。我错过了什么吗?

不,随机数和 IV 可被视为 public 知识。我刚刚查看了 NaCl 网站,没有看到任何与此相矛盾的明确评论。

CBC 操作模式对 IV(不可预测性)有一些额外要求,但这在 NaCl 中当然不是问题。

你应该确保你不接受任何随机数 <= 不过,最后收到的随机数,否则攻击者可能会重新发送或重新排序消息。