如果一个流密码(如Chacha20 )使用64位的nonce,那么使用随机的nonce将是不安全的,因为它有意外重复的风险(如果用相同的密钥重复两次将是灾难性的)。在不使用简单计数器的环境中,请考虑以下构造:
密文= chacha20(clearText,perEncryptionKey,perEncryptionNonce)
盐和现在将被附加到密文和包括在mac中。考虑到每次加密都会改变密钥(因此不太可能与同一次加密一起使用),这种结构安全吗?我知道XChacha20 20/XSalsa20 20,他们已经解决了这个问题,但我还是很好奇。
发布于 2017-07-10 15:46:20
如果不看代码,我会说您的构造与XChaCha20基本相同:
来自https://download.libsodium.org/doc/advanced/xchacha20.html
在内部,XChaCha20的工作方式类似于计数器模式中使用的块密码。它使用HChaCha20哈希函数从原始键和扩展的nonce派生子键和子键,以及专用的64位块计数器,以避免在每个块之后增加nonce。
(强调地雷)
我不确定这个HChaCha20哈希函数是否有任何特定的属性,但是使用HKDF可能是很好的。
这里是关于XSalsa20的论文。应该有可能修改安全证明。
https://crypto.stackexchange.com/questions/50028
复制相似问题