如何解密在多个公钥 GPG 下加密的文件

信息安全 加密 密码学 gnupg
2021-09-06 14:11:47

根据https://www.gnupg.org/gph/en/manual/x110.html

要解密消息,请使用 --decrypt 选项。您需要 用于加密消息私钥与加密过程类似,输入要解密的文档,输出解密结果。

设想:

Bob 有一个文件,他想对文件保密。他只希望他的朋友 Alice、John 和 Paul 能够查看该文件。

他用他每个朋友的公钥加密单个文件。

他的意图是,每当 Alice 需要查看文件时,她不需要与其他人一起访问它。

攻击者找到加密文件。

我要问的是:

攻击者是否需要找出每个朋友的私钥才能解密它?还是攻击者只需要知道其中一个朋友的私钥?

3个回答

您的问题有两种可能的解释。我假设您的想法如下:

假设您的朋友有密钥对(sk_1,pk_1), (sk_2,pk_2), (sk_3,pk_3)e(pk, data)加密和(sk, data)解密并且p是您的纯文本。

第一次解释

你像这样加密:

c = e(pk_3,e(pk_2,e(pk_1, p)))

然后,是的,要解密c你需要做

p = d(sk_1,d(sk_2,d(sk_3,c)))

例如需要你所有朋友的钥匙。

请注意,排序至关重要,并且没有一个用户可以解密数据,也不能在丢失一个密钥时对其进行抢救。

此外,这将要求您的朋友依次与彼此和解密文件共享中间结果(因为希望没有人会泄露他的密钥)。如果不小心完成,尤其是最后一步可能会带来其他安全问题。

然而,有些系统需要一群人一起工作来解密,这些系统是为此目的量身定制的,而 GPG 不是。

第二种解释

另一种解释是:

您为每个朋友创建一个文件,例如

c1 = e(pk_1, p)
c2 = e(pk_2, p)
c3 = e(pk_3, p)

然后您的每个朋友都可以自己解密“他/她”的文件。

不,您只需要用于加密的密钥之一。在这种情况下会发生什么是文件将使用对称加密(例如 AES)进行加密,然后使用提供的每个公钥对用于此加密的密钥进行一次加密。这样,任何拥有其中一个私钥的人都可以解密对称密钥并使用它来解密文件。

@SmokeDispenser对于 GnuPG 提供的标准对称加密是正确的。但是,您也可以选择使用Shamir 的秘密共享方案其设计方式是,您可以指定必须存在多少“密钥”才能使解密成为可能。

您可以构造一个密文,以便 Alice、John 或 Paul 的任何一个密钥都可以解密它。或者任何一对。或者他们三个。