有没有办法以加密方式存储数据,以便可以使用多个不同的密钥对数据进行解密?
即。如果我用key1加密数据,但我想能用密钥2,3和4解密。
这可能吗?
答案 0 :(得分:145)
GnuPG标准中进行多键加密。
以下命令将使用Alice的公钥和Bob的公钥加密doc.txt
。 Alice可以使用她的私钥解密。 Bob也可以使用他的私钥进行解密。
gpg --encrypt --recipient alice@example.com \
--recipient bob@example.com doc.txt
此功能在标题为“Encrypting and decrypting documents”
的用户指南部分中有详细说明答案 1 :(得分:49)
是可以为多个收件人加密。当您认为您可能希望能够阅读您发送给某人的内容并且您需要位于收件人列表中时,这似乎也是合乎逻辑的。
以下是如何通过gpg
命令行执行此操作(如David Segonds' answer中所述):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
您的GUI必须提供加密多人的方法
有关信息安全的问题,GPG File size with multiple recipients?, that explain the encryption mechanism:
GPG使用对称密钥对文件进行一次加密,然后放置标头 识别目标密钥对和加密版本 对称密钥。
[...]加密到多个收件人时,这个 标头多次放置,提供唯一加密版本 每个收件人使用相同的对称密钥。
答案 2 :(得分:26)
GnuPG和PGP客户端通常使用称为“会话密钥”的对称密钥对实际数据进行加密。然后使用每个“收件人密钥”(即您使用-r / - recipient指定的密钥)加密会话密钥。这有时被称为hybrid cipher。现在,我相信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 man page中的--show-session-key
参数,以便只能解密会话密钥,例如,允许第三方解密为您加密的文档,而无需转移到他们是你的私钥或明文数据。
答案 3 :(得分:4)
是的,这是可能的。谷歌“多方加密”开始。
AFAIK,虽然它没有放入并使用'em包。
- MarkusQ
P.S。有关如何完成的草图,请考虑这一点。加密消息包括:
持有密钥的收件人我只是用密钥解密他们的密码副本,然后解密有效负载。
然而,这只是一个证明它可以完成并且 suck 作为一个实际的实现。如果可能的话,您应该避免滚动自己的加密。如果你不明白为什么,你应该肯定避免滚动你自己的加密。
-----编辑------------
如果我错了,Gnu工具会这样做,请使用它们。但我似乎无法找到有关如何做到这一点的任何信息。
答案 4 :(得分:-15)
多个(两个以上)密钥RSA 可能这样 - 我不是数学家,所以这个算法不一定安全,我只是想用它来表达一个想法
米= P * Q * R; p,q,r是大素数
网络(M)=(P-1)的(Q-1)(R-1)
d ==(e1 * e2 * e3 * ... * ei)^( - 1)(mod fi(m)); e1 ... ei是任意数,d被计算为满足等式
y1 == x ^ e1(mod m)
y2 == y1 ^ e2(mod m)
y3 == y2 ^ e3(mod m)
...
x == yi ^ d(mod m)
此算法可用于提高洋葱路由器的速度。