GnuPG 是否对大文件使用对称 + 公钥加密?

信息安全 加密 pgp RSA gnupg 打开pgp
2021-09-01 09:46:30

最近,我需要加密几个大文件。我可以选择使用 OpenSSL 命令行实用程序,但我更喜欢使用 GnuPG。

  1. GnuPG 如何通过该--encrypt选项在后台工作?它是先生成对称密钥,然后用公钥加密吗?还是只是非对称加密,对性能很重?

  2. 如果它首先生成对称密钥,然后使用公钥加密(非对称),它使用什么算法来对称加密数据?

我询问的加密方法(对称+非对称加密)有时被称为“混合加密”或使用“会话密钥”。

我在任何地方都没有找到这样的信息,而且挖掘代码很痛苦。

2个回答

OpenPGP 始终应用混合加密(无论文件/消息有多小),因此使用对称加密和会话密钥对消息进行加密,会话密钥再次使用一个或多个公钥和非对称加密进行加密(每个收件人一次)。事实上,如果您还添加了密码短语(您可以同时加密组合密码短语和公钥,则可以再次对会话密钥使用对称加密,这样密码短语或匹配的私钥都可以解密消息)。

OpenPGP 消息的(非常简化的)结构或多或少

在 OpenPGP 中加密文件和消息之间没有区别,可能除了没有附加文件名的消息。使用的包和算法完全相同。

讨论使用的算法有点复杂,取决于 GnuPG 的版本、计算机加密的偏好设置以及接收者密钥所有者设置的偏好。确定使用什么的简单方法是 run gpg --list-packets,它提供了完整的数据包结构(阅读 RFC 4880 有助于理解输出,并且您将了解很多有关 OpenPGP 在幕后工作的知识),通常添加一两个-v选项就足够了并提供更易于阅读和理解的文本输出。

这就是“混合加密”。

文件格式称为“OpenPGP”,并在RFC 4880中进行了描述。它是一种带有称为“数据包”的子元素的结构。批量数据加密使用对称加密,而对称密钥本身将使用公钥加密会话密钥包中的接收方非对称公钥(RSA、ElGamal...)进行加密

该方案允许对多个接收者进行有效加密:使用对称密钥对数据进行一次加密,然后使用每个接收者的公钥对该密钥进行加密。