![如何为 gpg 子项设置不同的密码?](https://linux22.com/image/1441360/%E5%A6%82%E4%BD%95%E4%B8%BA%20gpg%20%E5%AD%90%E9%A1%B9%E8%AE%BE%E7%BD%AE%E4%B8%8D%E5%90%8C%E7%9A%84%E5%AF%86%E7%A0%81%EF%BC%9F.png)
我需要自动化部署过程,该工具将自动对发布工件进行签名。我的密钥环有一个主密钥(我仅将其用于创建子密钥)和两个子密钥。一个子密钥用于签名,另一个用于加密。
目前所有密钥都有一个密码短语。我不想在配置文件中指定此密码短语,因为这也会给主密钥带来风险。
因此,我想通过以下方式为子项设置不同的密码:
$ gpg --edit-key [subkey-id]
gpg> passwd
gpg> save
但这也改变了其他密钥的密码。
如何为各个密钥设置单独的密码?
答案1
使用 GnuPG 无法为子密钥设置单独的密码。但有一个解决方法,在这种情况下甚至看起来像是一个好的做法:
导出所选的子项(在示例中,子项的 ID 为
0xDEADBEEF
)。不要忘记感叹号,它确保 GnuPG 实际与子项本身一起工作,而不是与它所属的主键一起工作!gpg --export-secret-subkeys 0xDEADBEEF! >subkeys.pgp
子密钥将附加公有主密钥和私有主密钥“密钥存根”,但不附加私有主密钥本身。
将子密钥导入另一个 GnuPG 主目录。示例假设您位于项目根目录中,并且其中有一个
etc
用于存放类似密钥环的文件夹。gpg --homedir ./etc/gnupg --import subkeys.pgp
更改分离子项的密码。
gpg --homedir ./etc/gnupg --edit-key 0xDEADBEEF
不要使用“普通”密钥环,而应始终参考上面提到的单独的 GnuPG 目录。
或者,您可以考虑创建一个项目密钥,并用您自己的密钥进行签名。这样做的好处是其他贡献者/用户也可以对该密钥进行签名(从而证明这确实是用于项目的密钥),而且如果其他人接管维护工作,移交项目可能会更容易。
答案2
一个非常过时的(2013)gnupg.org 邮件存档解释道为子项设置单独密码的尴尬解决方法。
这意味着约束不在键集的数据结构(即主子键分组)内,而仅在构建和修改键集的软件接口内。
引用自参考文献:
你好,
是否可以有一个主密钥和多个子密钥,并且子密钥具有与主密钥不同的(例如更短)密码?
您可能正在寻找的是离线主密钥(请参阅 --export-secret- subkeys)。但答案是:是的。gpg-agent 不关心密钥的连接。它甚至会多次询问您相同的密码(针对同一密钥的不同组件)。
但 GnuPG 不直接支持这一点。
1)导出密钥(--export-secret-keys 不带--armor)
2)更改密码
3)再次导出(当然是导出到不同的文件)
4) 对两个文件(在不同的目录中)使用 gpgsplit。结果如下:
000001-005.secret_key 000002-013.user_id 000003-002.sig 000004-007.secret_subkey 000005-002.sig
5) 现在将两组的组件混合在一起:mkdir combined mv a/000001* a/000002* a/000003* combined/ mv b/000004* b/000005* combined/ cd combined/ cat * > different_passphrases.gpg
6)从 secring 中删除密钥:--delete-secret-key
7)导入新的:gpg --import different_passphrases.gpg
豪克湖
我个人并未证实这一行动——只是报告我所读到的内容。
GnuPG 文档中缺乏有关这一重要主题的规范和讨论,令人失望。
答案3
即使这个问题已经很老了,我也想分享一个我也遇到过的针对这个问题的解决方案。
问题:我想要一个单独的密码为了首要的关键,我仅将其用于验证/创建 [C] 其他子密钥,以及附加的子键[海]。
一开始,所有密钥(即主密钥和子密钥)只有一个密码。
我所做的是通过执行以下操作将主密钥备份到不同的位置:
$ gpg --list-secret-keys --with-keygrip
~/.gnupg/private-keys-v1.d/<your-keygrip>.key
它向我展示了主密钥的keygrip(下面的密钥文件名)。
然后,我将该密钥文件(以及相应的撤销证书)移至不同的备份位置,并最终从中删除了密钥~/.gnupg/private-keys-v1.d/<your-keygrip>.key
。
(撤销证书正在~/.gnupg/openpgp-revocs.d/<your-keygrip>.rev
)
发布后,gpg --list-secret-keys
我可以sec#
在主键上看到,这表明该键不再存在:
sec# rsa4096/0x123123123123123 2018-02-01 [C] [expires: 2019-02-01]
Key fingerprint = 123 123 123 123 123 123 123 123 123 123
现在我刚刚编辑了该键:
gpg --edit-key <your-key-id>
gpg> passwd
gpg> save
这将要求输入每个子键的密码,然后允许您更改它。
最后,我为我的子密钥设置了一个(更简单的)密码,而我的主密钥则存储在异地,并由初始(更强的)密码保护。
编辑:请注意,这仅适用于 GnuPG 2.1 及更新版本!使用旧版 GnuPG,您必须导出所有密钥(主密钥 + 子密钥),删除它们,然后重新导入子密钥。只有从 2.1 版开始,才能单独删除主密钥!