GPG/PGP 和其他公钥加密允许使用他们的公钥向多个收件人进行加密。
是否可以只使用对称加密来实现同样的目的?换句话说,是否可以使用两个不同的密钥对称加密一个文件?
我之所以提出这个问题,是因为非对称加密会产生巨大的文件。如果我要向智能手机发送一条公钥加密的消息,那么它将太大。特别是如果它被加密给几个收件人。一个“你好”可能需要两页文本。另一方面,对称加密非常严格。
答案1
当然可以。只需使用随机密钥加密文件,然后使用两个不同的对称密钥加密该随机密钥即可。
答案2
当前版本的 PGP 和所有 GnuPG (GPG) 都实现了 OpenPGP 标准。下文中我将仅使用术语 OpenPGP。
OpenPGP 同时使用公钥和对称密钥加密:加密文档时,会生成一些随机对称密钥,并使用公钥进行加密。接收方将使用其私钥加密对称加密(分组密码)密钥。由于只有对称密钥使用公钥进行加密,因此开销很小(这是 David Schwartz 提出的,OpenPGP 已经实现了)。
当然,有两种情况,与加密数据相比,这种开销可能会很大:
- 数据量非常小;如果这是一个问题,您将必须选择一些带有预共享密钥(对称密钥)的加密方法
- 收件人很多;因为必须为每个收件人加密分组密码。如果这是一个问题,您将不得不在所有收件人之间共享秘密(私钥)。
您无法避免使用对称加密并将秘密交给每个收件人(或对私有 OpenPGP 密钥执行相同操作)。如果您希望每个人都拥有自己的秘密,则其他人将无法解密他版本的数据;因此您必须向每个人发送此数据的另一个版本。
答案3
我实际上也想解决同样的问题。gpg 的问题在于,你需要携带太多东西 - 密钥存储等。有时你只想创建一个密钥对,将公钥放在进行加密的机器上,然后使用它。
我编写了一个工具来做到这一点:https://github.com/galets/AsymmetricCrypt。您需要 mono 才能在 Linux 上运行它,但除此之外,它可以正常工作并且不需要您将加密密钥存储在单独的文件中。