“撤销”密钥实际上是做什么的?

信息安全 加密 证书吊销
2021-09-01 02:37:59

我目前正在使用gpggpgdir实际上)加密一些个人信息。我将我的私钥副本以数据矩阵的形式打印在一张纸上,以免丢失我的私钥的数字副本。

但是,在阅读有关加密最佳实践的信息时,我经常遇到“撤销”我的密钥的概念。gpg中,我可以使用 生成撤销密钥gpg --gen-revoke KEY,以后可以使用它来“撤销”我的密钥。

但这实际上意味着什么?它有什么用处?我在网上找到了大量关于如何撤销我的密钥和生成撤销密钥的信息,但没有关于当我“撤销”我的密钥时实际发生的情况。

如果我是加密数据的唯一预期用户,此功能是否有用?

2个回答

将撤销密钥视为添加到密钥文件的注释。此评论(如果存在)将告诉您的密钥的其他用户(例如向您发送加密 gpg 电子邮件的人)该密钥已被撤销并且他们不应该使用它!

仅当您在密钥服务器上发送密钥时,撤销密钥才有用,以便让其他人知道它已被撤销。

Gnupg 是开源的(是的!),因此可以查看发生了什么。当您为密钥创建撤销证书时,即通过“gpg --gen-revoke name”

它在内部通过以下功能/关键步骤

  1. main()gpg.c(gpg 命令行工具)中被调用,然后
  2. 解析参数然后gen_revoce( const char *uname)revoce.c中调用,
  3. 然后在里面检索 uname 的密钥和公钥
  4. make_keysig_packet然后它像这样调用sign.c
        rc = make_keysig_packet(&sig, pk, NULL, NULL, sk, 0x20, 0,
                                  opt.force_v4_certs?4:0, 0, 0,
                                  revocation_reason_build_cb,原因);
    
    使用密钥对(publicpk和 secret sk)并另外提供一个函数指针revocation_reason_build_cb和一个带有撤销的字符串reason)。
  5. 然后在内部make_keysig_packet使用 hash_algo 创建消息摘要 md,最终提供给complete_sig( sig, sk, md );内部调用do_sign并在md.
  6. 创建创建的撤销证书(这是一种使用秘密/私钥消息签名的类型)。

然后在提供给密钥服务器的此证书中将允许此(如@WayToDoor 所说)它对服务器上的密钥的注释。

只有拥有秘密私钥的人才能签署要使用公钥验证的消息,因此,撤销是“发送私钥签名消息、生成的消息哈希和非对称加密”之类的事情。

我对另一件事的看法是,一旦撤销,密钥对就会被烧毁(信任毫无价值)。

因此,将子密钥用于更安全(气隙)的主加密密钥将是明智的,允许重新发布新的工作子密钥来替换被撤销的密钥,而无需安全通道明智地验证新子密钥的公钥-密钥对。