在Windows 10 1909的内部版本18363.592上使用7-zip 19.00,我使用AES-256和密码“ 123”加密了内容为“ hello there”的文本文件。我做了两次,完全相同的过程,但是如下所示,输出是不同的:

>为什么?

评论

您可能需要阅读有关概率加密的信息:en.wikipedia.org/wiki/Probabilistic_encryption

#1 楼

由于7zip使用密码块链接(CBC)模式进行加密,因此这是预期的行为。为此,您需要初始化向量(IV)唯一且不可预测。
它使用的是64位IV,但幸运的是,它已更改为128;

7z存档的加密强度为增加:随机初始化向量的大小从64位增加到128位,
,伪随机数生成器得到了改进。

如果相同文件的加密导致相同的密文,我们就会认为IV代有问题。希望从这里我们可以看到它没有。
注1:7zip使用$ 2 ^ {19} $倍的SHA256来从密码派生AES-256密钥。从大规模并行化这是不安全的。推荐使用诸如diceware之类的具有高熵的密码。请参阅Rogaway的开创性工作,其中涉及某些分组密码运算模式的模式评估

评论


$ \ begingroup $
@fgrieu如果我们可以结合使用philsmd / 7z2hashcat和hashcat示例,则7zip -m为11600(哈希模式),则为$ 2 ^ {19} $
$ \ endgroup $
– kelalaka
20-2-11在20:30

$ \ begingroup $
哼,我正在查看源代码的错误部分,正在处理一些zip加密货币。确实,7-zip 19.00密码密钥是CKeyInfo :: CalcKey,位于CPP / 7zip / Crypto / 7zAes.cpp中,默认情况下(在用户界面中不可更改)使用$ 2 ^ {19} $次迭代必须与SHA-256有关(但每次迭代都少于一轮,因此$ 2 ^ {18} $是对8个字节的密码有效的近似值)。
$ \ endgroup $
–fgrieu♦
20-2-11在21:07

$ \ begingroup $
该答案未解决“为什么?”的问题但只解决方法。
$ \ endgroup $
–zrajm
20-2-14在5:43

$ \ begingroup $
@zrajm为什么他们选择CBC,也许我们可以在档案中找到它们。为什么CBC模式每次都会给出不同的输出,因为它是按这种方式设计的。 CBC模式具有概率加密,要实现此功能,您需要为每个呼叫随机提供IV。
$ \ endgroup $
– kelalaka
20-2-14在7:46

$ \ begingroup $
您能否同时提出一种更好的7z替代品呢?
$ \ endgroup $
– Jaaq
20-2-14在15:02

#2 楼

通常,多次对相同的输入进行加密通常每次都会产生不同的输出。这样一来,窃听者不仅无法辨别输入是hello there,而且甚至无法辨别这两个文件是从同一输入产生的。因此,例如,您可以向Mary发送第一个文件,向Bob发送第二个文件,而窃听者将无法告诉您已向他们发送了完全相同的信息。


每次重复使用相同的密码时,都使用不同的加密密钥,在此过程中不仅要使用密码,还要使用随机盐; />每次调用加密算法时,都要为其提供不同的或随机的初始值(IV)。


评论


$ \ begingroup $
Re:“这样窃听者不仅不能知道输入在那里,而且甚至不能说这两个文件是从同一输入产生的”:更重要的是,使用随机性可以防止窃听者通过计算两个明文之间的差异,他看到了两个密文之间的差异,这对于攻击者而言可能比人们想象的更有用。 (请参阅en.wikipedia.org/wiki/One-time_pad#Exploits的第二个要点,在该漏洞中,一次使用一次便笺本可以使某些消息被破解。)
$ \ endgroup $
–ruakh
20-2-12在8:01

$ \ begingroup $
我是否也假定必须将IV传输到邮件的接收者吗?如果是这样,是否只是在没有IV的情况下以明文形式/加密了?
$ \ endgroup $
–Bananenaffe
20-2-12在15:03

$ \ begingroup $
@Bananenaffe:随机IV必须与消息一起传输,是的,但是也有一些设计使用或允许使用计数器IV,这些IV通常可以根据上下文确定。随机IV可以安全地发送未加密的内容,因为它们是随机位,因此(理论上)不会泄露任何内容。计数器IV最多显示到目前为止已发送了多少条消息及其顺序。
$ \ endgroup $
–路易斯·卡西利亚斯(Luis Casillas)
20-2-12在17:58