当前位置:  开发笔记 > 编程语言 > 正文

使用多个不同的密钥加密?

如何解决《使用多个不同的密钥加密?》经验,为你挑选了3个好方法。

有没有办法以加密方式存储数据,以便可以使用多个不同的密钥对数据进行解密?

即如果我使用key1加密数据,但我希望能够使用密钥2,3和4进行解密.

这可能吗?



1> David Segond..:

GnuPG在标准中进行多密钥加密.

以下命令将doc.txt使用Alice的公钥和Bob的公钥进行加密.Alice可以使用她的私钥解密.Bob也可以使用他的私钥解密.

gpg --encrypt --recipient alice@example.com \
    --recipient bob@example.com doc.txt

此功能在标题为" 加密和解密文档 " 的用户指南部分中有详细说明



2> Édouard Lope..:

是的,这是可能的

是可以为多个收件人加密.当您认为您可能希望能够阅读您发送给某人的内容并且这样做时,需要进入收件人列表,这似乎是合乎逻辑的.

命令行

以下是如何通过gpg命令行执行此操作(如David Segonds的回答中所述):

gpg --encrypt \
  --recipient alice@example.com \
  --recipient bob@example.com \
clear-message.txt

GUI客户端

您的GUI必须为多人提供加密方式

机制

还有一个问题,信息安全,GPG文件大小与多个收件人?,解释加密机制:

GPG使用对称密钥对文件进行一次加密,然后放置标识目标密钥对的标头和对称密钥的加密版本.

[...]当加密到多个收件人时,此标头会多次放置,为每个收件人提供相同对称密钥唯一加密版本.


特别感谢最后两句:他们现在一切都清楚了!

3> 小智..:

GnuPG和PGP客户端通常使用称为"会话密钥"的对称密钥对实际数据进行加密.然后使用每个"收件人密钥"(即您使用-r/ - recipient指定的密钥)加密会话密钥.这有时被称为混合密码.现在,我相信GnuPG默认使用256位会话密钥和AES来将明文数据加密到该AES-256会话密钥,而您的收件人密钥是您的RSA/DSA/ECDSA /等.在这种情况下不对称的关键.

这样做的一个原因是像AES这样的对称加密算法通常比像RSA这样的非对称加密算法快得多.因此,GnuPG只需要使用RSA加密~256位(会话密钥),并且可以使用AES使用该会话密钥加密数据(尽可能大的数据!).英特尔机器甚至还有一个内置指令AES-NI,用于在硬件中执行算法的一些步骤,这使得GnuPG在加密/解密数据时更加轻松.

这样做的另一个原因是它允许将PGP加密的文档加密到多方,而不必使文档的大小加倍.请注意,当您为加密文档指定多个收件人时(例如gpg -ea -r Alice -r Bob -o ciphertext.asc),存储的加密文档(ciphertext.asc)不会像刚刚将其加密到Alice那样大2倍.

另请参阅gpg手册页中的--show-session-key参数,以便只能解密会话密钥,例如,允许第三方解密为您加密的文档,而无需将私钥或明文数据传输给他们.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有