认识
官网:https://www.openpgp.org/
文档:
OpenPGP 是一套非专有的、开放的互联网标准(定义于 RFC 4880 及其后续扩展),它规定了如何对数字内容(如文本、文件、电子邮件)进行加密、解密、数字签名和验证。OpenPGP 是数字隐私领域的基石技术。它提供了一个强大、灵活且经过实战检验的框架来保护数据的机密性和真实性。尽管它在用户体验和某些现代安全特性上存在挑战,但它在软件验证、电子邮件加密等需要高度信任和安全的领域仍然是不可或缺的工具。理解 OpenPGP 是理解现代数字安全的一个重要组成部分。其不仅是标准,也是个由多种兼容软件(如 GnuPG)实现的生态系统。
OpenPGP 是个广泛使用的邮件加密标准。
历史背景:PGP 到 OpenPGP
1991: PGP 诞生 – 菲利普·齐默曼(Philip R. Zimmermann)发布了 Pretty Good Privacy 软件。它最初是为了保护人权活动家的通信而设计的。由于其强大的加密能力,齐默曼曾受到美国政府的犯罪调查(当时加密软件被视为军火出口管制)。
标准化需求 – PGP 的巨大成功催生了互操作性的需求。不同的公司开发了不同版本的 PGP,但它们需要遵循一个共同的标准才能互通。
1997: OpenPGP 成为标准 – 互联网工程任务组(IETF)成立了工作组,并将 PGP 的格式制定为开放标准。这个标准被命名为 OpenPGP。
现今 – OpenPGP 标准由多个 RFC 文档定义,并由各种软件实现。其中最著名的是 GNU Privacy Guard 实现。
在日常生活中,这三个术语经常被混用,但技术上它们有上述区别。关键区别:
- PGP: 最初由齐默曼创建的软件商标,现属于 Broadcom(通过收购赛门铁克)。
- OpenPGP: 由 IETF 标准化的协议标准。
- GnuPG (GPG): 遵循 OpenPGP 标准的一个完全免费、开源的软件实现,由 Werner Koch 开发,是当今最主流的实现。
组成
核心密码学原理:非对称加密与混合加密
OpenPGP 的魔力建立在公钥密码学之上。
#### 1. 非对称加密
系统使用一对数学上相关联的密钥:
- 公钥:可以自由分发,用于加密和验证签名。
- 私钥:必须严格保密,用于解密和创建签名。
重要特性:用公钥加密的内容,只能用对应的私钥解密。反之,用私钥签名的内容,可以用对应的公钥验证。
#### 2. 混合加密系统
非对称加密(如 RSA、ECC)计算非常缓慢,不适合加密大量数据。因此,OpenPGP 采用混合加密系统:
- 生成会话密钥:当加密一个文件或邮件时,发送方软件会随机生成一个一次性的、强大的对称加密密钥(称为会话密钥)。
- 加密数据:使用这个会话密钥和快速的对称加密算法(如 AES)来加密实际的数据。
- 加密会话密钥:使用接收方的公钥(非对称加密)来加密这个会话密钥。
- 打包发送:将加密后的数据和加密后的会话密钥一起打包发送给接收方。
接收方收到后:
- 使用自己的私钥解密出会话密钥。
- 使用解密得到的会话密钥去解密出原始数据。
这种方法结合了非对称加密的安全性和对称加密的高效性。
密钥与信任模型:Web of Trust
#### 1. 密钥结构
一个 OpenPGP 密钥对实际上是一个主密钥-子密钥的复合结构:
- 主密钥(Certify Key):
- 这是身份的核心,用于签署其他子密钥,证明它们属于该身份。
- 应被极度保护,通常离线存储,很少使用。
- 子密钥:
- 加密子密钥:用于加密数据。
- 签名子密钥:用于创建数字签名。
- 认证子密钥:用于登录认证等。
- 子密钥可以定期轮换,即使泄露或丢失,只需用主密钥撤销并生成新的即可,无需重建整个身份。
#### 2. Web of Trust vs. CA
如何相信一个公钥真的属于它声称的主人?OpenPGP 使用独特的 Web of Trust 模型,与 HTTPS 使用的证书颁发机构模型不同。
- 证书颁发机构:你信任一个中心化的第三方(如 Let’s Encrypt)来验证所有网站的身份。
- Web of Trust:信任是去中心化的。你通过你信任的人来验证他人的身份。
- 密钥签名:如果你亲自验证了 Alice 的身份(例如,核对护照和密钥指纹),你可以用你的私钥签署她的公钥。
- 信任传递:如果你信任 Alice 能很好地验证他人的身份,那么你可能会选择信任所有被她签署过的密钥。
- 通过这种“朋友介绍朋友”的方式,形成一个信任网络。
密钥指纹是一串唯一的哈希值(如 `AB12 CD34 EF56 …`),是验证密钥身份的最可靠方式。
详细工作流程:以加密邮件为例
假设 Alice 要向 Bob 发送一封加密并签名的邮件。
- 准备:
- Alice 和 Bob 都生成了自己的 OpenPGP 密钥对。
- 他们互相交换了公钥(例如,通过上传到密钥服务器,或直接发送)。
- 发送方(Alice)操作:
- 签名:Alice 的邮件客户端用她的私钥对邮件内容生成一个数字签名。
- 加密:
- 客户端生成一个随机的会话密钥。
- 用会话密钥加密“邮件内容+签名”。
- 用Bob 的公钥加密这个会话密钥。
- 发送:客户端将`[用Bob公钥加密的会话密钥] + [用会话密钥加密的(内容+签名)]`发送给 Bob。
- 接收方(Bob)操作:
- 解密会话密钥:Bob 的邮件客户端用他的私钥解密出会话密钥。
- 解密内容:用解密得到的会话密钥解密出原始的邮件内容和 Alice 的签名。
- 验证签名:Bob 的客户端用Alice 的公钥验证签名。如果成功,则证明:① 邮件确实来自 Alice;② 邮件在传输中未被篡改。
性质
其核心目标是提供:
- 保密性:确保数据只能被预期的接收者读取。
- 身份认证:验证数据的发送者是谁。
- 完整性:确保数据在传输过程中没有被篡改。
优点
- 强大的安全性:基于久经考验的密码学原语。
- 端到端加密:提供真正的隐私,中间人无法访问明文。
- 开放标准与互操作性:多个实现可以互通,避免了厂商锁定。
- 离线功能:加密、解密、签名、验证均可离线完成,不依赖网络服务。
- 不可否认性:由于签名由私钥创建,发送方事后无法否认自己发送过的消息。
构建
https://www.openpgp.org/software/
应用
- 安全电子邮件:最经典的应用,通过插件(如 Enigmail for Thunderbird)集成到邮件客户端中。
- 软件包签名验证:几乎所有主流 Linux 发行版都使用 OpenPGP 签名来确保软件包镜像的完整性和来源真实性。开发者也会签署他们的 Git Commit/Tag。
- 文件加密:加密敏感文件后再存储或传输,例如备份到云端。
- 密码管理器:一些密码管理器(如 Pass)使用 GnuPG 作为后端来加密存储密码文件。
- 安全消息传输:作为一些通信协议的底层加密基础。
改进
局限性与挑战
- 用户体验复杂:密钥管理、交换、信任建立对普通用户来说门槛极高,是普及的最大障碍。
- 元数据未加密:虽然内容加密了,但电子邮件的发件人、收件人、主题、时间等元数据仍然是明文。
- 缺乏前向保密:如果一个人的私钥在将来某天被盗,攻击者可以解密所有过去截获的、用对应公钥加密的通信。(现代协议如 Signal 协议通过每次会话使用临时密钥来解决此问题)。
- 密钥服务器问题:公钥服务器是公共的,一旦上传密钥就无法删除,存在隐私和滥用问题。
- Web of Trust 实践困难:在全球范围内建立有效的 WoT 非常困难,大多数用户的密钥并未被他人签名。
参考
DeepSeek / 详细介绍 OpenPGP