用于加密和签名的 GPG 主密钥和子密钥以及默认密钥

信息安全 pgp gnupg 打开pgp
2021-08-22 13:23:02

对于与主键相关的子键的概念,我(和其他许多人一样)有点困惑。gpg默认情况下(至少它似乎在我的系统上 --- 使用RSA),在gpg --gen-key创建 amasterkey和 a时subkey具有可用于签名和认证masterkey标志。SC它还创建一个带有 flag 的子密钥E,用于加密。以下陈述是否正确?

  • 如果我理解 themasterkeysubkeyare 密钥对的整个概念,那就是一对私钥-公钥。
  • 一个仅用于加密的事实是因为某些算法有这样的要求(需要单独的密钥进行加密和签名)
  • subkeyE标志:它的公共部分可以用于加密信息,而其私人部分解密用的公共部分加密的信息。
  • masterkeySC标志:其私处用于签名/验证其公共部分被用来验证签名的有效性。

更令人困惑的部分是当我按照建议进一步创建时subkeys,一个用于签名,一个用于加密。我们只称原始加密subkey ESK0和新加密subkey ESK1,新签名subkey SSK1masterkey MK.

创建后ESK1SSK1我应该总共有 4 个公钥/私钥对,对吗?然后,按照指南,我将其删除MK到离线媒体并将其从我的计算机中删除,因此我现在在我的计算机中:

  • 公共/私人对ESK0(原始加密)
  • 公共/私人对ESK1(新加密)
  • 公共/私人对SSK1(新签名)
  • 公钥用于 MK

然后我使用更改密码gpg --edit-key $id passwd根据一些指南,它应该将密码更改为子键,但我不太确定,我认为这只是将密码更改为绑定到MK它的整个结构,只是MK离线存储的结构仍然具有旧密码. 哪个是对的?

现在,如果我签署一些东西,哪个是签名密钥?我相信它必须是SSK1因为MK不再可用。正确的?

然后我使用 . 将一些公钥上传到密钥服务器gpg --send-key $id我上传了哪些公钥?

如果有人将使用来自密钥服务器的信息向我发送一些加密信息,那么哪个公钥将用于加密 -ESK0ESK1我担心ESK0从那时起,拥有子密钥的全部意义就完全没有意义了,因为我仍然会使用解密ESK0

另外,为什么指南建议删除MKESK0仍然应该保留在系统上?那么这样做的目的是ESK1什么?

感谢您的任何帮助。

1个回答

如果您已经拥有 SC 和 E 密钥,并且想要将 C(“主”)密钥删除到离线存储,那么您只需要一个新的 S 密钥(在您的示例中为 SSK1)。您不需要创建新的加密子密钥——您现有的子密钥就可以用于此目的。

然后我使用更改密码gpg --edit-key $id passwd根据一些指南,它应该将密码更改为子密钥,但我不太确定,我认为这只是将密码更改为绑定到 MK 的整个结构,只是离线存储私有 MK 的结构仍然具有旧密码。哪个是对的?

您将更改任何本地存储的子密钥上的密码,因此这是一件非常有效的事情。离线主密钥的密码不会改变。密码是 GnuPG 用来在将私钥存储到磁盘之前对称加密您的私钥(以确保它们不会被恶意软件或安全性差的备份轻易窃取)。

现在,如果我签署一些东西,哪个是签名密钥?我相信它必须是 SSK1,因为 MK 不再可用。正确的?

默认情况下,GnuPG 将使用最近创建的 S 密钥,因此SSK1将始终在您的情况下使用 - 这就是您想要的。

然后我使用 gpg --send-key $id 将一些公钥上传到密钥服务器。我上传了哪些公钥?

您上传所有公钥数据,包括任何新的子密钥或身份。

如果有人将使用来自密钥服务器的信息向我发送一些加密信息,那么将使用哪个公钥进行加密 - ESK0 或 ESK1?我担心它会是 ESK0,因为那时拥有子密钥的全部意义将完全没有意义,因为我仍然会使用 ESK0 进行解密。

拥有多个有效的加密子密钥是这种情况发生的秘诀,因此我强烈建议您不要创建新的加密子密钥。正如我所说,如果您已经有了新的加密子密钥,则不需要新的加密子密钥。

另外,为什么指南建议删除 MK,但 ESK0 仍然应该保留在系统上?那么ESK1的目的是什么?

“万能钥匙”是您的“C”钥匙(证明)。它是用于签署其他人的密钥以及您自己的子密钥和身份的密钥。如果您的任何 E 或 S 子密钥丢失,或者您担心它们会受到恶意软件的攻击,只要您信任 C 密钥的完整性,您就可以简单地撤销它们并创建新的子密钥。这就是为什么建议您仔细保护您的 C 密钥(“主密钥”)并离线存储的原因。

最后,您的目标是具有以下结构:

  • 现有的 [SC] 密钥——离线存储,从本地磁盘中删除
  • 现有的 [E] 键——保存在磁盘上
  • 新的 [S] 键——保存在磁盘上

最后一点——默认情况下,GnuPG 将您的主密钥创建为 [SC],但并非必须如此。您可以明确告诉 GnuPG 创建一个独立的 [C] 键。