OpenPGP
OpenPGP 是一个用于密码学操作的开放标准。它是一个基于良好理解的密码学构建块的系统。OpenPGP 支持在发送者和接收者之间安全地传递文件和消息。它还解决了身份及其验证问题。
软件
应用
许多 电子邮件客户端实现了 OpenPGP 功能,例如 Thunderbird。
通用的 OpenPGP 命令行工具包括 gnupg 和 sequoia-sq。
无状态 OpenPGP (SOP)
无状态 OpenPGP 定义了一个通用的无状态命令行界面,用于处理 OpenPGP 消息,称为 SOP。它旨在提供一个最小的、结构良好的 API,涵盖 OpenPGP 对象安全。
对于许多用例,SOP 提供了所有必需的功能,并且可以用作独立于供应商的独立替代方案,例如 GnuPG 等工具(详见专门的 IETF 草案)。
存在许多 SOP 实现,并在 互操作性测试套件中进行了交叉测试。
库
存在许多用于各种编程语言的 库。
硬件安全设备支持
OpenPGP 私钥可以在专门的硬件设备上安全地处理。OpenPGP 卡标准为此目的定义了一个智能卡应用程序。此标准在许多设备上实现,包括大多数型号的 Nitrokey 和 YubiKey。
用户可以将这些 智能卡 与 GnuPG 或 OpenPGP-card-tools 等软件一起使用。
标准化
OpenPGP 的标准化在 IETF OpenPGP 工作组的背景下进行。
最新且被广泛采用的 IETF 批准的 OpenPGP 标准是 RFC 9580。该标准定义了俗称“OpenPGP 版本 4”以及新的“OpenPGP 版本 6”格式的格式。RFC 9580 规定了使用遵循最佳实践的现代密码学机制,包括 AEAD。
未来的工作将围绕诸如 后量子密码学 (PQC) 和 前向保密 等主题(详见 IETF OpenPGP 工作组章程 04)。
PGP 公钥基础设施
OpenPGP 生态系统已经开发了几种机制来处理 公钥。此公钥基础设施(又名 PGPKI)处理两个独立的关注点
- 通信对等方的证书的分发和检索
- 证书中身份的验证
要与对等方通信,需要对等方证书的副本。可以使用以下部分中描述的分发模型之一来获得副本(参见 #密钥服务器 和 #Web 密钥目录)。
OpenPGP 证书包含 身份声明。由于 OpenPGP 是一个去中心化的系统,没有中央机构,因此身份声明由 证书持有者 发布,并且可以独立验证。根据 威胁模型,不同的身份验证方法(又名身份验证)是合适的。
对于某些低风险目的,忽略身份验证并依赖 首次使用信任 (TOFU) 可能是可以接受的。
通过依赖验证 密钥服务器 或 Web 密钥目录,可以实现稍高水平的真实性保证。
通过 显式认证 可以实现最高级别的真实性保证之一,例如通过手动验证证书的 OpenPGP 指纹。
密钥服务器
密钥服务器 OpenPGP HTTP 密钥服务器协议 的实现提供了不同的功能集,同时为用户提供对 OpenPGP 证书的访问。
一些密钥服务器实例相互同步 OpenPGP 证书,形成一个主机池,提供相同的密钥材料。
大多数密钥服务器接受 OpenPGP 证书,无需身份验证或验证。但是,一些较新的实现强制验证 用户 ID,方法是向连接到上传证书的地址发送验证电子邮件。
下表中的所有密钥服务器均符合 GDPR,因为它们为生态系统提供了必要的公共服务,允许删除 个人数据 和/或强制选择加入其发布。
第三方身份认证并非由所有密钥服务器分发。
主机 | 同步 | 验证 | 身份认证 | 软件 |
---|---|---|---|---|
https://keys.openpgp.org | 否 | 是 | 否 | Hagrid |
https://pgpkeys.eu/ | 是 | 否 | 是 | Hockeypuck |
https://keyserver.ubuntu.com/ | 否 | 否 | 是 | Hockeypuck |
https://keys.mailvelope.com/ | 否 | 是 | 否 | Mailvelope 密钥服务器 |
Web 密钥目录
Web 密钥目录 (WKD) 是一种基于 知名 URI 分发给定域的 OpenPGP 证书的机制。
使用 WKD,Web 服务器 提供对具有规范化文件名的知名目录结构的访问,该结构允许按电子邮件地址查找。
根据 GnuPG 的 wiki,一些邮件托管服务提供商支持此机制。
可以从 OpenPGP 公钥环创建 WKD 目录结构,并由 Web 服务器 公开。可以使用 https://metacode.biz/openpgp/web-key-directory 检查设置的正确性。
显式认证
显式认证可能意味着通过安全通道(例如,当面)与证书所有者手动验证证书的 OpenPGP 指纹。
显式认证的一种变体是 信任网络,它将手动认证编码为机器可读的工件:OpenPGP 认证(又名签名)。可以直接认证,也可以使用通过 委托 通过 受信任的介绍人 的间接路径进行建模。
在 Arch Linux 上,一组 主签名密钥 充当项目的 信任锚。这些密钥用于认证所有 软件包维护者 和 开发者 的 OpenPGP 证书。任何人都可以通过依赖主签名密钥作为信任锚来验证每个打包者的真实性。对于 Arch Linux 用户,这可以通过安装 archlinux-keyring 并使用 pacman-key(8) 来实现。
或者,主签名密钥的 OpenPGP 指纹可以由任何 OpenPGP 用户手动配置为信任锚,例如在 https://archlinux.org.cn/master-keys/ 上验证它们之后。所有相关证书都可以通过 Arch Linux 自己的 web 密钥目录、archlinux-keyring 项目 的发布版本或来自 密钥服务器 获取。