文件可以具有的加密层数是否有限制?

信息安全 加密 gnupg
2021-09-07 14:02:59

考虑给定文件的对称 GPG 加密my_file.txt类似的东西(在命令行中)

gpg --symmetric --cipher-algo AES256 my_file.txt

在用新密码提供提示后,上面会产生my_file.txt.gpg. 然后我可以再次加密:

gpg --symmetric --cipher-algo AES256 my_file.txt.gpg

(您想设置不同的密码)

等等。我可以做的上述迭代次数是否有限制?在我看来,没有,因为对称加密只是将一段文本转换成另一段文本,而无需首先询问这段文本是什么。这是真的?

4个回答

从理论上讲,您可以加密文件的次数没有限制。加密过程的输出仍然是一个文件,您可以再次将其传递给不同的算法并获得输出。

问题是,在解密方面,必须使用正确的密码以 LIFO(后进先出)方式解密。

例如,如果您的文件首先algo1用 password加密,然后用 passwordabcde加密,则必须先用(with password ) 解密,然后再用(with password ) 解密。algo2vwxyzalgo2vwxyzalgo1abcde

如果您通过不同的媒体或渠道发送密钥,则此方法很有意义。如果所有密码都通过同一个通道发送,这种方法就没有多大用处。

  • 所以,迟早你会用尽空间。

GnuPG 使用CFB操作模式进行对称加密(在rfc4880中定义)。CFB 模式需要 128 位大小的 IV 用于 AES 加密,并且不需要填充。

虽然理论上没有其他答案所指出的限制;由于文件大小增加,存在实际限制。例如,我加密了一个大小为 163 字节的文件,然后结果是 213 字节,重新加密之前的结果变成 295 字节,382 字节,473 字节,...

这些字节还包括GnuPG 的数据包所以,迟早你会用尽空间。

加密文件的次数没有限制是正确的,但不一定必须按照 LIFO 顺序解密。

您始终可以确定 LIFO 解密将起作用,但某些多重加密文件可以在不影响结果的情况下乱序解密(取决于用于加密的算法):

考虑使用具有不同密钥的 1 Time Pad (XOR) 对同一文件进行两次加密。您可以按任一顺序解密,因为 (A xor B) xor C == (A xor C) xor B 对于每一位。

(如果我有 50 个代表,这将是一条评论,请随时编辑另一个答案并删除这个。)

编辑:有关此边缘案例的更多详细信息,请参阅此问题

正如许多人已经观察到的那样,由于每次加密后需要将 IV 添加到文件中,在每个加密级别后您的文件大小都会略有增加。不是很相关。

相反,我想观察你这样做的动机显然是为了提高你的密文对攻击的鲁棒性,包括暴力攻击。如果您为每个 $h$ 级别的加密使用 $n$ 位的密钥,假设密钥 $k_1、k_2、\ldots、k_h$,您可能希望获得基于一个较长密钥的唯一加密的稳健性$h\times n$ 位。从理论上讲,可以运行Meet-in-the-Middle攻击,允许攻击者将密钥空间的大小减小到小于 $2^{h\times n}$。一个实际的例子是 2-DES,其中明文 $P$ 首先用 DES 密钥(56 位)加密,从而得到密文 $C'$,然后 $C'$ 再次用另一个 DES 密钥加密,因此得到最终的密文$C$。但是,期望密钥空间大小等于 $2^112$ 是错误的。实际大小将是 $2^57$,因为中间相遇攻击,即已知明文攻击(意味着攻击者知道一对 $(P, C)$),将允许攻击者首先构建一个包含 $P$ 的所有 $2^56$ 可能加密的表(每个潜在密钥一个),然后生成所有$C$ 的可能解密(同样,每个潜在的第二个密钥一个),对于它们中的每一个,我们称之为 $C''$,检查 $C''$ 是否等于表中的一些潜在密文. 如果匹配,我们得到 $C'' = C'$ 并且我们发现了两个 DES 密钥。加密/解密的总数将是 $2^56\times 2 = 2^57$。

出于类似的原因,3-DES(使用三个不同密钥的三级 DES 加密)提供 112 位密钥的安全性。