如何为gpg子项设置不同的密码?


16

我需要使部署过程自动化,该工具将自动对发布工件进行签名。我的钥匙圈有一个主键(仅用于创建子键)和两个子键。一个子密钥用于签名,另一个子密钥用于加密。

当前,所有键都只有一个密码短语。我不想在配置文件中指定此密码,否则也会冒主键的风险。

所以我认为我可以通过以下方式为子项设置不同的密码:

$ gpg --edit-key [subkey-id]
gpg> passwd
gpg> save

但这也改变了其他键的密码短语。

如何为单个键设置单独的密码?

Answers:


14

使用GnuPG无法为子密钥设置单个密码短语。但是有一种解决方法,在这种情况下,它甚至看起来像是一个好习惯的想法:

  1. 导出选择的子项(在示例中,子项具有ID 0xDEADBEEF)。不要忘记感叹号,它可以确保GnuPG实际上与子项本身一起工作,而不与它所属的主键一起工作!

    gpg --export-secret-subkeys 0xDEADBEEF! >subkeys.pgp
    

    子密钥将具有公共主密钥和私有主“密钥存根”,但没有私有主密钥本身。

  2. 将该子项导入另一个GnuPG主目录。该示例希望您位于项目的根目录中,并且在其中有一个etc存放诸如此密钥环之类的文件夹。

    gpg --homedir ./etc/gnupg --import subkeys.pgp
    
  3. 更改分隔的子项的密码。

    gpg --homedir ./etc/gnupg --edit-key 0xDEADBEEF
    
  4. 始终使用如上所述的单独的GnuPG目录,而不要使用“常规”密钥环。

或者,您可能要考虑创建一个使用自己的密钥签名的项目密钥。这可能具有以下优点:其他贡献者/用户也可以签名密钥(从而证明这确实是该项目所使用的密钥),并且在其他人接管维护的情况下移交项目可能会更容易。


1
这不适用于GnuPG 2.2.4。它没有说“需要密钥执行此操作”。很伤心:'(
steinybot

所以我需要使用无密码的gpg密钥进行自动回购签名吗?
SuperSandro2000

不可以,您还可以使用来预先缓存密码gpg-agent。看一看gpg-preset-passphrase
詹斯·埃拉特

5

gnupg.org邮件归档文件过时(2013),解释了为子密钥单独设置密码的尴尬解决方法
这意味着约束不在密钥集的数据结构(即主子密钥分组)之内,而仅在用于构造和修改密钥集的软件界面中。

从参考引用:

你好

是否可能有一个主密钥和几个子密钥,而这些子密钥的密码短语与主密钥不同(例如较短)?

您可能正在寻找的是脱机主键(请参阅--export-secret-子键)。但是答案是:是的。gpg-agent并不关心密钥的连接。它甚至会多次询问您相同的密码短语(对于同一密钥的不同组件)。

但是GnuPG不直接支持此功能。

1)导出密钥(不带--armor的--export-secret-keys)

2)更改密码

3)再次导出(当然,导出到其他文件)

4)在两个文件(位于不同目录)中使用gpgsplit。结果看起来像这样:

000001-005.secret_key 000002-013.user_id 000003-002.sig 000004-007.secret_subkey 000005-002.sig

5)现在,您将两组的成分混合在一起:mkdir组合mv a / 000001 * a / 000002 * a / 000003 *组合/ mv b / 000004 * b / 000005 *组合/ cd组合/ cat *> different_passphrases.gpg

6)删除密钥:--delete-secret-key

7)导入新的:gpg --import different_passphrases.gpg

Hauke Laging

我没有亲自确认此操作-只是报告我已阅读的内容。

令人失望的是,GnuPG文档中缺少有关此重要主题的规范和讨论。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.