GPG:如何使用不同密码的多个签名进行签名?

GPG: How to sign with multiple signatures with different passphrases?

我有一个定期运行的作业和 signs/encrypts 一个像这样的文件:

$ gpg --homedir /path/to/.gnupg -r key1@mydomain.com -r  key2@mydomain.com --local-user sig1@mydomain.com --batch --passphrase-file /path/to/gpg-password --sign -ea myfile

该命令为两个收件人加密文件:key1@mydomain.com 和 key2@mydomain.com。它使用 sig1@mydomain.com 对文件进行签名。由于没有人为交互,它以批处理模式运行——这是一个自动化过程。它从 /path/to/gpg-password.

获取签名的密码

我现在想做的是同时用两个签名对文件进行签名。像这样:

$ gpg --homedir /path/to/.gnupg -r key1@mydomain.com -r  key2@mydomain.com --local-user sig1@mydomain.com --local-user sig2@mydomain.com --batch --passphrase-file /path/to/gpg-password --sign -ea myfile

gpg: skipped "sig2@mydomain.com": bad passphrase

它在交互模式下工作正常(例如,没有 --batch),我只需要通过命令行提供两个密码。但是,在批处理模式下,它会失败,因为它会尝试从文件中获取签名。签名仅对其中一个签名密钥有效。

来自手册页:

--passphrase-file file

Read the passphrase from file file. Only the first line will be read from file file. This can only be used if only one passphrase is supplied.

如何告诉它每个密钥的密码是什么?

对于与我情况相同的其他人,我最终通过编辑其中一个签名密钥使其具有与另一个相同的密码(存储在 gpg-password 文件中的密码)来解决 gpg 的明显缺陷).在这种情况下,这不会危及安全性,因为密码无论如何都存储在文本文件中——真正的安全性是运行此命令的用户的密码以及密钥保密的事实)。您可以通过执行 gpg --edit-key <key_id>,然后 passwd 来更改密钥的密码。不要忘记save之后。

你有不同的选择。

  • 完全删除密码,因为它们无论如何都存储在某个地方。
  • 使用相同的密码(如您已经发现的那样)。
  • 使用gpg-agent并预设密码。我不确定这是否仅适用于 GnuPG 2(通常安装为 gpg2,可能会从 gnupg2 软件包安装)。预设密码就像 一样简单。您将必须 运行 分别为每个密钥执行此命令,并确保将密码缓存给定时间(至少是添加所有密码的处理时间,然后对要签名的文件进行签名).
  • 为了完整性,但不切实际:为每个密钥单独签署文件,然后拆开 OpenPGP 数据包并重新组合它们,一个接一个地添加所有签名。使用多个密钥签名只会创建多个签名包。