Camel PGP加密和对称密钥

时间:2015-08-18 13:51:43

标签: java encryption apache-camel pgp openpgp

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  • 混合密码术

    使用公共/私有(非对称)加密对会话密钥(每次生成的新密钥)进行加密。然后,此会话密钥用于使用对称密码术加密实际信息。

    这种方法结合了公共/私有和对称加密的优点:它支持OpenPGP的高级密钥管理功能,但不会因使用公钥/私钥加密技术加密大量数据而承受巨大成本。

    每次生成新的随机会话密钥非常便宜,因为它们大多是随机数据块,并且不涉及公钥/私钥对的复杂计算。

    使用GnuPG(可能还有所有其他实现),默认情况下在使用gpg --encrypt时使用此方法。如果您指定了收件人的公钥,并且没有密码短语,那么您将使用此方法。

  • 对称加密

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

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

在OpenPGP中,公钥/私钥加密永远不会用于直接加密输入