包含 URI 的用户 ID

信息安全 密钥管理 pgp 身份
2021-08-17 14:21:03

将用户 ID 添加到 OpenPGP 密钥时,通常会要求您(例如 GnuPG)提供姓名、评论和电子邮件地址(其中每个部分都是可选的)。

此格式 ( Name (Comment) <email address>) 由RFC 4880 第 5.11 节(用户 ID 数据包)描述:

按照惯例,它包含一个RFC 2822 [ RFC2822 ] 邮件名称地址,但对其内容没有限制。

虽然它说这只是一个“约定”并且“对其内容没有限制”,但本节的第一句话是:

用户 ID 数据包由 UTF-8 文本组成,用于表示密钥持有者的姓名和电子邮件地址。

我假设(如果我错了,请纠正我)“旨在代表姓名和电子邮件地址”是不规范的。所以这意味着:

  1. 我可以指定任何类型的内容(它不必代表姓名和/或电子邮件地址)。
  2. 如果我指定了姓名和电子邮件地址,则不必遵循 RFC 2822 中描述的地址格式。

这个对吗?

如果是这样,我可以指定任何类型的 URI(使用尖括号来分隔它)。由于将包含 URI 方案(与“约定”格式相反),例如,它可以防止人们将 XMPP 地址误认为电子邮件地址。

可能的用户 ID 示例:

  • <mailto:unor@example.com> (我的电子邮箱)
  • <xmpp:unor@example.org> (我的 JID)
  • <tel:+1-201-555-0123> (我的电话号码)
  • <acct:12139@security.stackexchange.com> (我的安全 SE 帐户)
  • <https://example.org/> (我的网站)

这是明智的,甚至是推荐的吗?它会破坏什么吗?

<mailto:unor@example.com>我特别想知道,如果指定了完整URI <xmpp:unor@example.org>.

1个回答

标准化

不要期望任何客户端能够读取这些用户 ID。遵循提供的架构的用户 ID 不是标准的一部分,很可能不会被实施。

这对于提供确实具有正式表示的邮件地址特别有效,包括mailto:前缀会破坏它。

允许任意字符串

除了姓名、邮件地址和可能的评论之外的任何内容都不是标准化的,但标准并没有禁止任何内容,您可以提供任何您想要的字符串。考虑其他人是否能够理解您想要提供的信息,以及提供信息是否合理(因此,有人会批准/证明用户 ID 吗?)。

也许尽量避免匹配 RFC 2822 定义的模式,并且不要尖括号中放置任何不适合您能够接收邮件的电子邮件地址的内容,因为这是实现(以及可能的其他用户)会预计。

OpenPGP 符号

给出(使用)限制的另一种方法是使用符号,但同样,没有定义使用它们的方法,我还没有听说过任何实际使用它们的实现。