是否可以加密数据,以便可以使用多个不同的密钥对其进行解密?
例子:
我已经使用密钥 1 加密了数据,但我希望能够使用密钥 2、3 和 4 进行解密。
这可能吗?
是否可以加密数据,以便可以使用多个不同的密钥对其进行解密?
例子:
我已经使用密钥 1 加密了数据,但我希望能够使用密钥 2、3 和 4 进行解密。
这可能吗?
是的,可以对多个收件人进行加密。同样,当您认为您可能希望能够阅读您发送给某人的内容并这样做时,您需要在收件人列表中,这似乎是合乎逻辑的。
以下是如何通过gpg
命令行执行此操作(如David Segonds 的回答中所述):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
您的 GUI 必须提供一种为多人加密的方法
有一个关于信息安全的问题,有多个收件人的 GPG 文件大小?,解释加密机制:
GPG 使用对称密钥对文件进行一次加密,然后放置一个标头标识目标密钥对和对称密钥的加密版本。
[...] 当加密给多个收件人时,此标头会被多次放置,为每个收件人提供相同对称密钥的唯一加密版本。
GnuPG and PGP clients in general usually encrypt the actual data with a symmetric key called a "session key". The session key is then encrypted with each "recipient key" (i.e. the ones you specify with -r/--recipient). This is sometimes referred to as a hybrid cipher. Right now, I believe GnuPG by default uses an 256 bit session keys and AES to encrypt the plaintext data to that AES-256 session key, and your recipient keys are your RSA/DSA/ECDSA/etc. assymetric key in this case.
One reason for doing it this way is that symmetric cryptographic algorithms like AES are generally a lot faster than asymmetric ones like RSA. GnuPG thus only has to encrypt ~256 bits (the session key) with RSA, and can use AES to encrypt the data (as large as you want it to be!) with that session key. Intel machines even have a built in instruction, AES-NI, to do some steps of the algorithm in hardware, which makes GnuPG extra snappy at encrypting/decrypting data.
Another reason for doing it this way is that it allows PGP-encrypted documents to be encrypted to multiple parties without having to double the size of the document. Notice that when you specify multiple recipients for an encrypted document (e.g. gpg -ea -r Alice -r Bob -o ciphertext.asc
), the encrypted document that gets stored (ciphertext.asc) is not 2x as large as if you had just encrypted it to Alice.
See also the --show-session-key
parameter in the gpg man page to be able to decrypt just the session key, for example to allow a third party to decrypt a document that is encrypted to you without having to transfer to them your private key or the plaintext data.
是的,这是可能的。谷歌“多方加密”一开始。
AFAIK,尽管没有将它们放入并使用它们的软件包。
——马库斯
PS 对于如何完成它的草图,请考虑这个。加密消息包括:
持有密钥 i 的接收者只需用他们的密钥解密他们的 pad 副本,然后解密有效载荷。
但是,这只是证明它可以完成并且作为实际实现会很糟糕。如果可能的话,您应该避免滚动自己的加密。如果你不明白为什么,你绝对应该避免滚动你自己的加密。
- - -编辑 - - - - - -
如果我错了,而 Gnu 工具可以做到这一点,请使用它们。但我似乎找不到任何关于如何做到这一点的信息。
多个(两个以上)密钥 RSA可能是这样的——好吧,我不是数学家,所以这个算法不一定安全,我只是想用它来提供一个想法。
m=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)
例如,该算法可用于提高洋葱路由器的速度。