如何仅知道其指纹就获得公共 OpenPGP 密钥?

igo*_*yan 4 cryptography gnupg openpgp public-key

我只有一个 OpenPGP 密钥的公共指纹。我不知道密钥 ID 或几乎任何其他东西。

我怎样才能得到相应的公钥?有没有在线服务可以做到这一点?

Jen*_*rat 6

指纹与长短密钥 ID 之间的关系

每个 OpenPGP 密钥都有一个附加的指纹,主要根据其公钥数据包计算得出,该数据包还包含创建时间。该计算在RFC 4880、OpenPGP、12.2 中定义密钥 ID 和指纹

有短密钥 ID 和长密钥 ID,它们分别类似于指纹的低 32 位 64 位。例如,查看我的 OpenPGP 密钥的 ID:

fingerprint: 0D69 E11F 12BD BA07 7B37  26AB 4E1F 799A A4FF 2279
long id:                                    4E1F 799A A4FF 2279
short id:                                             A4FF 2279
Run Code Online (Sandbox Code Playgroud)

使用指纹和密钥 ID,因为共享和比较通常具有 1024 到 8096 位的整个密钥(为创建日期等标题添加更多)是非常不切实际的。

从密钥服务器接收密钥

有一堆密钥服务器用于分发密钥——它们相互通信,选择其中任何一个。GnuPG 的选项--keyserver hkp://pool.sks-keyservers.net(通常在~/.gnupg/gpg.confLinux/UNIX 系统的配置文件中设置,Windows 上的另一个路径)使用一个池,每次使用时都会随机选择一个。

您可以使用--recv-keysGnuPG 中的命令,分别使用完整指纹的短 ID 和长 ID 中的任何一个来获取密钥,而指纹是最具体的(与短密钥 ID 冲突的可能性最高)。

如果不存在冲突键,以下语句将获取相同的键:

gpg --recv-keys 0D69E11F12BDBA077B3726AB4E1F799AA4FF2279
gpg --recv-keys 4E1F799AA4FF2279
gpg --recv-keys A4FF2279
Run Code Online (Sandbox Code Playgroud)

如果您想从浏览器中查询密钥服务器,请确保搜索指纹、长或短密钥 ID 前缀0x以指示搜索密钥 ID(GnuPG 命令行界面会自动为您执行此操作)。