Synth Daily

PGP 之困(2019)

PGP 加密技术诞生于 1990 年代,其设计理念早已过时。它存在结构过于复杂、用户体验糟糕、缺乏前向保密等现代安全特性、身份验证机制存在缺陷等多重问题。更重要的是,其主流实现 GnuPG 的代码质量堪忧,漏洞频发。因此,PGP 已不适合现代安全需求,应当被一系列更安全、易用且针对特定场景设计的专用工具所取代。

PGP 的核心问题

PGP 的设计诞生于现代密码学成型之前。如今,没有一个合格的密码学工程师会设计出类似 PGP 的系统,它的诸多缺陷在今天看来是无法容忍的。

  • 荒谬的复杂性: PGP 的数据结构异常复杂,包含多种数据包格式、子数据包和可变长度编码。这种复杂性不仅难以理解,还直接导致了安全漏洞,例如 GnuPG 在解析密钥时曾出现过性能问题。

  • “瑞士军刀”式设计: PGP 试图同时解决多种问题——文件签名、密码加密、公钥加密、文件传输等——但每一样都做得不好。现代密码学强调专用工具,因为安全通信和安全备份所需的加密方案完全不同。

  • 受困于向后兼容: 为了兼容 1990 年代的标准,PGP 默认使用的加密原语(如 CAST5 密码器)已经严重过时。虽然标准后来增加了对现代加密算法的支持,但庞大的用户基础导致这些新特性几乎无法普及。

    你可以选择与 1990 年代向后兼容,或者选择可靠的密码学;你不可能两者兼得。

  • 糟糕的用户体验: PGP 的设置和使用过程极其繁琐和反直觉。一项可用性研究表明,即使是技术人员也难以在两小时内成功配置 PGP。相比之下,Signal 等现代工具的使用门槛则低得多。

  • 长期密钥的风险: PGP 鼓励用户创建并长期使用一个与身份绑定的“永久密钥”。这是一种危险的做法,因为密钥使用时间越长,暴露的风险就越大。一旦密钥泄露,其破坏性将是巨大的。

  • 破碎的认证机制: PGP 用于验证密文完整性的 MDC 系统存在设计缺陷,可以被轻易绕过。更糟糕的是,其主流实现 GnuPG 在验证失败时,仍然可能将未经身份验证的明文返回给调用程序,这直接导致了 Efail 等严重漏洞。

  • 不一致的身份体系: PGP 推广的“信任网络”(Web of Trust)和密钥服务器在实践中并未奏效。普通用户无法有效验证密钥的真伪,而专家则只信任亲自交换过的密钥。这套身份系统形同虚设。

  • 缺乏前向保密: 这是 PGP 最致命的缺陷之一。它意味着如果你的密钥在今天被盗,攻击者可以解密你过去所有的加密信息。现代安全通信协议都将前向保密作为基本要求。

  • 代码质量堪忧: PGP 的事实标准实现是 GnuPG。这是一个庞大而混乱的 C 语言项目,有着一长串的安全漏洞历史,从内存损坏到加密侧信道攻击。依赖 PGP 就意味着依赖 GnuPG 这个并不可靠的基础。

现代替代方案

说服人们放弃 PGP 的挑战在于,没有一个单一工具可以完全取代它。正确的做法是根据具体需求选择合适的专用工具。

与人交流

  • 使用 Signal。 或其他基于 Signal 协议的现代安全通信工具,如 Wire 或 WhatsApp。它们专为消息传递而设计,提供前向保密、易用性和强大的隐私保护。

加密电子邮件

  • 不要这样做。 电子邮件协议在根本上是不安全的。即使你正确使用了 PGP,你的通信对象也很容易在回复或转发时,无意中将加密内容的明文引用出去。 > 推荐使用 PGP 加密邮件来保护高风险用户是一种失职行为。

发送文件

  • 使用 Magic Wormhole。 它通过一次性的密码认证密钥交换(PAKE)来安全地传输文件,对技术人员来说非常简单快捷。
  • 对于非技术用户,Signal 的文件传输功能也足够安全可靠。

加密备份

  • 使用 Tarsnap。 这是一个专为安全备份而优化的工具。
  • 或者,使用操作系统内置的加密磁盘功能(如 Windows 的 BitLocker、macOS 的 FileVault),它们对于离线备份场景而言比 PGP 更简单、更安全。

为软件包签名

  • 使用 Signify/Minisign。 这是 OpenBSD 用于签署软件包的工具,它极其简单,并使用现代的 Ed25519 签名算法。它比 PGP 的签名机制更轻量、更安全。

加密应用数据

  • 使用 libsodium。 这是一个现代、易于使用的加密库,其接口设计旨在防止误用,并且可以轻松集成到各种应用中。

加密文件

对于非传输、非备份的本地文件加密场景,一个新兴的优秀工具是 age。它由密码学专家设计,实现简洁,跨平台支持良好,是取代 PGP 进行文件加密的理想选择。