完美前向保密详解
完美前向保密(Perfect Forward Secrecy,PFS)通过为每个连接生成唯一会话密钥提升SSL/TLS安全性,即使用户的私钥泄露,攻击者也无法解密过去或未来的通信数据。本文将介绍PFS的工作原理、支持该特性的加密算法,以及它对网络安全至关重要的原因。
什么是完美前向保密?
完美前向保密(Perfect Forward Secrecy,PFS)也称为前向保密,是一种支持客户端与服务器之间进行短期私钥交换的加密机制。PFS应用于传输层安全(SSL/TLS)协议中,即便某次会话使用的私钥在某一时刻被盗取,也能阻止黑客解密其他过去或未来会话的数据。
PFS的实现方式是在每次建立连接时自动生成唯一的会话密钥。这类密钥的生成不依赖之前的密钥信息,因此无需长期存储密钥,同时可避免攻击者利用已泄露的现有密钥访问敏感数据。
因此,黑客如果不深入介入密钥协商与交换这一基础机制,就无法通过解密获取会话密钥,而这类攻击相比其他攻击手段需要投入多得多的成本。
目前所有主流互联网浏览器都支持PFS,且通常将其作为一项安全特性。大多数现代操作系统早已支持PFS,举例来说,最后一个不支持PFS的Windows版本是Windows XP。
随着更多科技巨头强制要求用户启用该特性,PFS的普及度预计将持续提升。谷歌多年来已在Gmail及其他产品中使用PFS;苹果在2017年要求App Store中的iOS应用必须支持完美前向保密。在TLS 1.3推出时,互联网工程任务组(IETF)强制要求实现完美前向保密,仅允许使用支持该特性的密码套件。PFS是密码学未来发展的重要组成部分,这一点有着充分的依据。
PFS的工作原理
由于PFS使用唯一的会话密钥,攻击者只有获取到某次特定数据交换对应的私钥,才能查看该次交换的具体数据。这种SSL/TLS会话隔离机制大幅降低了通过该攻击向量引发严重数据泄露的风险。
因此,恶意攻击者通常不会优先选择使用PFS的服务器作为目标,因为他们付出攻击成本后能获取的数据量非常有限,而且在用盗取的密钥完成解密前,他们无法确认获取到的数据是否是原本的攻击目标。
在实际应用中,PFS的运行方式是:企业在每次使用服务时切换会话密钥——例如,每当访客访问加密页面(可能涉及金融业务或身份验证场景)时就更换密钥。PFS也被应用于即时通讯场景,可以为每一条发送的消息生成一套新的会话密钥,实现所有传输信息的完全隔离。
解密PFS会话的首选方案是在服务器上安装代理程序。虽然存在其他解密方法,但这些方法都存在缺陷,必须先解决缺陷问题才能安全使用。
在服务器上安装代理,相当于集成了第三方软件,它可以收集加密密钥、提供流量可见性,同时不会中断SSL/TLS会话。
哪些加密算法支持PFS?
SSL/TLS通过约定的密码流程(称为密码套件)完成密钥交换,而协商建立这些连接参数的过程称为握手。
要实现完美前向保密,必须使用符合要求的加密类型。目前有两种密钥交换算法可满足要求:
- 临时迪菲-赫尔曼(Ephemeral Diffie-Hellman,DHE)
- 临时椭圆曲线迪菲-赫尔曼(Ephemeral Elliptic Curve Diffie-Hellman,ECDHE)
随着更优方案的出现,实际使用的具体算法很可能会发生变化,但PFS最重要的原则之一是密钥交换必须是临时的,即会话密钥仅可一次性使用,这类密钥也称为临时密钥。临时密钥基于每次密钥交换时生成的随机值,因此仅对应当次交换,在交换结束后立即失效。会话结束后所有加密相关信息都会被删除,下一次会话将生成全新的参数。
除了在密钥泄露时缩小数据暴露范围之外,迪菲-赫尔曼密钥交换的设计还能保证会话密钥无法通过暴力破解获取。由于会话密钥通过独立、非共享的密码学方式生成,服务器的私钥几乎没有用处,密钥对中对应的公钥实际上从不会被用于加密任何数据。
完全前向保密(PFS)的主要作用
PFS 可防止风险在多个 SSL/TLS 会话之间扩散。
过去,针对客户端与服务器之间常用连接的恶意攻击者可以长期记录加密流量,等待获取私钥的时机。一旦拿到私钥,他们就可以回溯解密所有已记录的流量。PFS 可大幅限制此类风险。
在 PFS 普及之前,该漏洞十分常见,且可能造成毁灭性后果。2012年被发现、2014年公开披露的 OpenSSL Heartbleed 漏洞就是典型案例。
利用 Heartbleed 漏洞时,攻击者告知服务器将发送64KB的心跳请求报文,但实际发送的报文远小于该长度。服务器会返回收到的短报文,但由于预期要回复更长的报文,会用内存中任意存在的数据填充报文剩余部分。该漏洞危害极大,因为攻击者可以反复执行攻击,收集大量数据。这些数据可能包含服务器内的任意内容:密码、个人信息、会话数据,甚至服务器私钥,都可能被黑客获取。
由于心跳请求是常规事件,系统不会对其产生日志。这不仅给入侵的取证调查造成阻碍,还导致如果不专门排查,根本无法发现此类攻击。
如果服务器私钥在此次入侵中泄露,攻击者还可以拦截并解密所有发生过的 SSL/TLS 会话,而通信参与方对此毫无察觉。
PFS 的使用者不仅需要防范恶意攻击者,还要应对其他类型的监听行为。在爱德华·斯诺登曝光美国国家安全局(NSA)的监听项目后,许多机构将 PFS 视为限制政府监听和监控的必要措施。
面向未来的解决方案
如果当前的算力发展遵循摩尔定律,或是量子计算实现大规模落地,许多加密算法和安全最佳实践都将被攻破、淘汰。届时所有受加密保护的内容都会暴露,历史数据也可能面临风险。许多专家已提出警示:目前全球范围内的个人和国家层面主体都在收集数据,待未来算力发展到可以轻松解密时,再对这些数据进行解密。
PFS 从根本上杜绝了这种攻击路径。它不会通过网络传输任何会话密钥,而是采用对称加密机制,由通信双方通过复杂的认证运算独立生成会话密钥。
另一个有助于防范该问题的方案是使用量子密码学——这是一个仍在发展中的领域。
如何实现完全前向保密
在服务器上启用 PFS 支持十分简单,大多数现代服务器默认已完成相关配置。如果尚未配置,通常可通过四个简单步骤完成:
- 进入 SSL 协议配置界面
- 添加对应的 SSL 协议
- 配置兼容 PFS 的 SSL 密码套件
- 重启服务器
包括 Apache、Nginx、RSA 在内的绝大多数Web服务器都可以实现完全前向保密。