我可以正确地使受密码保护的 7z 档案安全吗?

信息安全 密码 文件加密 压缩
2021-08-27 07:20:39

在阅读了thisthis的问题和答案后,我从最后一个中留下了一个总体印象,即 zip 被认为是不安全且不安全的数据共享方式。

我仍然认为受密码保护的压缩文件可以变得安全。所以让我用这个直截了当

具体场景

  • 您正在7zLinux 机器上使用 9 或更高版本的命令。不是zip不是rar
  • .zip如果我错了,请纠正我,但在密码保护时,7z 默认使用 AES-256 ,无论存档格式是.7z
  • 您想archive.exe从目录中创建一个自解压文件,dir1并希望对所有文件名内容和名称以及所有标题进行加密,因此您运行

    7z a -mhe=on -psecretpassword -sfx archive.exe dir1

  • 使用的密码非常强,假设熵足够
  • 您与文件的预期收件人安全地共享了密码。只有你们两个知道密码
  • 您还可以安全地共享存档的SHA1哈希
  • 您现在让此文件可供此人下载

我说

  • 即使在没有任何程序的情况下,只要知道密码,该人也可以在 Windows 机器中提取此存档
  • dir1如果您不知道密码,则无法读取加密目录中的文件名
  • 档案不能被文件替换篡改,因为文件名和标题也被加密了
  • 如果该人SHA1在下载后检查过,任何回火都会被注意到
  • 就文件名和内容的保密性而言,这与使用任何文件(zip、rar、tar.gz)压缩目录并openssl aes-256-cbc在其上应用一样安全
  • 自解压不会增加漏洞,如果确实如此,只需删除-sfx或更改它即可-t7z修复它,但在这种情况下,该人需要 7-zip 来解压它

正确与否?

2个回答

问题:如果存档的加密散列和密钥通过一个被认为是安全的单独通道?

是的。

不过,其中一些假设在现实世界中可能并不成立。

检查第一个假设,这个论坛上大约一年前有一个相关问题:https ://stackoverflow.com/questions/12470378/how-key-derivation-and-key-verification-functions-are-implemented-of- a-7-zip-弧

根据那里的讨论,7z 使用强大的基于密码的密钥派生功能,以及 CBC 模式下的 AES(这很好,因为我们假设存档的 SHA1 哈希在尝试解密之前得到验证;这将停止填充 oracle攻击)。

然而,前面的讨论也强调了 7z 中缺乏文档和难以阅读的代码。我不知道在 7z 上进行了任何实质性的密码分析。所以在使用它时,你最终会信任它的开发者,让所有的加密实现都正确。

  • 档案不能被文件替换篡改,因为文件名和标题也被加密了
  • 自提取不会增加漏洞

这是不正确的:如果预期的用例是通过运行自解压存档,任何能够篡改 .exe 文件的攻击者也可以修改自解压代码,以任何他认为合适的方式更改解压文件。(当然,他还可以做更多的事情,比如记录密码或安装后门)

因此,如果您处于甚至可以远程篡改的情况下,自解压档案是一个非常糟糕的主意。