是否有可能加密数据,以便可以用多个不同的密钥进行解密?
例如:
我已经用key1加密了数据,但我希望能够使用keys 2、3和4进行解密。
这种情况是否可行?
是否有可能加密数据,以便可以用多个不同的密钥进行解密?
例如:
我已经用key1加密了数据,但我希望能够使用keys 2、3和4进行解密。
这种情况是否可行?
加密多个接收者是可能的。当你想读取你发送给某人的内容时,你需要在接收者列表中,这似乎很合理。
以下是通过gpg
命令行实现的方法(如David Segonds的答案中所述):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
您的图形用户界面必须提供一种为多个人加密的方式。
在信息安全上有一个问题,GPG文件与多个接收者的大小?,该问题解释了加密机制:
GPG使用对称密钥加密文件一次,然后放置一个标头,用于识别目标密钥对和对称密钥的加密版本。
[...] 当加密给多个接收者时,这个标头被多次放置,为每个接收者提供了同一对称密钥的唯一加密版本。
GnuPG和PGP客户端通常使用称为“会话密钥”的对称密钥加密实际数据。然后,会话密钥会被用每个“接收者密钥”(即您使用-r/--recipient指定的密钥)进行加密。这有时被称为混合密码。目前,我相信GnuPG默认使用256位的会话密钥和AES将明文数据加密到该AES-256会话密钥,而您的接收者密钥在这种情况下是您的RSA/DSA/ECDSA等非对称密钥。
采用这种方式的原因之一是对称加密算法(如AES)通常比非对称加密算法(如RSA)快得多。因此,GnuPG只需使用RSA加密约256位(会话密钥),并可以使用AES使用该会话密钥加密数据(大小随意!)。甚至Intel机器还具有内置指令AES-NI,可通过硬件执行算法的某些步骤,使GnuPG在加密/解密数据方面更加快速。
另一个采用这种方式的原因是它允许将PGP加密文档加密给多个人而不必使文档大小加倍。请注意,当您为加密文档指定多个接收者(例如,gpg -ea -r Alice -r Bob -o ciphertext.asc
)时,存储的加密文档(ciphertext.asc)并不比只加密给Alice的文档大两倍。
另请参见gpg手册页中的--show-session-key
参数,以便仅解密会话密钥,例如允许第三方解密已加密为您的文档,而无需将私钥或明文数据传输给他们。
多个(两个以上)密钥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)
这个算法可以用来提高洋葱路由器的速度。