在 GPG 中导入私有子密钥的子集

信息安全 gnupg
2021-09-09 14:45:05

GPG 遇到问题,将一组子密钥与另一组隔离。

简而言之,我生成了一个主密钥,然后是三个子密钥:

  1. 签约
  2. 加密
  3. 授权

我似乎无法将签名和加密私钥与授权密钥隔离开来。我都试过了:

  1. 仅导出/导入特定的私有子密钥
  2. 删除一个不需要的私有子密钥

当我导入一个子密钥时,gpg 不允许我导入其他子密钥,说我已经导入了一个属于主密钥的私钥。当我删除一个不需要的私有子键时,所有子键都被删除。似乎没有解决方案有效。

是什么赋予了?

2个回答

您可能正在处理两个问题:

  • 2.1 之前的 GnuPG 不能合并私钥,并且
  • 例如,选择要导出的显式子键需要!在键 ID 后加上(给定0xdeadbeef的是您的子键 ID)

    gpg --export-secret-subkeys 0xdeadbeef!
    

您的问题的可能解决方案是:

  • 使用 GnuPG 2.1(然后您可以在导入期间合并导出的各个子项)。
  • 一次全部导出所需的子密钥(假设您有一个已经包含所有子密钥的密钥环,如果这些子密钥分布在多个密钥环中则不起作用,因为它需要合并密钥),例如

    gpg --export-secret-subkeys 0xdeadbeef! 0x12345678!
    
  • 使用该gpgsplit命令将 OpenPGP 消息拆分为单个数据包,然后使用cat. 这是一项相当困难的任务,需要对 OpenPGP 标准有更深入的了解,我会选择前两种解决方案中的任何一种。

gpgsplit 工具当然是一种解决方案,但除了专家之外,其他人都非常困惑。我的解决方案是首先将私有主密钥导出到文件中,然后导出子密钥,并删除所有密钥,然后仅导入秘密子密钥。

所以:

# Export out the master key    
gpg --export-secret-keys user@host > master_secret.asc
# Export out the subkeys
gpg --export-secret-subkeys > subkeys_secret.asc
# Delete both sets of secret keys (You can also delete everything associated with that uid)
gpg --delete-secret-keys user@host
# Import in ONLY the subkeys
gpg --import subkeys_secret.asc

只是一个评论:如果这个过程让我这个相当技术性的人感到困惑,想象一下对于一个完全非技术性的人来说这将是多么困难。这需要简化。此外,一旦您将密钥分开,就没有简单而明显的方法将主密钥和子密钥合并到同一个密钥环中。

这不是一个功能,它是一个错误,应该修复。