我计划使用crypto_box()
的Nacl函数来加密消息,作为客户端/服务器协议的一部分。服务器必须处理多个客户端,并且使用服务器的公钥对从客户端到服务器的每条消息进行加密,并使用客户端的私钥进行签名。
cypto_box()
函数还要求我提供一个随机数。当前的消息号可以用作我的理解,对于能够跟踪交换了多少消息的攻击者来说,必须知道该随机数。然后,客户端和服务器都将维护一个消息计数器,并简单地使用最新的计数器值作为随机数。
但是,我必须处理重新排序或丢失消息的情况。因此,我将明文与加密消息一起发送明文。只要同一个nonce没有使用两次,我就不会发现这种方法存在任何问题。我错过了什么吗?
答案 0 :(得分:1)
不,nonce&IV和IV可能被视为公共知识。我刚检查了NaCl网站,但我没有看到任何与此相反的明确言论。
CBC操作模式对IV(不可预测性)有一些额外的要求,但这当然不是NaCl的问题。
你应该确保你不接受任何nonce< =最后收到的nonce,否则攻击者可能会重新发送或重新排序消息。