好吧,这有点尴尬。我花了一个多星期的时间来试图解决这个问题,答案似乎在于子键-GnuPG手册和FAQ掩盖了这个主题。
在研究什么是子密钥以及为什么使用它们代替--gen-key时,我偶然发现了这个瑰宝:http ://wiki.debian.org/subkeys 。
Debian的Wiki解释了如何使用带有子密钥的主密钥来实现选项2 (请参阅OP),并进一步说明了将主密钥存储在备份介质(例如闪存驱动器)后如何从任何系统中删除该主密钥。然后可以将子密钥分配到每个设备上的我的密钥环中。
优点:
- 不主要依靠密码来保护主密钥, 
- 如果有任何系统受到威胁,则主密钥将不会立即可用(除非我愚蠢地将闪存驱动器插入电源,或将所述驱动器连接到受到破坏的系统上), 
- 这是由Debian开发团队实施的做法。 
- 使用GnuPG的子项功能。是的,这比在钥匙圈上有一堆松散的钥匙更有组织性,是吗? 
Debian Subkey Wiki的相关部分
- 备份现有的GnuPG文件($ HOME / .gnupg)。确保他们安全。如果在以下步骤中出现问题,则可能需要将其返回到已知的正确位置。(注意:umask 077将导致备份的限制性权限。) - 
- umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
 
- 创建一个新的子项进行签名。 - 
- 查找您的密钥ID: gpg --list-keys yourname
- gpg --edit-key YOURMASTERKEYID
- 在gpg>提示符下:addkey
- 这会要求您输入密码,然后输入。
- 选择“ RSA(仅签名)”密钥类型。
- 选择4096(或2048)位密钥大小是明智的。
- 选择一个到期日期(您可以比主密钥更频繁地旋转子密钥,或者将它们保留在主密钥的生命周期内,没有到期)。
- GnuPG将(最终)创建一个密钥,但是您可能必须等待它获得足够的熵才能这样做。
- 保存密钥: save
 
- 您可以重复此操作,并根据需要创建“ RSA(仅加密)”子密钥。 
- 现在复制- $HOME/.gnupg到您的USB驱动器。
 
- 棘手的部分到了。您需要删除私钥,不幸的是,GnuPG没有提供便捷的方法。我们需要导出子项,删除私钥,然后再导入子项。 - 
- 导出子项:gpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys(选择要导出的子项中,规定的子项的ID后跟每个带有惊叹号:gpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..])
- 删除您的主密钥: gpg --delete-secret-key YOURMASTERKEYID
- 导入子项回: gpg --import secret-subkeys
- 验证gpg -K显示的sec#不是sec私钥,而不仅仅是私钥。这意味着密钥并不真正存在。(另请参见的输出中是否存在伪OpenPGP数据包gpg --export-secret-key YOURMASTERKEYID | gpg --list-packets)。
- (可选)更改保护子项的密码:gpg --edit-key YOURMASTERKEYID passwd。(请注意,备份中的私钥材料(包括私钥)将受到旧密码的保护。)
 
您的计算机现在可以正常使用了。
需要使用主密钥时,请安装加密的USB驱动器,然后设置GNUPGHOME环境变量:
export GNUPGHOME=/media/something
gpg -K
或使用--home命令行参数:
gpg --home=/media/something -K
现在,后一个命令应使用sec和而不列出您的私钥sec#。
每台机器有多个子项,而所有机器只有一个子项
摘自Debian子密钥Wiki。最初在评论中指出。[改写]和强调我的。
一个人可能会想在每台计算机上拥有一个子密钥,这样您只需要交换该计算机上可能受到威胁的子密钥即可。如果在所有计算机上使用单个子密钥,则需要在所有计算机上交换[当或怀疑单个子密钥受到破坏时]。
但这仅适用于签名子项。如果您有多个加密子项,则称gpg仅对最新的加密子项进行加密,而不对所有已知且未撤销的加密子项进行加密。