据我了解,与 gpg 一起使用的密钥对通常具有多个关联密钥:一个用于签名,一个用于加密。使用 gpg 时如何管理这些多个密钥(推送到密钥服务器、检索其他人的密钥、加密或签名)?它会自动使用正确的密钥执行正确的操作吗,还是需要用户指定?如何识别密钥对中每个密钥的用途?
答案1
通常所说的“GPG 密钥”更像是证书。与 X.509 一样,证书包含的信息远不止密钥:一个“主”密钥对和多个“子密钥”密钥对,以及它们的使用标志和到期日期,以及多个“用户 ID”和“照片 ID”及其签名。
当您将“密钥对”上传到密钥服务器时,您将提交所有公共信息(密钥、子密钥、用户 ID、签名)作为单个证书。“主”密钥标识整个证书;其公钥哈希是您看到的“指纹”,密钥 ID 基于此。通常,主密钥具有“签名”和“认证”使用标志,分别用于签名数据和其他密钥。
默认情况下,至少会创建一个“加密”子密钥,用于加密数据。您可以拥有多个这样的子密钥 - 例如,具有不同的到期日期。我找不到任何好的来源,但似乎将选择最新有效的(在开始日期之后且未过期/撤销)子密钥进行加密。当解密数据,所有子密钥都将被尝试。
(您可能已经注意到,gpg -k
列出了两个都密钥和子密钥。当您需要强制使用特定密钥或子密钥时,您可以给出(子)密钥 ID 后跟感叹号,以绕过所有关于哪个子密钥最佳的计算。)keyid!
您可以选择添加标记为允许的子项以进行“身份验证”,然后可以在诸如 SSH(通过 gpg-agent,通过提取原始 RSA 密钥对)或 SSL(由 GnuTLS 实现,作为 X.509 的替代方案)等协议中使用。使用哪些子项取决于具体实现。
您可以使用以下方法查看 PGP 证书的完整结构: