假设我有一个长度为50个字节的明文。我想使用流加密算法ChaCha20-Poly1305加密它。
Poly1305生成128位散列(16字节),因此加密消息的长度为50 + 16 =66.如果我给它添加nonce (12个字节),它将是78个字节。
但是..。例如,当我将1个字节添加到纯文本中时,密码文本的长度为79个字节(+1)。
我需要隐藏一个真正的明文长度。我听说过甲骨文填充攻击,所以如果我使用一些填充,或者创建我自己的填充方案(直到明文长度被16整除为止),这个攻击会影响我吗?
我的问题是:在经过验证的流密码中使用填充是安全的,比如ChaCha20-Poly1305?
发布于 2022-11-13 21:46:47
使用像Cha20-Poly1305这样的经过验证的流密码填充是否安全?
是的,假设您对填充进行身份验证,这样就不会被篡改。在加密之前应用填充解决了这个问题,是典型的方法。或者,可以使用相关数据对填充进行身份验证。
我不想让人们知道“正确”的明文长度。
有效的填充是非常困难的,因此任何简单的或自定义的方案(例如,填充到固定块大小)可能仍然会显示出大致长度,或者会产生大量开销(例如,消息长度的两倍)。
幸运的是,为此目的有两种填充方案:
请注意,这些只计算填充量。您需要使用类似ISO/IEC 7816-4的东西,以可逆的方式应用填充,而不需要存储数量。
此外,两者都有限制:
https://crypto.stackexchange.com/questions/102711
复制相似问题