最新消息:本站介绍:国外VPS、云服务器,海外服务器,一手资源推荐平台

加密的ZIP文件可以有两个正确的密码-这就是原因

网络安全 快米云 来源:快米云 115浏览

受密码保护的 ZIP 存档是压缩和共享文件集的常用方法——从敏感文档到恶意软件样本,甚至是恶意文件(即电子邮件中的网络钓鱼“发票”)。

但是,您是否知道加密的 ZIP 文件可能有两个正确的密码,并且在提取 ZIP 时都产生相同的结果?

带有两个密码的 ZIP 文件
Positive Technologies 的网络安全研究员Arseniy Sharoglazov周末分享了一个简单的实验,他制作了一个名为x.zip的受密码保护的 ZIP 文件。

Sharoglazov 选择用于加密他的 ZIP 的密码是1987 年热门歌曲的双关语,该热门歌曲 已成为流行的技术 meme:

Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You
但研究人员证明,当 使用完全不同的密码提取x.zip时,他没有收到任何错误消息。

事实上,使用不同的密码可以成功提取 ZIP,原始内容完好无损:

pkH8a0AqNbHcdw8GrmSp

相同 ZIP 文件的两个不同密码导致成功提取(Sharoglazov)
ZZQIDC 能够使用不同的 ZIP 程序成功地重现该实验。我们使用了p7zip(macOS 的 7-Zip 等效项)和另一个名为 Keka的 ZIP 实用程序。

与研究人员的 ZIP 档案一样,我们的档案是使用上述更长的密码创建的,并启用了AES-256 加密模式。

虽然 ZIP 使用较长的密码加密,但使用任一密码成功提取了存档。

这怎么可能?
在回应 Sharoglazov 的演示时,一位好奇的读者, Rafa 提出了一个重要的问题,“如何????”

Twitter 用户 Unblvr 似乎发现了其中的奥秘:

在启用 AES-256 模式生成受密码保护的 ZIP 存档时 ,如果密码太长,ZIP 格式使用PBKDF2算法并对 用户提供的密码进行哈希处理。研究人员解释说,太长是指超过 64 个字节(字符)。

这个新计算的哈希值不是用户选择的密码(在本例中为“ Nev1r-G0nna-G2ve-…”),而是文件的实际密码。

当用户尝试提取文件并输入超过 64 字节的密码(“ Nev1r-G0nna-G2ve-… ”)时,用户的输入将再次被 ZIP 应用程序散列并与正确的密码进行比较密码(现在它本身就是一个哈希)。匹配将导致成功的文件提取。

此示例中使用的替代密码(“ pkH8a0AqNbHcdw8GrmSp ”)实际上是较长密码的SHA-1 哈希的 ASCII 表示。

“Nev1r-G0nna-G2ve-…”的 SHA-1 校验和 = 706b4838613041714e62486364773847726d5370。

此校验和在转换为 ASCII 时产生:pkH8a0AqNbHcdw8GrmSp

但是请注意,在加密或解密文件时,仅当密码长度大于 64 个字符时才会进行哈希处理。

换句话说,较短的密码在压缩或解压缩 ZIP 的任何阶段都不会被散列。

这就是为什么在加密阶段选择长“ Nev1r-G0nna-G2ve-… ”字符串作为密码时,ZIP 程序设置的实际密码实际上是该字符串的 (SHA1) 哈希值。

在解密阶段,如果您输入“ Nev1r-G0nna-G2ve-… ”,它将被散列并与之前存储的密码(即 SHA1 散列)进行比较。但是,在解密阶段输入较短的“pkH8a0AqNbHcdw8GrmSp”密码将使应用程序直接将此值与存储的密码(也就是 SHA1 哈希)进行比较。

Wikipedia 上 PBKDF2的 HMAC 冲突小节为感兴趣的读者提供了更多技术见解。

“当使用 HMAC 作为其伪随机函数时,PBKDF2 有一个有趣的特性。可以轻松地构造任意数量的不同密码对,每对密码对都存在冲突,”该条目指出。

“如果提供的密码比底层 HMAC 哈希函数的块大小长,则密码首先被预先散列成摘要,然后将该摘要用作密码。”

但是,现在同一个 ZIP 有两个可能的密码这一事实并不代表安全漏洞,“因为仍然必须知道原始密码才能生成密码的哈希值,”该条目进一步解释道。

得到一个完美的密码
这里要注意的一个有趣的关键方面是,每个 SHA-1 哈希的 ASCII 表示不必是字母数字。

换句话说,假设我们在这个实验中为我们的 ZIP 文件选择了以下密码。密码长度超过 64 个字节:

Bl33pingC0mputer-Sh0w-M3-H0W-t0-pR0Duc3-an-eNcRyPT3D-ZIP-File-in-the-simplest-way
它的 SHA-1 校验和结果是:bd0b8c7ab2bf5934574474fb403e3c0a7e789b61

这个校验和的 ASCII 表示看起来像一组乱七八糟的字节——不像研究人员为他的实验生成的替代密码那样优雅:

ZZQIDC的 SHA-1 哈希的 ASCII 表示 …密码
ZZQIDC询问 Sharoglazov 他如何能够选择一个密码,其 SHA-1 校验和将使得其 ASCII 表示产生一个干净的字母数字字符串。

“这就是使用 hashcat 的原因,”研究人员告诉ZZQIDC。

通过使用开源密码恢复工具hashcat的略微修改版本,研究人员使用字母数字字符生成了“Never Gonna Give You Up…”字符串的变体,直到他得到一个完美的密码。

“我测试了 Nev0r、Nev1r、Nev2r等等……我找到了我需要的密码。”

而且,Sharoglazov 就是这样得到一个大致读作“Never Gonna Give You Up…”的密码,但其 SHA-1 校验和的 ASCII 表示是一个简洁的字母数字字符串。

对于大多数用户来说,创建一个受密码保护的 ZIP 文件并选择他们的密码就足够了,这就是他们需要知道的全部内容。

但是,如果您决定冒险,这个实验可以让您一窥围绕加密 ZIP 的众多谜团之一,例如拥有两个密码来保护您的机密。

转载请注明:VPS资讯_海外云服务器资讯_海外服务器资讯_IDC新闻 » 加密的ZIP文件可以有两个正确的密码-这就是原因