当我运行时,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 是什么意思?
这是有关密钥的一些信息。
- 它是用 rsa 生成的
gpg --full-generate-key
,我选择了 rsa rsa 选项。 - 长度为 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
答案4
我会向您推荐本指南GPG 密钥剖析 - Dave Steele 的博客
它并不是包含有关 GPG 及其命令的所有内容的指南,但它帮助我更多地了解了 GPG 的整体情况。