有没有办法以加密方式存储数据,以便可以使用多个不同的密钥对数据进行解密?
即如果我使用key1加密数据,但我希望能够使用密钥2,3和4进行解密.
这可能吗?
GnuPG在标准中进行多密钥加密.
以下命令将doc.txt
使用Alice的公钥和Bob的公钥进行加密.Alice可以使用她的私钥解密.Bob也可以使用他的私钥解密.
gpg --encrypt --recipient alice@example.com \ --recipient bob@example.com doc.txt
此功能在标题为" 加密和解密文档 " 的用户指南部分中有详细说明
是可以为多个收件人加密.当您认为您可能希望能够阅读您发送给某人的内容并且这样做时,您需要进入收件人列表,这似乎是合乎逻辑的.
以下是如何通过gpg
命令行执行此操作(如David Segonds的回答中所述):
gpg --encrypt \ --recipient alice@example.com \ --recipient bob@example.com \ clear-message.txt
您的GUI必须为多人提供加密方式
还有一个问题,信息安全,GPG文件大小与多个收件人?,解释加密机制:
GPG使用对称密钥对文件进行一次加密,然后放置标识目标密钥对的标头和对称密钥的加密版本.
[...]当加密到多个收件人时,此标头会多次放置,为每个收件人提供相同对称密钥的唯一加密版本.
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
参数,以便只能解密会话密钥,例如,允许第三方解密为您加密的文档,而无需将私钥或明文数据传输给他们.