日期:2023-04-04 作者:H4y0 介绍:使用 AES-256
生成ZIP
密码时,如果密码太长,则会使用PBKDF2
算法对密码进行处理。
0x00 前言
在某社交平台刷到了Positive Technologies
的一位网络安全研究员分享的小实验,加密的ZIP
文件同时存在两个正确的密码,并且都可以完成文件的提取。
0x01 复现
1.1 问题描述
我们先来看一下这位安全研究员是怎样描述这个问题的。
大体就是加密时使用一个长度足够大的密码:Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You
解密时除了这个长密码之外还可以使用密码:pkH8a0AqNbHcdw8GrmSp
1.2 本地复现
-
使用下列命令创建一个加密的 ZIP
文件。
7z a x.zip /etc/passwd -mem=AES256 -p
-
使用和描述一样的长密码作为密码。
Nev1r-G0nna-G2ve-Y8u-Up-N5v1r-G1nna-Let-Y4u-D1wn-N8v4r-G5nna-D0sert-You
-
我们来使用描述中的短密码
pkH8a0AqNbHcdw8GrmSp
来提取文件。不出意外的成功提取。
-
当然,使用原本的长密码也一样可以成功提取
ZIP
文件。
0x02 分析
造成同时存在两个密码可以提取ZIP
文件的就是AES-256
模式。由于ZIP
使用PBKDF2
,如果密码长度大于64
字节,ZIP
格式会使用PBKDF2
算法对输入的密码进行hash
处理,这个新的hash
会成为ZIP
的实际密码。
在复现中,使用短密码pkH8a0AqNbHcdw8GrmSp
实际上是长密码SHA1-hash
对应的ASCII
码表示。
长密码的SHA1-checksum = 706b4838613041714e62486364773847726d5370
,此校验和在转换为ASCII
时产生pkH8a0AqNbHcdw8GrmSp
。
不过在对ZIP
文件进行加密解密的过程中,只有密码长度大于64
位时,才会对该密码进行hash
处理,解密时如果实用长度大于64
的长密码,则会对密码进行hash
处理后与加密时产生的hash
值进行比较,如果使用短密码,则会将此密码直接与存储的密码进行比较,此时存储的密码为加密时产生的hash
值。短密码可以通过hash
值进行16
进制转字符串获得。
也就是说只有在知道长密码的情况下才能获得短密码,这一特性对于ZIP
文件的s安全性并无不良影响。具体流程可总结如下图。
0x03 总结
这位安全研究员说的ZIP
存在后门只是子虚乌有。实际上是PBKDF2
使用基于hash
的身份验证代码(HMAC)
,产生了HMAC
碰撞,当密码长度足够长时便会形成密码对,造成了所谓的两个密码。
免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。
宸极实验室隶属山东九州信泰信息科技股份有限公司,致力于网络安全对抗技术研究,是山东省发改委认定的“网络安全对抗关键技术山东省工程实验室”。团队成员专注于 Web 安全、移动安全、红蓝对抗等领域,善于利用黑客视角发现和解决网络安全问题。
团队自成立以来,圆满完成了多次国家级、省部级重要网络安全保障和攻防演习活动,并积极参加各类网络安全竞赛,屡获殊荣。
对信息安全感兴趣的小伙伴欢迎加入宸极实验室,关注公众号,回复『招聘』,获取联系方式。
原文始发于微信公众号(宸极实验室):『杂项』如何让 ZIP 文件存在两个正确解压密码?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论