使用多个不同的密钥进行encryption?

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

也就是说,如果我已经用key1encryption了数据,但我希望能够用密钥2,3和4解密。

这可能吗?

GnuPG在标准中执行多键encryption。

以下命令将使用Alice的公钥和Bob的公钥来encryptiondoc.txt 。 Alice可以使用她的私钥解密。 鲍勃也可以使用他的私钥解密。

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

该function在“ encryption和解密文档 ”的用户指南部分有详细介绍。

是的,这是可能的

是多个收件人的encryption是可能的。 当你认为你可能想要读取你发送给某人的内容,并且这样做, 需要在收件人列表中,这似乎是合乎逻辑的。

命令行

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

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

GUI客户端

您的graphics用户界面必须提供一种方法来encryption几个人

机制

信息安全有多个收件人的GPG文件大小有问题? 这就解释了encryption机制 :

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

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

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

这样做的一个原因是像AES这样的对称密码algorithm通常比不对称密码algorithm如RSA快得多。 因此,GnuPG只需要用RSAencryption〜256位(会话密钥),并且可以使用AES来encryption与会话密钥相同的数据(尽可能大)。 英特尔的机器甚至还有一个内置的指令AES-NI来完成硬件algorithm的一些步骤,这使得GnuPG在encryption/解密数据时更加灵活。

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

另请参阅gpg手册页中的--show-session-key参数,以便能够仅解密会话密钥,例如,允许第三方解密已encryption的文档,而不必将其私密转移给他们密钥或明文数据。

是的,这是可能的。 谷歌“多方encryption”的一个开始。

AFAIK,尽pipe如此,还是没有放弃使用em包。

– MarkusQ

PS要了解如何完成,请考虑这一点。 encryption的信息包括:

  • 有效载荷,一次性encryption
  • 一次性密钥,用key1encryption
  • 一次性密钥,用key2encryption
  • 一次性密钥,用keyNencryption

持有密钥的收件人只是用他们的密钥解密他们的密钥副本,然后解密有效负载。

但是,这只是一个certificate,它可以做,并将吸收为一个实际的实施。 如果可能的话,你应该避免自己encryption。 如果你不明白为什么,你应该避免滚动自己的encryption。

—–编辑————

如果我错了,GNU工具就是这样做的,那就用它们吧。 但我似乎无法find任何有关如何去做的信息。

多个(超过两个)密钥RSA 可能是这样的 – 好吧,我不是一个math家,所以这个algorithm不一定是安全的,我只是想给它一个想法。

米= P * Q * R; p,q,r是大素数

fi(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)

这个algorithm可以用来提高洋葱路由器的速度。