zip加密密码需要多长时间才能破解需要10年?

信息安全 加密 密码 文件加密 压缩
2021-08-17 13:02:53

zip 3.0.0在 macOS High Sierra 和 Ubuntu 上使用。这是我在 macOS 上的 zip 版本:

$ zip --version | head
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
Currently maintained by E. Gordon.  Please send bug reports to
the authors using the web page at www.info-zip.org; see README for details.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip,
as of above date; see http://www.info-zip.org/ for other sites.

Compiled with gcc 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.37.14) for Unix (Mac OS X) on Feb 22 2019.

这是Ubuntu上的一个:

$ zip --version | head
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
Currently maintained by E. Gordon.  Please send bug reports to
the authors using the web page at www.info-zip.org; see README for details.

Latest sources and executables are at ftp://ftp.info-zip.org/pub/infozip,
as of above date; see http://www.info-zip.org/ for other sites.

Compiled with gcc 6.3.0 20170221 for Unix (Linux ELF).

我已在https://security.stackexchange.com/a/186132/108239阅读此答案,建议不要使用 zip 进行加密。

但是,在我所处的环境中,我需要将文件安全地发送给非技术用户。这是我的限制:

  • 我可以向我的收件人发送任意长的密码。
  • 我可以向他们发送 zip 文件(加密或未加密)。
  • 不能要求我的收件人安装额外的软件。
  • 我只关心文件内容的机密性。
  • 关心文件名或文件元数据的机密性。
  • 关心完整性或不可否认性。

鉴于这些限制,到目前为止,我一直以这种方式发送文件:

zip -e secret.zip secret.txt

我使用 80 个字符长的随机生成的字母数字 ( A-Za-z0-9) 密码来加密机密文件。zip实用程序不再接受密码。尝试这样做会导致(line too long--try again)错误。

这使用以下加密方法:

$ 7z l -slt secret.zip | grep Method
Method = ZipCrypto Deflate

我的问题:

  • 一个 80 字符长的随机生成的字母数字密码是否足以弥补zip实用程序的弱密码技术?
  • 密码应该具有的最小熵是多少才能使其足够安全以与zip实用程序一起使用?要定义“足够安全”,比如说,以当前的计算能力破解 zip 文件应该需要 10 年左右的时间(为了简单起见,暂时忽略计算能力的增加)。
3个回答

如果您使用 ZipCrypto 进行加密,那么任何密码长度都是不安全的。

您使用的是 ZipCrypto 密码,而不是更安全的 AES。ZipCrypto 非常弱,因为它在内部基于称为CRC的非加密结构。它很容易受到已知明文攻击,实际上不需要知道你的 Zip 文件包含什么,只需要知道很小的一部分。这通常可以通过使用文件头来满足,该文件头通常以绝大多数常用压缩文件而闻名。

90 年代发现的攻击在A Known Plaintext Attack on the PKZIP Stream Cipher中有详细说明。使用 13 字节的已知明文,可以恢复完整的密钥,复杂度为 2 38,并不多。事实上,在个人电脑上只花了几个小时,那是 90 年代的硬件!随着时间的推移,攻击只会变得更好,针对 ZipCrypto 的攻击也不例外:An Improvement Known Plaintext Attack on PKZIP Encryption Algorithm


如果您切换到支持 AES 的较新的 Zip 加密格式,那么您可以安全地加密文件并相信它们将无限期地保密。假设您需要至少 128 位的安全性并从一组 62 个符号(字母数字密码)中选择密码,您将希望使用至少 22 个字符,因为 log 2 (62 22 ) ≈ 131 位,显然, 131 ≥ 128。任何类型的 Zip 加密都不提供完整性,但您指定只需要机密性。

一个 80 字符长的随机生成的字母数字密码是否足以弥补 zip 实用程序的弱密码技术?

首先,您应该至少使用 AES 128 进行加密,考虑到您可能想要考虑 256 的 10 年(我将在十年内忽略量子可能性)。

我不知道你的 zip 包,抱歉,如果它太旧了,它不能支持它。您可能需要检查较新的软件包,因为较旧的应用程序可能包含使您在某些时候容易被利用的漏洞。

选择一个长的伪随机密钥是非常重要的。尽可能长时间和随机地进行。安全存储您的密钥在 10 年内同样重要。

密码应该具有的最小熵是多少才能使其足够安全以与 zip 实用程序一起使用?例如,要定义“足够安全”,zip 文件应该保持 10 年左右未破解。

很难说 10 年可以在加密算法中发现各种额外的计算能力和漏洞。再继续下去,并使用值得信赖的伪随机生成器。

这是两个问题合而为一。一个容易,一个很难。让我们从简单的开始:

我的加密密码应该多长时间才能保持安全 10 年?

众所周知,一个随机的 128 位密钥具有足够的熵,不会被破解,即使它受到尽可能快的(但不易受攻击的)哈希算法的保护。我提出散列的原因是因为有很多关于密码散列破解的研究、好的软件和很多基准。解密 zip 文件基本上是在执行解密操作并检查您是否可以解密您知道值应该是什么的字节。(请参阅zip 格式规范的第 6.1 节Python 实现。)有关在 GPU 上破解 zip 文件的唯一速度指标是100 亿的市场宣传每秒尝试次数。这是在一些小的灰色文本中提到的,没有参考或有关其设置的任何更多信息。这是一个需要考虑的数据点,但不是一个非常可靠的数据点。散列与此类似,散列算法被设计得非常快,并且您还可以应用一些操作并检查结果。

例如,MD5 破解者可以在中等昂贵的硬件上达到每秒数千亿次的尝试。让我们以此作为我们的基础,而不是 100 亿营销声明,因为我们不知道那是哪一年或他们使用了什么设置。

即使我们假设摩尔定律成立(它不成立)并且可以解释为“计算机速度每 18 个月翻一番”(它不能),那么在 10 年内,我们将有 6.7 倍。为方便起见,假设我们一直以这种速度运行,所以我们以几千亿次 2 6.7运行,因此每秒进行几万亿次尝试(假设是 50 万亿次)。10年有3600*24*365.25*10 = 3.16亿秒。那是 50e12 * 316e6 = 16 六分之一 (16e21) 猜测......所以我们将检查大约 73 位熵,或 0.000000000000005% 的可能键(因为 log(16e21)/log(2) 是 ~73 和 16e21/2 128 * 100 是上述百分比)。

如果你想冒险,你可以选择一个包含大约 80 位熵的密码,攻击者破解它的机会很小(但不可忽略)。更现实地说,您可能希望有一些误差范围,以防加密算法被削弱。我建议坚持使用 128 位熵作为一个好主意。这也符合欧盟研究项目的结论:“对于一般的长期保护(30 年),建议使用 128 位密钥(7 级)。” (来源:维基百科上的我

如果我们使用 az, AZ, 0-9,那么您密码的每个位置可以有 26+26+10 = 62 个可能的值。要计算 128 位需要多少个字符,我们可以使用:log(10^ 128*log(2) )/log(62) = 21.5 个字符(因为 log(62^21.5)/log(2) = 128) .

答案:22 个随机生成的字符,由字符 A 到 Z、a 到 z 和 0 到 9组成。示例:M89bqltyuPQ0g34Uv2CR6b。不需要您建议的 80 个字符的密码!

现在困难的问题:

zip 加密可以安全使用 10 年吗?

zip 格式支持不同类型的加密。我在假设 zip 软件现在默认使用 AES,而不是古老而破碎的基于 CRC 的加密货币的假设下编写了这一部分,森林指出它实际上默认使用它。

因此,如果您将软件配置为使用 AES:

这是一个假设,但现在它似乎已经经受了相当长的一段时间和审查。尽管有一些已知的攻击,但在未来十年内似乎不太可能被大大削弱。量子计算机会在一定程度上改变一些事情,但没有人能说它的时间表是什么。未来十年,一台体面的量子计算机,特别是那些没有数十亿欧元投资的人可以使用,听起来非常乐观。

如果您担心量子计算机,请使用仅使用对称加密算法和至少256 位的散列算法的软件(因此您的密钥应该包含那么多熵,并且软件必须使用它),例如 AES-256 和 SHA- 256. 根据您使用的实现, zip 可能符合条件:根据规范, 格式版本 5.1 增加了对 AES-256 的支持。原始加密是对称加密,不会像非对称加密那样破坏性大,但它使用的密钥太短。虽然量子计算机会削弱对称加密和散列算法,但格罗弗的算法告诉我们,它基本上是比特数减半的顺序,所以今天包含 256 位熵的密码,对于量子计算机来说,将与包含 128 位熵的密码。

(请注意,您还应该应用良好的密码管理:不要在其他地方重复使用密码或人们通常对密码做错的其他事情。但是如何管理密码超出了此答案的范围。)

回答:如果您使用 zip 和 AES,那么可能是的,但不可能肯定地说。