GPG:如何签署具有不同密码的多个签名?

时间:2015-04-30 15:32:57

标签: encryption batch-processing gnupg pgp

我有一份定期运行的工作,并签署/加密文件,如下所示:

$ 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 /到/ 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

     

从文件file中读取密码。只会从文件file中读取第一行。只有在提供一个密码短语时才能使用此功能。

如何判断每个密钥的密码是什么?

2 个答案:

答案 0 :(得分:3)

您有不同的选择。

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

答案 1 :(得分:1)

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