骆驼 PGP 加密和对称密钥

Camel PGP crypto and symmetric keys

我的问题是 camel pgp 实际上是如何工作的,如果我的推论完全正确,我不是 java 程序员,所以请注意以下某些文字可能没有意义。

它是否使用对称密钥加密负载,然后使用 public 密钥加密对称密钥并将两者发送到目的地(例如 ftp 服务器),然后目的地解密对称密钥(会话密钥)然后用它解密有效负载?或者它是否使用公钥加密有效负载,仅此而已?此外,每条消息都会生成任何密钥吗?换句话说,假设我们在一个目录中有 20 个文件,camel 一个一个地处理它们,这是否意味着对称密钥将生成 20 次或者只生成一次然后重复使用?

我正在尝试找出加密消息的最佳解决方案,似乎仅使用对称密钥 (AES) 就足够了,因为我可以通过安全通道传输一次,仅此而已,但是实现出现了与 PGP 相比很痛苦(我必须实现一个 Java 工具来生成、保存到文件和加载 AES 密钥、使用初始化向量、HMAC 等),但另一方面,如果后者创建了一个每次使用不同的密钥在我的情况下效率低下。

在 OpenPGP 中,您有两种选择,Apache Camel 允许两种选择:

  • 混合加密

    使用 public/private(非对称)加密技术对会话密钥(每次生成一个新密钥)进行加密。然后使用此会话密钥使用对称密码术对实际信息进行加密。

    这种方法结合了 public/private 和对称加密的优点:它启用了 OpenPGP 的高级密钥管理功能,但不会受到使用 public/private 加密大量数据的巨大成本的影响密钥加密。

    每次生成新的随机会话密钥的成本非常低,因为它们大多是随机数据块,不涉及 public/private 密钥对的复杂计算。

    使用 GnuPG(可能还有所有其他实现),在使用 gpg --encrypt 时默认使用此方法。如果您指定收件人的 public 密钥,但没有密码,您将使用此方法。

  • 对称加密

    OpenPGP 还允许直接从密码生成会话密钥,直接用于对称加密。这会禁用 OpenPGP 的密钥管理功能。直接对称加密很少与 OpenPGP 一起使用,但有时可能会很方便。

    使用 GnuPG,这是通过调用 gpg --symmetric 实现的。如果您加密(但不签名),但被要求输入密码,您可能会使用对称加密。

在 OpenPGP 中,public/private 密钥加密从不直接用于加密输入