我的问题是camel pgp实际上是如何工作的,如果我的演绎完全正确,我不是java程序员,所以请注意下面的一些文字可能没有意义。
它是否使用对称密钥加密有效负载,然后使用公钥加密对称密钥并将两者发送到目标(例如ftp服务器),然后解密对称密钥(会话密钥),然后用它解密有效负载?或者它是否使用pub键加密有效负载,那就是它?此外,每条消息都会生成任何密钥吗?换句话说,假设我们在一个目录中有20个文件,camel逐个处理它们,这是否意味着对称密钥将生成20次,或者它只生成一次然后重复使用?
我正在尝试找出加密消息的最佳解决方案,似乎仅使用对称密钥(AES)就足够了,因为我可以通过安全通道将其传输一次,就是这样,但是实现似乎是与PGP相比是痛苦的(我必须实现Java工具来生成,保存到文件并加载AES密钥,使用初始化向量,HMAC等),但另一方面,如果后者每次都创建一个不同的密钥在我的情况下效率低下。
答案 0 :(得分:1)
在OpenPGP中,您有两个选择,Apache Camel允许这两个选择:
混合密码术
使用公共/私有(非对称)加密对会话密钥(每次生成的新密钥)进行加密。然后,此会话密钥用于使用对称密码术加密实际信息。
这种方法结合了公共/私有和对称加密的优点:它支持OpenPGP的高级密钥管理功能,但不会因使用公钥/私钥加密技术加密大量数据而承受巨大成本。
每次生成新的随机会话密钥非常便宜,因为它们大多是随机数据块,并且不涉及公钥/私钥对的复杂计算。
使用GnuPG(可能还有所有其他实现),默认情况下在使用gpg --encrypt
时使用此方法。如果您指定了收件人的公钥,并且没有密码短语,那么您将使用此方法。
对称加密
OpenPGP还允许直接从密码短语生成会话密钥,密码短语直接用于对称加密。这会禁用OpenPGP的密钥管理功能。直接对称加密很少与OpenPGP一起使用,但有时可能很方便。
使用GnuPG,可以通过调用gpg --symmetric
来实现。如果您加密(并且不签名),但要求输入密码,您可能会使用对称加密。
在OpenPGP中,公钥/私钥加密永远不会用于直接加密输入 。