0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

加密的 ZIP 文件可能存在两个密码?

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-09-20 10:25 次阅读

Positive Technologies 的网络安全研究员 Arseniy Sharoglazov 近日在社交平台分享了一个简单的实验并指出,加密的 ZIP 文件可能存在两个正确的密码,并且都可以提取出相同的结果。

“创建 ZIP:7z a http://x.zip/etc/passwd -mem=AES256 -p

使用这个密码:Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You提取它:7z e http://x.zip

使用这个密码:pkH8a0AqNbHcdw8GrmSpMagic!”

Sharoglazov 制作了一个名为 x.zip 的受密码保护的 ZIP 文件,选择的密码是 1987 年的热门英文歌曲的双关语:

Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You

但实验结果表明,当他使用一个完全不同的密码(pkH8a0AqNbHcdw8GrmSp)提取 x.zip 时,不会收到任何的报错信息

056a108c-3822-11ed-ba43-dac502259ad0.jpg

对此,BleepingComputer 使用不同的 ZIP 程序成功地对该实验进行了复现。该网站使用了 p7zip(相当于 macOS 的 7-Zip)和另一个叫 Keka 的 ZIP 工具,与 Sharoglazov 一样在创建时采用了较长的密码,并启用了 AES-256 加密模式。结果表明,虽然 ZIP 使用较长的密码加密,但使用任一密码都能成功提取了存档。

一些网友在 Sharoglazov 的动态下针对该实验进行了讨论,一位 ID 为 Unblvr 的用户指出,造成这个结果的原因可能在于:

ZIP 使用 PBKDF2,如果输入太大,它会 hash 输入 。该 hash(作为原始字节)成为实际密码。尝试使用 SHA1 对第一个密码进行 hash,并将十六进制摘要解码为 ASCII.。. :)

在启用 AES-256 模式生成受密码保护的 ZIP 存档时 ,如果密码太长,ZIP 格式会使用 PBKDF2 算法并对用户提供的密码进行 hash 处理。在这种情况下,这个新计算的 hash 将会成为文件的实际密码。研究人员解释称,太长是指超过 64 个字节(字符)。

当用户试图提取文件,并输入一个超过 64 字节的密码时,用户的输入将再次由 ZIP 应用程序进行 hash,并与正确的比较密码(现在本身就是一个 hash)。如果匹配,将可以成功进行文件提取。

示例中使用的替代密码 pkH8a0AqNbHcdw8GrmSp 实际上是较长密码 SHA-1 hash 的 ASCII 表示。Nev1r-G0nna-G2ve-。.. 的 SHA-1 checksum = 706b4838613041714e62486364773847726d5370。此校验和在转换为 ASCII 时产生:pkH8a0AqNbHcdw8GrmSp。

但是值得注意的是,在加密或解密文件时,仅当密码长度大于 64 个字符时才会进行 hash 处理。换句话说,较短的密码在压缩或解压缩 ZIP 的任何阶段都不会出现这种情况。这也是为什么在加密阶段选择长的 “Nev1r-G0nna-G2ve-。..” 字符串作为密码时,ZIP 程序设置的实际密码实际上是该字符串的 (SHA1) hash。

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

“当使用 HMAC 作为其伪随机函数时,PBKDF2 有一个有趣的特性。可以轻松地构造任意数量的不同密码对,每对密码对都存在冲突。如果提供的密码长于底层 HMAC hash function 的块大小,则首先要将密码 pre-hashed 成一个 digest,然后将该 digest 作为密码使用。”

不过,同一个 ZIP 有两个可能的密码这一事实并不代表存在有安全漏洞;因为生成密码的 hash 的前提是需要知道原始密码。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 密码
    +关注

    关注

    8

    文章

    191

    浏览量

    30604
  • 压缩
    +关注

    关注

    2

    文章

    102

    浏览量

    19457
  • 应用程序
    +关注

    关注

    38

    文章

    3304

    浏览量

    58095

原文标题:加密ZIP文件可以存在两个正确的密码

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在Java中加密和解密zip文件

    zip4j 2 . 9 . 0 压缩一文件 首先,我们将使用 ZipFile addFile() 方法将一名为 aFile.txt 的文件
    的头像 发表于 10-08 11:48 1877次阅读

    怎么让工程中同时存在两个ioc文件?

    你好,我现在需要在一工程中兼容两个不同的项目,这两个项目有不同的配置文件,请问可否让两个ioc文件
    发表于 05-23 07:50

    文件夹怎么加密

    种方法:方法一:右击文件夹--添加到压缩文件--高级 设置密码不要忘记密码,要不就打不开了 方法二:还是建议直接下载
    发表于 11-04 17:10

    超大文件夹快速加密码大法

    夹快速加密码大法告诉大家。我们首先到http://www.cksis.com/folderprotect/这个网址下载一文件夹保护3000的软件,这个软件的主要功能就是给文件
    发表于 12-03 17:18

    如何使用文件加密软件给文件加密

    加密文件,只有通过密码来访问!给文件加密的方法还是比较多的,你可以在百度上面搜索到很多,今天我就以一
    发表于 04-23 14:12

    CAD中如何给DWG文件加密码

    加密码的方法很简单: 保存或另存文件时,在保存对话框的右上角有一工具下拉菜单,点开此菜单,菜单最下面是安全选项,点开安全选项,就可以给DWG图纸设置密码了。 自己要是给
    发表于 10-23 17:01 1064次阅读

    使用Jflash软件合并两个bin文件

    本文档内容介绍了使用Jflash软件合并两个bin文件图文步骤详解,供网友参考。
    发表于 11-22 17:17 2次下载

    如何理解区块链密码学中的非对称加密

    当前密码学中的加密解密方式主要能分成类,分别是对称加密和非对称加密。这两个
    发表于 11-29 11:36 2367次阅读

    pppoe的账号密码忘了怎么办_pppoe的两个阶段

    本文首先介绍了pppoe的账号密码忘了的解决方法,其次介绍了pppoe的两个阶段,最后介绍了pppoe的使用缺陷。
    发表于 04-27 11:08 1.8w次阅读

    如何将两个.hex文件合成一

    我们在写程序的时候,有时候有两个可执行文件的时候,都想使用里面的功能,但是源文件融合起来又感觉麻烦,这时候就要想到把两个.hex文件合成一
    发表于 12-03 13:36 9次下载
    如何将<b class='flag-5'>两个</b>.hex<b class='flag-5'>文件</b>合成一<b class='flag-5'>个</b>

    关于加密状态的zip压缩包

    但是该工具无法识别,就算文件扩展名改为.zip也不行,可能因为ARCHPR是很老的缘故了,不支持现在使用最新算法的加密包。
    的头像 发表于 09-21 11:05 2413次阅读

    Linux中如何比较两个文件的差异?

    Linux 中如何比较两个文件的差异?答案是使用 diff 命令。
    的头像 发表于 01-17 17:30 5356次阅读
    Linux中如何比较<b class='flag-5'>两个</b><b class='flag-5'>文件</b>的差异?

    如何使用两个LED和Arduino

    电子发烧友网站提供《如何使用两个LED和Arduino.zip》资料免费下载
    发表于 01-30 11:28 1次下载
    如何使用<b class='flag-5'>两个</b>LED和Arduino

    两个LED和两个按钮的使用

    电子发烧友网站提供《两个LED和两个按钮的使用.zip》资料免费下载
    发表于 01-30 16:04 1次下载
    <b class='flag-5'>两个</b>LED和<b class='flag-5'>两个</b>按钮的使用

    Linux中如何比较两个文件的差异?

    Linux 中如何比较两个文件的差异?答案是使用 diff 命令。
    的头像 发表于 01-30 16:04 1.2w次阅读
    Linux中如何比较<b class='flag-5'>两个</b><b class='flag-5'>文件</b>的差异?