是否可以向 GPG 中已加密的文件添加收件人?

是否可以向 GPG 中已加密的文件添加收件人?

假设我使用 GPG 加密了一个(可能很大的)文件;例如

gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt

是否可以在不先解密文件,然后再进行另一次加密的情况下添加另一个收件人?

答案1

简短回答:不

首先,请注意,如果您不是收件人之一,这完全是不可能的。您甚至没有能力解密文件,更不用说添加收件人了。即使您在两秒前加密了它。

假设您是收件人,从技术上讲这是可行的。该文件实际上是用会话密钥加密的,而会话密钥又用您的公钥加密,因此您可以理论上解密会话密钥并将其重新加密为另一个人的密钥,然后将所有内容打包到一个文件中,就像您最初将文档加密给两个人一样。

然而,gpg 没有这个功能. 使用 gpg 可以得到最接近的结果

  1. 使用该--show-session-key选项获取会话密钥(这似乎也可以解密文件,但在这种情况下忽略了重点)
  2. 将该会话密钥加密为其他人的公钥(实际上,这会创建一个新的会话密钥,并使用该会话密钥加密原始会话密钥)
  3. 发送两个文件。
  4. 接收者可以解密会话密钥并用来--override-session-key解密原始消息。

答案2

1) 这种情况就是为什么加密文件给自己(以及预期的收件人)总是一个好主意。RedGrittyBrick 在上面正确地描述了 GPG 和 PGP 的工作原理,这与 nathang 上面的回答相吻合。

2) 但是,如果您有原始文件,最好直接为新收件人创建一个新的加密文件。

假设您不想按照 nathang 的建议采用会话密钥路由,如果您首先将文件加密为自己(如上文#1 所示),则请对其进行解密,然后按照上面的步骤#2 进行操作。

如果您既没有原件,也没有对您自己进行加密,那么您就无法取回数据,并且除非第一个收件人向您发回副本,否则您无法将其加密给任何其他人。

答案3

是否可以在不先解密文件,然后再进行另一次加密的情况下添加另一个收件人?

如果不解密就不可能根本但它似乎应该无需解密即可到文件

gpg -d this_file.gpg | gpg -e -r "Some Name" -r "Another Name" -o this_file.gpg

但这似乎会导致文件损坏(至少有时),因为gpg同时读取和写入同一个文件:

相反,您可以执行以下操作(在脚本中)以避免需要管理解密文件:

gpg -d -o this_file.txt this_file.gpg

gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg \
    --batch --yes \
    this_file.txt

shred -u this_file.txt

shred,使用-u选项,可以安全地覆盖指定文件的数据,然后删除该文件。其他平台也有类似的程序,例如srmMac OS X。

或者你可以像这样编写脚本(由戴夫·汤普森)甚至避免将解密数据存储在文件中:

gpg -d this_file.gpg \
| gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg.new \
    --batch --yes

mv -f this_file.gpg.new this_file.gpg

答案4

正如之前的回复中提到的,并且也很好地描述了这一点GPG工具 邮政

“已加密的文件无法添加收件人。如果这样做,将带来严重的安全问题。”

话虽如此,另一种选择可能是vim 插件,一个非常方便的插件,用于查看和编辑GPG加密文件:vim-gnupg

一旦安装vim,可以通过:GPGEditRecipients命令为加密文件添加收件人。

相关内容