为什么 GPG 文件加密比其他 AES 实现慢得多?

信息安全 加密 AES pgp 文件加密 gnupg
2021-09-08 14:35:26

如果我错了,请纠正我:加密文件时,GPG 创建一次性 AES 加密密钥并使用 RSA加密该密钥。据说这是为了在处理大量数据时利用 AES 的卓越性能。

如果这是真的,那么为什么比例gpg --encrypt如 AES-256 加密慢这么多p7zip

1个回答

我们试试吧...

首先,我创建一个 500 MBytes 的文件,其中包含随机字节:

dd if=/dev/urandom of=/tmp/foo bs=1000000 count=500

然后我使用 GnuPG 对其进行加密,测量该进程所花费的时间(“ keyID”是我正在使用的公钥的 UID):

time gpg -r "keyID" --cipher-algo AES256 --compress-algo none -o /tmp/bar --encrypt /tmp/foo

我的机器上的总时间(Intel i7 at 2.7 GHz,64 位模式,GnuPG 2.0.22):

3.77s user 0.55s system 99% cpu 4.328 total

所以每秒 115 MB 的加密带宽:还不错!现在让我们再试一次,但这次不要停用压缩(即,让我们删除“ --compress-algo none”选项):

20.99s user 0.79s system 98% cpu 22.038 total

这慢了 5 倍。所以你有了它:它不是“慢”的加密,而是压缩(尽管对于许多用途来说,超过 20 MB/s 仍然可以相当快)。


115 MB/s 与 AES 的“便携式”实现是一致的。使用专用 AES 操作码(在我的 i7 上可用)的代码会更快,例如 300 到 400 MB/s(尽管 AES-NI 操作码具有非常高的吞吐量,但它们也具有不可忽略的延迟,这意味着最好的性能需要并行处理,即CTR 模式;但是OpenPGP 标准要求CFB,它是顺序的)。

无论如何,由于一个好的机械硬盘的最高速度约为 120 MB/s,而一个非常好的 Internet 访问(光纤)将低于 10 MB/s,可以说 115 MB/s 的原始加密速度就足够了。