如何使用 GPG 从公钥块中获取“用户名”字段?

如何使用 GPG 从公钥块中获取“用户名”字段?

在花了这么多时间研究这个问题之后,我才不得不问这个问题,这个事实已经告诉我,这两个说法中至少有一个是正确的:

  1. 我做的事情非常错误。
  2. PGP/GPG 完全是一团糟,故意让它变得尽可能的困难和混乱。

基本上,我的系统会自动导入任何发送给我的 PGP 公钥块,以便能够在发送消息时自动加密消息(由我作为回复发送)。

当您使用 PGP/GPG 加密纯文本消息时,您会告诉程序使用哪个“接收器”。这个令人困惑的术语实际上是指 GPG 中存储的公钥中的“全名 + 电子邮件地址”字段(出于某种原因,它被称为“用户名”)。

好吧,当我“导入”这样的 PGP 公钥块(有效)时,我不知道“用户名”字段是什么,如果我不知道,我实际上就无法使用它,因为加密功能希望我引用正确的“存储的公钥”。

但是我如何从公钥中提取“用户名”字段呢?您可能认为执行 --import 命令时它会返回此信息,但据我所知,它并没有返回。而且我已经在手册中搜索了好几个小时,却没有找到与此相关的任何内容。

顺便说一下,我确实找到了这个 StackOverflow 线程:https://security.stackexchange.com/questions/50965/extracting-the-gpg-userid-from-the-public-key-file ... 但对我来说这完全没有意义。“解决方案”已经知道并指定了某种类型的 id,这似乎违背了整个要点,因为这实际上是我们试图找到的(除了它是“用户名”字段)。

我见过各种“常用/有用的 PGP/GPG 命令”,但没有一个提到这一点。啊?这就像最基本、最关键的任务……我很困惑。为什么 --import 命令不给我任何可用的 id?有,但方式有些复杂?

答案1

为什么 --import 命令不提供任何可用的 id?它提供了,但是方式有些复杂?

确实如此,但主要是你对“可用 ID”的期望是错误的。

当您使用 PGP/GPG 加密纯文本消息时,您会告诉程序使用哪个“接收器”。这个令人困惑的术语实际上是指 GPG 中存储的公钥中的“全名 + 电子邮件地址”字段(出于某种原因,它被称为“用户名”)。

该字段称为“用户 ID”。它不称为“用户名”。

许多程序(主要gpg是所有包装它的工具)将要还可以仅通过电子邮件地址、用户 ID 的任何其他子字符串匹配、完整的 160 位公钥指纹或“密钥 ID”(32/64 位截断指纹)来接受收件人。例如:

gpg --recipient [email protected] --encrypt
gpg --recipient EA708A76F932CCEAF60D364375F1129BE6E591E4 --encrypt
gpg --recipient "EA70 8A76 F932 CCEA F60D 3643 75F1 129B E6E5 91E4" --encrypt
gpg --recipient fred --encrypt
gpg --recipient 0x75F1129BE6E591E4 --encrypt

(您可以通过将匹配传递给 来测试匹配gpg --list-keys,例如gpg -k fred。)

其中,通过指纹指定收件人是最安全的选择。“用户 ID”字段(无论是完整还是部分)只有在您使用 Web of Trust 或有其他方式区分合法的“Fred Foobar”密钥和假的“Fred Foobar”密钥时才是安全的标识符。

好吧,当我“导入”这样的 PGP 公钥块(有效)时,我不知道“用户名”字段是什么,如果我不知道,我实际上就无法使用它,因为加密功能希望我引用正确的“存储的公钥”。

GnuPG 始终将此字段显示为gpg --import输出的一部分(连同 64 位“密钥 ID”)。例如:

$ gpg --status-fd=2 --import < /tmp/test.key
gpg:密钥75F1129BE6E591E4: 公钥”测试用户 <[电子邮件保护]>“进口
gpg: 处理总数:1
gpg:已导入:1

要在自动化工具中使用它,请使用--status-fd可为您提供完整 160 位指纹的工具。例如:

$ gpg --status-fd=2 --import < /tmp/test.key
[GNUPG:]导入成功 0 EA708A76F932CCEAF60D364375F1129BE6E591E4
[GNUPG:] 密钥_CONSIDERED EA708A76F932CCEAF60D364375F1129BE6E591E4 0
[GNUPG:] IMPORT_RES 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0

如果您正在使用其他 PGP 软件(即非 GnuPG),并且它没有向您显示有关刚刚导入的密钥的任何信息,那么这是其他 PGP 软件中的 UI 问题。

相关内容