GnuPG 在共享我的公钥时要求提供密钥 ID,那是什么?

信息安全 密钥管理 pgp gnupg
2021-09-06 08:17:13

我使用 GnuPG 生成了一个公钥。我可以看到它使用--list-keys

$  gpg --list-keys
/Users/mertnuhoglu/.gnupg/pubring.gpg
-------------------------------------
pub   4096R/CB3AF6E6 2015-12-24 [expires: 2016-12-23]
uid                  Mert Nuhoglu <mert.nuhoglu@gmail.com>
sub   4096R/0D6B756F 2015-12-24 [expires: 2016-12-23]

我想在密钥服务器上分享它。本教程说我需要使用以下命令:

gpg --send-keys 'Your Name' --keyserver hkp://subkeys.pgp.net

我使用该命令,但出现以下错误:

$  gpg --send-keys 'Mert Nuhoglu' --keyserver hkp://subkeys.pgp.net
gpg: "Mert Nuhoglu" not a key ID: skipping
gpg: "--keyserver" not a key ID: skipping
gpg: "hkp://subkeys.pgp.net" not a key ID: skipping

究竟是key id什么?

2个回答

OpenPGP 用户 ID

OpenPGP 中的用户 ID 用于将密钥连接到名称和电子邮件地址等实体。这些用于搜索密钥服务器上的密钥,并将它们与用户/电子邮件地址匹配。

请注意,密钥服务器不会检查用户 ID ,请务必自行验证!

OpenPGP 密钥 ID

OpenPGP 密钥 ID(和指纹)用于在执行请求和发送密钥等多项操作或验证所有权时引用密钥。例如,您可以在单独的、受信任的通道上与密钥的所有者交换指纹,以确保密钥确实属于声称拥有该密钥的人。

OpenPGP (v4) 密钥 ID 是根据公钥和密钥创建时间戳计算的标识符。根据这些,计算哈希和。十六进制编码的版本称为密钥的指纹最后(低位)16个字符称为长键ID,如果只取最后8个字符,则为短键ID我自己的公钥的一个例子:

fingerprint: 0D69 E11F 12BD BA07 7B37  26AB 4E1F 799A A4FF 2279
long id:                                    4E1F 799A A4FF 2279
short id:                                             A4FF 2279

在密钥大小之后的行中引用了主公钥的 ID pub,在您的情况下,短密钥 ID 为CB3AF6E6

pub   4096R/CB3AF6E6 2015-12-24 [expires: 2016-12-23]

请注意,八字节短密钥 ID 无法提供足够大的值空间,并且很容易通过冲突攻击生成重复密钥至少使用长密钥 ID而不是短密钥 ID ,并且当软件处理密钥时,始终参考整个指纹。

有关如何导出哈希和的更多详细信息,请参阅RFC 4880、OpenPGP、12.2。密钥 ID 和指纹,这也解释了已弃用的 OpenPGP v3 密钥的差异。

从密钥服务器发送和接收密钥

要从密钥服务器发送或接收密钥,您必须使用完整的密钥 ID 或指纹。GnuPG在这里接受用户 ID。来自man gpg

--send-keys key IDs
    Similar to --export but sends the keys to a keyserver.  Fingerprints may be
    used instead of key IDs. [...]
 --recv-keys key IDs
    Import the keys with the given key IDs from a keyserver. [...]

如果您想首先搜索用户 ID(或其中的一部分),请使用gpg --search-keys. 这将首先查询密钥服务器的名称,并提供某种助手,询问您之后要获取哪些密钥(因此,它将自动--recv-keys为选定的密钥运行)。

 --search-keys names
     Search the keyserver for the given names. Multiple names given here will be
     joined together to create the search string for the keyserver. [...]

密钥 ID 到底是什么?

看起来像CB3AF6E6的部分。GPG 也接受使用电子邮件地址来引用密钥。