帮助理解 gpg --list--keys 输出

帮助理解 gpg --list--keys 输出

当我运行时,gpg --list-keys我得到以下输出:

/home/yax/.gnupg/pubring.kbx
----------------------------
pub   rsa2048 2020-10-09 [SC]
      4424C645C99A4C29E540C26AAD7DB850AD9CFFAB
uid           [ultimate] yaxley peaks <[email protected]>
sub   rsa2048 2020-10-09 [E]

这段文本中我的实际键是什么?

如何获取我的密钥 ID?

[SC] 和 [E] 是什么意思,sub 是什么意思?

这是有关密钥的一些信息。

  1. 它是用 rsa 生成的gpg --full-generate-key,我选择了 rsa rsa 选项。
  2. 长度为 2048 字节

答案1

这段文本中我的实际键是什么?

它没有显示。正如您(正确地)所说,这是一个 RSA 2048 位密钥,因此您的--list-keys十六进制实际公钥(显示的内容)将超过 500 个字符——在典型终端上大约有 7 整行。您的私钥(由于历史原因*,PGP 和 GPG 称为“秘密”,并由 表示)--list-secret-keys会更长;此外,在终端上显示它,在某些情况下,坏人可能能够获得它的副本,这对安全性来说是极其不利的。

我如何获取我的密钥 ID?

4424C645C99A4C29E540C26AAD7DB850AD9CFFAB 是指纹有两个keyid,除了早已过时的 v3 密钥之外,两者都是源自指纹。 “短”keyid 是指纹的低 32 位或最后 8 个十六进制数字,因此是 AD9CFFAB。 “长”keyid 是指纹的低 64 位或最后 16 个十六进制数字,因此是 AD7DB850AD9CFFAB。从历史上看,短 keyid 几乎用于所有内容,大多数网站、博客和您找到的许多文档都会使用和显示它们,但在过去几年中,短 keyid 已被成功攻击,因此现代的程序现在默认使用长 keyid 或(如此处)指纹,但您可以添加通过在某些配置文件中指定--keyid-format=long--keyid-format=short或等效选项(可能是.gnupg/config.

2048R/0B2B9B37在某处找到的是旧版本 GPG 使用的格式示例。它使用单个字母 R 来表示 RSA,因为过去实际上只有三种类型的密钥(和算法)来区分,而现在有更多;它使用 8 个十六进制的短 keyid。

* 我最初写的歇斯底里的葡萄干参考古代黑客的时代好的计算机用户曾经很聪明,但现在情况已不再如此。注意到并提出https://unix.stackexchange.com/users/424473/yaxley-peaks我已经部分覆盖了。

答案2

尽管@dave_thompson_085 对问题的第一部分提供了出色的答案(他描述了指纹和 KeyID 之间的关系),但我将回答原始问题的其余 (3) 部分。

“[SC] 和 [E] 是什么意思,sub 是什么意思?”

[SC]我明白为什么没有人回答有关“ ”和“ ”的部分[E]:GPG 的文档和 GPG 本身一样神秘;-)。我花了很长时间试图找到这些字段的明确描述,但未能成功,我通过创建键找到了它们含义的证据。

[SC]:

如果我们使用开关创建一个键,如果我们选择选项 11 ,--expert我们将获得“ ”字段的值[SC]设定自己的能力”。因此,我们可以确定“ [SC]”与“签署证明“ 从 ”当前允许的操作”:

gpg --expert --full-gen-key

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
   (9) ECC and ECC
  (10) ECC (sign only)
  (11) ECC (set your own capabilities)
  (13) Existing key
  (14) Existing key from card
Your selection? 11

Possible actions for a ECDSA/EdDSA key: Sign Certify Authenticate 
Current allowed actions: Sign Certify 

   (S) Toggle the sign capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? q

[E]:

gpg --expert --full-gen-key没有给我更改“ [E]”的选项。

但是,使用创建密钥gpg --default-new-key-algo :

gpg --default-new-key-algo "ed25519/cert,sign+cv25519/encr" --quick-generate-key "[email protected]"

在正斜杠之间的第二个字段中,我们看到“证书、标志“但是在第二个正斜线之后的第三个字段中,我们看到encr正在设置。

所以 " [E]" = encr[yption]

子:

Sub[key],Debian 非常优秀维基页面描述为:

什么是子项? OpenPGP 还支持子密钥,子密钥与普通密钥类似,只是它们绑定到主密钥对。子密钥可用于签名或加密。子键真正有用的部分是它们可以独立于主键而被撤销,并且也可以与主键分开存储。

换句话说,子密钥就像一个单独的密钥对,但自动与您的主密钥对关联。

GnuPG 实际上使用仅签名密钥作为主密钥,并自动创建加密子密钥。如果没有加密子密钥,您根本无法使用 GnuPG 加密电子邮件。 Debian 要求您拥有加密子密钥,以便可以安全地通过电子邮件将某些内容发送给您,例如您的 debian.org shell 帐户的初始密码。

结论:

找到这些细节——我可以看到其他人也有同样的问题——就像拔牙一样。 GPG 的文档可能会更好一些。对于加密之类的东西,不能存在可能导致误解的歧义......

答案3

你可以阅读本文有关关键标志的说明(请参阅关键标志子包部分)。

您的主密钥(用于签名)是前面带有“pub”的主密钥。您可以使用“gpg --list-secret-keys”(以“sec”开头的部分)查看私有部分。子密钥(用于加密)是前面带有“sub”(公共子密钥)或“ssb”(秘密子密钥)的密钥。检查有关 GnuPG 单独密钥的问题的答案这里

答案4

我会向您推荐本指南GPG 密钥剖析 - Dave Steele 的博客

它并不是包含有关 GPG 及其命令的所有内容的指南,但它帮助我更多地了解了 GPG 的整体情况。

相关内容