两个私钥的非对称加密——可能吗?

10

我想知道是否存在一种不对称加密算法,可以使用两个不同的私钥进行解密,使得加密后的消息可以被任何一个私钥解密?

5个回答

11

非对称密钥通常不用于加密 信息(速度慢、大小限制等),只用于加密小缓冲区,例如对于信息的对称密钥。

当你使用非对称密钥加密信息时,实际上是在加密一个加密信息的对称密钥

只需用两个不同的非对称密钥加密相同的对称密钥,就可以得到两个不同的密码块,它们都包含相同的信息对称密钥,因此你可以使用任意一个进行解密。


3
您可以使用对称加密和秘密共享方案,"将密钥分成两半"。
更多关于秘密共享的内容:http://en.wikipedia.org/wiki/Secret_sharing 我认为的步骤如下:
1. 使用(伪)随机生成的密钥加密数据。 2. 使用Shamir's secret sharing分发密钥到两个份额中,其中一个份额就足以获取密钥。 最终结果是需要一个或多个“密钥”才能获取数据。

欢迎来到 Stack Overflow。您似乎在描述使用 N 个密钥加密消息的系统,需要使用其中 M 个密钥(其中 1 < M <= N)才能读取该消息。在这种情况下,我认为问题是关于 M = 1 和 N 的情况。不过,提供了一个很好的维基百科链接。 - Jonathan Leffler

2

据我所知,目前没有这样的算法,但有一种常见的解决方案。加密文本与用于加密文本本身的对称密钥的一组密码一起传输。每个密钥的密码都是使用一个接收者的公钥对原始密钥进行加密的结果。因此,所有知道其私钥的接收者都可以解密用于加密数据的密钥,然后解密消息本身。


有这样一个算法。我今天早上不得不实现它。Alice和Bob都有(临时的)RSA密钥对用于加密,并交换公钥。由于RSA密钥不仅对于一对,而且对于不同的密钥对进行交换,因此加密消息:msg * my_priv * their_pub需要另一方应用自己的my_priv * their_pub来恢复msg。它对于类似PGP的方案非常有用,其中只有检查授权的程序编写授予只有用户可以解包的授权,并且程序解包现有授权需要用户请求进行加密。 - Rob

1
通常使用混合加密方案。即,消息使用对称密钥密码系统进行加密,然后将对称密钥使用每个预期接收者的公钥进行加密。

0
如果你:
- 以len(N) - 1的位数均匀随机选择e, - 确保gcd(e, phi(N)) = 1(要么持续生成e直到满足条件,要么使用安全素数pq并将e的最低有效位设置为1), - 然后推导出相应的d
你将得到两个随机且保密的RSA指数,即双私钥sk_1 (e, N)sk_2 = (d, N)。也就是说,你需要将它们都保持为保密。
现在你可以将它们互换使用,用于概率性(OAEP)加密和解密,以及概率性(PSS)签名创建和验证。
  1. sk_1 可以加密消息 msk_2 可以解密
  2. sk_2 可以加密消息 msk_1 可以解密
  3. sk_1 可以对消息 m 进行签名,sk_2 可以验证
  4. sk_2 可以对消息 m 进行签名,sk_1 可以验证

我喜欢称这种好的特性为双功能非对称密钥,直到我找到实际的学术术语为止 - 如果已经有的话。到目前为止,我认为RSA可能是唯一能够生成具有双功能的密钥对的非对称加密系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接