我使用的是ChaCha20与Poly1305的自实现。因为现在只有96位,所以不能随意选择。有人能建议一种有效的方法来从密钥生成现在吗?
发布于 2020-03-04 07:37:36
RFC 7539描述了您的需求。
在实现本文档时,最重要的安全考虑是ChaCha20中使用的nonce的唯一性。计数器和LFSR都是生成唯一非DES的可接受的方法,就像使用64位密码(如DES)加密计数器一样。请注意,使用用128位或256位密码加密的计数器的截断是不可接受的,因为这种截断可能会在短时间内重复。(螺栓是我的)
LFSR和计数器是非常有效的。使用96位二进制计数器或具有原始多项式的96位长度LFSR .在重新启动系统时必须小心,特别是系统和电源故障,因为您必须将当前存储在某个地方才能正确恢复。您需要确保当发生故障时,要么在计数器/LFSR上跳远,要么生成一个新的键。
您还可以在考虑生日绑定\mathcal{O}(\sqrt n)时随机生成它。在生成2^{48}之前,您应该先停下来,在相同的键下创建一个碰撞。你可以通过计算生日来调整对手的优势。
还可以将计数器/LFSR与随机生成相结合。例如,使用48位二进制计数器和48位随机.对于每一次产生,增加计数器/LFSR,并生成一个新的48位随机。
这比单计数器/LFSR或基于随机的计数器更可靠。在故障期间,如果系统没有正确地写入计数器/LFSR的最后一步/阶段,那么随机部分将有助于减少以前的nonce的重复。
重复当前的
的后果
如果一个nonce被重复,那么一次Poly1305键和密钥流在消息之间都是相同的。这揭示了明文的异或,因为明文的异或等于密文的异或。
https://crypto.stackexchange.com/questions/77982
复制相似问题