加密信息再压缩,还是先压缩再加密?哪种方式更安全?

42

我认为这里根本没有任何额外的保护措施。


请务必查看使用压缩的可能的侧信道攻击:https://dev59.com/gG855IYBdhLWcg3wViy3#30644897 - Agost Biro
9个回答

37

提供的安全性并没有区别,但是由于压缩算法的工作方式,如果你先压缩再加密,你可能会获得更好的压缩。

压缩算法利用数据中的统计冗余(例如自然语言或许多文件格式中存在的冗余),这些冗余在加密时应该被消除,因此加密的消息不应该能够很好地被压缩。

来自维基百科文章

然而,无损数据压缩算法总是不能将某些文件压缩;事实上,任何压缩算法都必然无法压缩不包含可识别模式的任何数据。因此,尝试压缩已经压缩过的数据通常会导致扩展,压缩除最简单的加密数据外的所有数据也将如此。


5
不,如果是无损压缩,那么压缩后就不值得再压缩了。 - Reese Moore
2
顺便提一下,压缩也会减小明文的大小 - 这可能会微不足道地增加安全性。 - Piskvor left the building
5
在加密之前进行压缩可以对抗一些攻击。特别是已知明文攻击,其中已知的明文嵌入在其他未知明文中,使得已知文本的压缩版本受到未知明文的影响。 - Slartibartfast
1
首先进行压缩有助于提高安全性。明文的熵越低,破解加密就越容易。攻击者可以利用密码本和其他已知明文攻击手段。虽然可以说“假设加密方案对这些攻击是强大的”,但这只是在理论上有帮助,而不是在实践中。无论如何,在加密之前一定要进行压缩。(摘自Bruce Schneier的《应用密码学第二版》1996年)由于加密文件已经剥离了大部分冗余结构,因此压缩对加密文件并没有太大作用。 - Eadwacer
1
安全性提供的确有所不同。首先进行压缩可以显示原始消息的可压缩性。例如,通过检查发送到用户设备的地图瓦片的大小,可以确定用户在地图上的位置。 - vroomfondel
显示剩余6条评论

25

警告:如果攻击者控制了一部分需要进行压缩的明文,并且能够观察到加密后密文的大小,则可能通过调整他们控制的部分,直到密文的长度减小(这意味着他们控制的明文部分和秘密明文部分之间存在某种重复),来推断出其余的明文。

请参阅https://en.wikipedia.org/wiki/CRIME以获取更多信息。


有没有避免这种攻击向量的压缩算法?还是应该只是填充加密数据? - Lupilum
不,压缩后加密通常被认为是一种不好的做法。这就是为什么TLS 1.3不再使用压缩的原因。 - jvdh
这应该更高。最近在Threema中发现了侧信道漏洞:https://breakingthe3ma.app/files/Threema-PST22.pdf - Agost Biro

11

加密在短消息上效果更好,对于符号的均匀分布尤其重要。压缩将具有非均匀符号分布的消息替换为另一个更均匀分布的、更短的符号序列。

因此,在加密之前进行压缩可以数学上更安全。加密后进行压缩不会影响加密,但由于明文的非均匀分布,加密仍然相对较弱。

当然,如果您使用类似AES256这样的加密算法,并且NSA没有盯上您,那么这都只是理论。


1
为什么在加密之前进行压缩在数学上更安全?能否请您引用一下来源?我一直以来的理解是,对于像AES这样的好的加密算法,您无法区分密文和随机数据。 - Steve
2
@Steve:现代密码攻击假定您至少对可能的明文有一些了解。由于压缩良好的数据也与随机数据不可区分,因此很难甚至不可能验证您是否在破解密钥方面取得了任何进展。如果您不知道自己是否取得了任何进展,则必须回到暴力破解解密。在极端情况下,当您使用完美的加密算法加密真正随机的数据时,没有办法确定任何密钥是否正确。例如,使用一次性密码本就可以轻松实现这一点。 - MSalters
但是压缩数据并不与随机数据无法区分。如果你假设攻击者知道明文,或者可以将明文提交进行压缩和加密,那么攻击者也可以计算出明文的压缩版本。首先,通过先压缩数据并不能增加额外的随机性(或安全性)。事实上,压缩真正的随机数据会给攻击者一些关于数据的想法,因为他们可以开始寻找压缩头。 - Steve

5
在加密之前应该进行压缩。
加密可以将数据转换为高熵数据,通常与随机流无法区分。压缩依赖于模式以获得任何大小的减小。由于加密会破坏这些模式,如果对加密数据应用压缩算法,则压缩算法将无法给您带来太多(如果有的话)大小的减小。如果加密正确执行,则结果基本上是随机数据。大多数压缩方案通过找到可以在某种程度上因式分解的数据中的模式来工作。
在加密之前进行压缩还略微增加了您对差分密码分析(和某些其他攻击)的实际抵抗力,如果攻击者只能控制未压缩的明文,因为产生的输出可能难以推断。

4

没有额外的安全性(因为压缩不是一种安全机制),但是一个正确加密的消息不应该容易被压缩(即经验法则:如果你可以显著地压缩加密的消息,那么有问题)。

因此,先压缩再加密。


4

3
根据威廉·斯特林的书《网络安全基础:应用与标准 第4版》,由皮尔逊出版,在第7章第227页中提到:
作为默认设置,PGP在应用签名但在加密之前压缩消息。这样做的好处是既可以节省电子邮件传输和文件存储的空间,又可以保留HTML标记。在图7.1中,压缩算法的位置由Z表示压缩,Z–1表示解压缩,这一点至关重要。
签名在压缩之前生成有两个原因:
1. 最好对未压缩的消息进行签名,这样就可以仅将未压缩的消息与签名一起存储以便将来验证。如果对压缩文档进行签名,则需要存储消息的压缩版本以供以后验证,或者在需要验证时重新压缩消息。
2. 即使愿意为验证动态生成重新压缩的消息,PGP的压缩算法也存在困难。该算法不是确定性的;算法的各种实现在运行速度与压缩比之间实现不同的权衡,并因此产生不同的压缩形式。然而,这些不同的压缩算法是可互操作的,因为算法的任何版本都可以正确地解压缩其他版本的输出。在压缩之后应用哈希函数和签名会将所有PGP实现约束为压缩算法的同一版本。
消息加密在压缩之后应用以增强密码安全性。由于压缩消息比原始明文具有更少的冗余,因此密码分析更加困难。
尽管这些原因是针对PGP算法进行解释的,但它们很容易扩展到其他方法。因此,在加密之前最好进行压缩。

-3

提供的安全性没有任何区别。


谢谢,我可以想到一些压缩先的原因会更明智。我只是想确保我没有影响安全性。再次感谢!! - john

-5

是的,提供的安全性应该没有任何区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接