OpenPGP
OpenPGP 是一种加密操作的开放标准。它是一个基于易于理解的加密构建模块的系统。OpenPGP 支持在发送方和接收方之间安全地传递文件和消息。它还处理身份及其验证。
软件
应用程序
许多电子邮件客户端实现了 OpenPGP 功能,例如Thunderbird。
通用 OpenPGP 命令行工具包括gnupg 和sequoia-sq。
无状态 OpenPGP (SOP)
Stateless 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 v4”格式以及新的“OpenPGP v6”格式。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 Key Directory
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 项目的发布版本,或者从密钥服务器获取。