我已经按照“创建完美的 GPG 密钥对”中的一般说明设置了带有子密钥的 OpenPGP密钥。一般要点是您创建一个“主密钥对”,它不存储在您的笔记本电脑上,而是存储在一个安全的气隙设备上。就我而言,它是一个加密的 USB 密钥。我还有一个纸质密钥版本,以及打印的主密钥撤销密钥,以防数字版本丢失或损坏。我的笔记本电脑只有子密钥,没有主签名密钥。结果,当您运行gpg -K(显示密钥)时,您会得到:
/Users/myusername/.gnupg/secring.gpg
-------------------------------
sec# 4096R/0x123412341234FFFF 2014-04-18
uid My Name <me@example.com>
ssb 4096R/0x123412341234AAAA 2014-04-18
ssb 4096R/0x123412341234BBBB 2014-09-24
ssb 4096R/0x123412341234CCCC 2014-09-30
sec#表示主签名密钥未存储在计算机上。如果我加载我的加密 USB 密钥然后运行gpg gpg --home=/path/to/secure/gpg/keys/.gnupg -K,它会显示:
/path/to/secure/gpg/keys/.gnupg/secring.gpg
-------------------------------
sec 4096R/0x123412341234FFFF 2014-04-18
uid My Name <me@example.com>
ssb 4096R/0x123412341234AAAA 2014-04-18
ssb 4096R/0x123412341234BBBB 2014-09-24
ssb 4096R/0x123412341234CCCC 2014-09-30
如您所见,它显示sec,而不是sec#。
在此设置下,如果您的笔记本电脑遭到入侵,您可以安全地撤销子密钥,而不会失去与信任网络的任何连接 - 因为您通过主签名密钥连接到信任网络。
假设我的笔记本电脑受到了损害,这种模型应该可以防止这种情况发生。我认为最好的做法是:
- 去获取我的安全 USB 密钥,并从安全密钥环加载 GnuPG
- 使用主密钥对,我会撤销我的子密钥 [因为它们现在已被泄露]
- 现在,我将发布用于签名和加密的新子密钥,并将所有这些更改推送到公钥服务器。
我的问题是:这是正确的做法吗?当你这样做时,这里到底发生了什么?我认为它会生成一个新的私钥/公钥对,并使旧的无效。这样,如果对手拥有我的旧私钥 - 他们理论上可以访问加密到我的旧公钥的旧通信。但是他们不能像我一样签署任何东西,因为那个私钥将被撤销。此外,当有人通过密钥服务器查找我时,旧公钥和新公钥都将可见,但旧公钥将显示为已撤销,新公钥将具有更新的日期,因此 GnuPG 用户试图发送给我加密消息或加密文件将自动将其加密为新的(未撤销的)公钥。并且对手将无法阅读此消息。
我完全正确吗?有人可以澄清一下吗?