Ccrypt 与 7zip 加密

信息安全 加密 密码 密码学 攻击 文件加密
2021-09-02 11:17:17

我在 Debian 上,我有一个文件夹,里面有数千个文件,大小约为 14GB。从这个文件夹中,我创建了两个加密档案:一个是受密码保护的 .7z 档案,另一个是使用 ccrypt (.tar.cpt) 加密的 TAR 档案。

(从现在开始,我假设.7z/7zip 存档意味着受密码保护的 .7z/7zip 存档

我注意到打开 7z 存档并插入密码,让我在大约 1-2 秒内看到实际内容,可能更少(打开这个文件和没有加密的相同 .7z 文件几乎没有人类可察觉的时间差异)。但是,为了能够查看 TAR 归档内容,对 .tar.cpt 文件的 ccdecrypt 命令要长得多,大约需要 5-6 分钟。之后,我可以打开 TAR 存档并在大约 1-2 秒内看到实际内容。这给我留下了一些问题:

1. 7zip 压缩包的内容是否加密?

解密两个大小相同的文件的时间差异(.7z 只小了大约 100MB,因为文件已经是压缩格式)使我认为虽然 ccrypt 加密了 TAR 存档的所有内容,但 7zip 只加密了包含文件的存档,就像它是一个文件夹(模糊不清),很难突破它,但是存档的实际内容保持未加密状态。因此,使用 .7z 存档只需几秒钟即可查看内容(解密包含存档/检查密码的时间),而查看 .tar 文件意味着所有 14GB 内容都已被 ccdecrypted。我做了正确的假设吗?如果没有,有人可以解释一下这两种加密方法的不同之处和工作原理吗?这个特定的 7zip 存档在插入密码之前隐藏文件名,如果这在某种程度上相关的话。

2. 这是否意味着 7zip 存档的安全性较低?

如果第一点的假设是正确的,这是否意味着受密码保护的 7zip 存档不如“完全加密”的 .tar.cpt 存档安全?我知道使用 7zip 会留下很多假设提取/解密档案的痕迹/临时文件,但我的问题是关于加密档案本身的实际安全性。此外,我只会在我的台式电脑上加密/解密存档,而文件将存储在服务器上,所以即使有人会控制服务器(当然不是我的电脑),他也不会鉴于存档从未在服务器上解压缩,能够找到解压缩存档的任何痕迹,对吗?

3. 有真正的UNIX 替代品吗?

是否有一个典型的 UNIX 世界软件可以以 7zip 方式加密 TAR 存档,这样我就可以保护不那么安全关键的东西(如果 .tar.cpt 实际上比 .7z 更安全就像我假设的那样)以一种可以在 2 秒而不是 5 分钟内查看文件的方式?我不反对 7zip,它是一个很棒的实用程序,但我想知道纯 UNIX 世界是否有类似的东西可以提供(我想肯定是的)。此外,即使在最低压缩设置下,创建未压缩的 TAR 存档所需的时间也比创建 7zip 压缩文件要少得多,因此能够将“7zip 加密方法”应用于 .tar 文件将非常方便。
其他 UNIX 加密软件,如 gpg、mcrypt 和旧的 unsecure crypt 都使用相同的 ccrypt 类型的加密(我的意思是它们加密所有内容,不考虑加密方法),而 gzip、bzip2 等,如果我不是错了,鉴于 UNIX 传统“做一件事,做好”,根本无法加密任何内容


最初,可以在几秒钟内从加密的 7zip 存档中提取单个文件的事实,或多或少类似于未加密的文件,这是我认为内容实际上并未加密的另一个原因,因为我不知道即使是单个文件也可以从 .7z 解密(并且没有足够的时间让我认为整个档案都被解密给了我那个单个文件)。
此外,我记录了同一个 7zip 存档的加密版本和未加密版本的提取时间,差异根本不明显。我认为这是内容未加密的另一个证据,但我又错了一次,因为我没有考虑现代 CPU 具有适用于 AES 等流行算法的加密插件(如已接受的答案中所建议的那样)。

7zip 存档显然只能通过命令行设置为“无压缩”,或者至少不能通过 Ark 的 GUI 设置(将滑块设置为“最小”仍会压缩存档)。如果没有压缩(-mx=0 开关,来自相同的答案),.7z 的大小和制作时间或多或少与 .tar 对应的相同。

即使不考虑 .7z 标头比 .tar.cpt 显示文件列表的时间优势,ccrypt 仅使用 1 个核心进行加密/解密,这使得过程更加缓慢。


我编辑了问题以使其更具可读性。有了接受的答案适当的报价,我希望它仍然是完全可以理解的。

2个回答

(我从未使用过 ccrypt。我对此的回答仅限于他们在页面中声称的内容)

  1. 7z 实际上加密存档头和实际文件内容,但使用相同的密码使用 7z 创建加密存档时,您还可以选择加密标头(通过命令行标志-mhe=on,默认为off)。只要您提供密码,无论您是否加密文件头,实际文件内容总是被加密。
    7z(以及 zip 和 rar)使用文件头只是为了让您快速浏览存储在存档中的文件/目录,包括加密和未加密的存档。由于历史原因,tar 没有任何此类文件列表
    所以你的假设是不正确的。
  2. 我不能说ccrypt,但7z在加密方面足够安全(只要你选择一个好的密码)。正如您所提到的,7z 使用 AES-256 进行加密,并且 AES-256 是安全的。7z 是开源的,没有安全漏洞(恶意或诚实)可以篡改加密的 7z 的安全性。
    请注意,您正在使用密码来加密 7z 存档。这意味着如果有人得到了你的 7z 文件,他可以一一尝试所有可能的密码,直到找到你的密码。(这就是为什么你应该总是选择一个好的密码) 7z 使用密钥拉伸(100,000 次迭代 IIRC)来减慢这样的过程,但如果您的密码太短或太常见(例如“Passw0rd”或“Letmein”),那个恶意的人可以快速点击您的密码。已经有使用此技巧的加密档案的真正密码破解者。

因此,即使有人会控制服务器(当然不是我的 PC),他也无法找到任何解压缩存档的痕迹

只要您不这样做7z x archive.7z -pMyPassword或“在此处提取”,该文件就应该对其他人不可见。这是 Dropbox 等自动云同步工具的常见缺陷:您提取到同步文件夹的任何文件都将上传到他们的服务器。如果您双击存档文件列表中的文件,该文件将被提取到某个临时路径(/tmp或您~的某个位置),并且同步工具不会将其上传到任何地方。

  1. 是的。它被称为 7z :)
    说真的,.tar存档只不过是一个大文件。您始终可以使用7z. 这将生成一个.tar.7z文件,尽管您可以随意重命名它。这意味着将多个文件分组到一个.tar存档中,然后以您喜欢的任何方式使用 7z 压缩/加密。这在 *nix 管理中特别有用,因为它tar保留了所有者/权限信息,但7z没有。但是在您的情况下,如果您不关心这些,那么简单7z就足够了。
    作为旁注,7z如果你不想,你不需要压缩。您可以将压缩级别设置为 0 (-mx=0在命令行中)。这样,7z 只需打包您的文件并对其进行加密,而无需进行耗时的压缩/解压缩。

但是,即使在 14GB .7z 存档中打开单个文件也没有 .tar 存档那么快

这取决于用于压缩 7z 和 tar 文件的算法。压缩文件有多种压缩算法,每种算法都可以配置不同的压缩级别。通常,输出文件越小,所需的时间就越长。由于您提到 7z 可为您节省 100 MB,因此需要在时间上进行权衡。

此外,当您打开 .tar 的文件列表时,您已经解密并解压了所有文件。这只是获取所需字节的问题。但对于 .7z,仅显示存档标题。实际文件尚未解密/解压缩。如果您比较从双击文件列表到获取文件所用的时间,tar 几乎总是赢家。

事实上,考虑到增加的解密时间,加密版本应该需要更长的时间才能被提取出来

这可能适用于旧计算机(>10 年前)。现代 CPU (1) 通常非常快,并且 (2) 内置了常见的加密算法,如 AES。如果您不使用 SSD,磁盘 IO 更多是一个限制因素。

7zip 怎么能在 2 分半钟内解密并提取整个档案,而 ccrypt 需要更多的时间才能解密?

在不知道文件列表以及您正在解密/解压缩的文件的情况下,我无法确定。但是,由于 tar必须使用固态压缩,因此您需要解密和解压缩整个存档才能获得单个文件。而对于 7z,固态压缩是可选的(但在命令行 7z 中默认启用;GUI 取决于您使用的前端)。每个文件都单独压缩和加密。要获取单个文件,只需根据 7z 标头获取加密字节,然后仅对文件的这些字节执行魔术。如果您总是想提取整个档案,tar 是一种很好的档案格式。如果您有时只需要一个文件,请使用 7z。

有没有一种方法可以将 UNIX 基本工具结合起来像 7zip 存档一样强大,即结合存档器、压缩器和加密器

在安全性方面,我不建议重新发明轮子/自己动手7zip 是免费软件,甚至专有软件也支持 7z 格式。但如果你真的必须这样做,请尝试对单个文件进行 gzip 压缩,将它们 tar(不压缩)并 ccrypt tar。不过,您需要一些重要的脚本。

假设 1) 不正确。在 7Z、RAR、ACE 或许多较旧的存档器上使用密码允许您访问文件“树”。如果您想实际访问某些内容,您仍然必须提取(解密)每个文件。这是自 MS-DOS 时代以来有效的。

因此,您实际上可以访问文件的索引,仅此而已。

另请注意,解密密钥已针对每个文件进行测试。存档程序仅自动执行此操作并对所有文件应用相同的密钥,但如果您愿意,您实际上可以使用不同的密码加密每个文件。

-Edit- 你实际上可以在这里学习 7Z 代码