首页/我的作品/密码学/6.5 混合加密:TLS如何结合对称与非对称
密码学:守护数字世界的秘密

6.5 混合加密:TLS如何结合对称与非对称

第 37 / 78 篇 · Crazy Boy

到现在,我们已经认识了两种加密方式:对称加密(如AES)和非对称加密(如RSA和ECC)。对称加密速度快,适合加密大量数据,但密钥分发困难;非对称加密解决了密钥分发问题,但速度慢,不适合加密大文件。有没有一种办法,能把两者的优势结合起来?

答案是肯定的,这就是混合加密。它用非对称加密安全地交换一个临时密钥,然后用这个临时密钥进行对称加密。这个临时密钥通常称为会话密钥(session key),每次通信都会重新生成。

混合加密的典型流程

假设爱丽丝想给鲍勃发送一封加密邮件。混合加密的过程如下:

  1. 鲍勃生成密钥对:鲍勃事先生成一对RSA或ECC密钥,把公钥公开,私钥自己保存。

  2. 爱丽丝生成会话密钥:爱丽丝随机生成一个对称密钥(比如256位的AES密钥),这个密钥只用于这一次通信。

  3. 爱丽丝用鲍勃的公钥加密会话密钥:她用鲍勃的公钥加密这个会话密钥,得到密文。因为只有鲍勃的私钥能解密,所以会话密钥可以安全地发送给鲍勃。

  4. 爱丽丝用会话密钥加密邮件:她用会话密钥和AES等对称算法加密邮件内容,得到密文。

  5. 爱丽丝把两个密文一起发给鲍勃:一个是加密后的会话密钥,一个是加密后的邮件。

  6. 鲍勃解密:鲍勃先用私钥解密会话密钥,得到原始的会话密钥,再用会话密钥解密邮件。

在这个过程中,非对称加密只用来保护一个很小的会话密钥(256位),速度完全可以接受;而真正的数据加密由高效的对称加密完成。两者珠联璧合,既解决了密钥分发问题,又保证了高性能。

TLS:互联网上的混合加密实践

混合加密最广泛的应用,就是你每天都在用的TLS(传输层安全协议)。当你在浏览器地址栏看到那个小锁图标时,背后就是TLS在默默工作。

TLS的全称是Transport Layer Security,它的前身是SSL(Secure Sockets Layer)。TLS位于应用层(如HTTP)和传输层(如TCP)之间,为上层协议提供加密、认证和完整性保护。我们平常说的HTTPS,就是HTTP over TLS。

TLS的握手过程比上面的简化版复杂得多,但核心思想是一致的。让我们用一个高度简化的版本,看看TLS 1.2(最常用的版本)的握手流程:

客户端(浏览器)                 服务器(网站)
| |
| 1. ClientHello |
| (支持的TLS版本、加密套件、随机数)|
|-------------------------------->|
| |
| 2. ServerHello |
| (选择的版本、加密套件、随机数) |
| ServerCertificate |
| (服务器的数字证书,含公钥) |
|<--------------------------------|
| |
| 3. ClientKeyExchange |
| (用服务器公钥加密的预主密钥) |
|-------------------------------->|
| |
| 4. 双方根据预主密钥和两个随机数 |
| 计算出会话密钥 |
| |
| 5. ChangeCipherSpec |
| (通知对方后续使用会话密钥加密) |
| Finished(加密的握手结束消息) |
|<------------------------------->|
| |
| 6. 之后的应用数据都用会话密钥加密 |
| 传输 |

关键点解释:

  • 第1、2步:客户端和服务器交换随机数,协商加密套件(比如选择RSA还是ECDHE作为密钥交换算法,AES作为对称加密,SHA作为哈希)。
  • 第3步:客户端生成一个预主密钥(pre-master secret),用服务器的公钥加密后发送。这一步是混合加密的核心——非对称加密保护了会话密钥的种子。
  • 第4步:双方用预主密钥和之前交换的两个随机数,通过一个密钥导出函数(KDF)计算出最终的会话密钥(包括加密密钥和MAC密钥)。这样,即使预主密钥泄露,会话密钥也无法直接推出(因为有随机数的参与)。
  • 第5步:双方确认握手完成,并通知对方后续消息将用会话密钥加密。
  • 第6步:真正的应用数据(比如HTTP请求和响应)用会话密钥进行对称加密传输。

需要注意的是,现代TLS(如TLS 1.3)对流程进行了优化,减少了握手往返次数,并且废弃了一些不安全的加密套件,但混合加密的核心思想始终未变。

为什么TLS不用RSA直接加密所有数据?

如果你还记得RSA的运算速度,就会明白原因。RSA加密几百位的数据都要消耗大量CPU,而一个网页可能有几MB,如果全部用RSA加密,浏览器和服务器都会不堪重负。而AES等对称加密在硬件加速下,可以以GB/s的速度处理数据。所以,混合加密是唯一现实的选择。

前向保密:ECDHE的登场

你可能注意到,上面TLS流程中使用的密钥交换方式是RSA——客户端用服务器公钥加密预主密钥发给服务器。但这种方式有一个潜在风险:如果服务器的私钥将来泄露了,那么所有用这个私钥加密过的历史通信都可以被解密。因为攻击者可以保存以前的通信记录,等拿到私钥后一次性解开。

为了解决这个问题,现代TLS越来越多地使用ECDHE(椭圆曲线迪菲-赫尔曼密钥交换)作为密钥交换算法。ECDHE不是用RSA加密预主密钥,而是让客户端和服务器各自生成一对临时的ECC密钥,通过Diffie-Hellman交换生成共享密钥。这个临时密钥用完就丢弃,即使服务器的长期私钥泄露,也无法解密以前的通信。这种特性称为前向保密(Forward Secrecy)。

在ECDHE流程中,客户端和服务器交换的是各自的临时公钥,然后各自计算出相同的预主密钥。这个预主密钥不会在网络中传输,因此即使攻击者截获了所有通信,也无法计算出预主密钥——这需要解决离散对数问题。前向保密已经成为现代安全通信的标配。

混合加密的其他应用

除了TLS,混合加密还广泛应用于:

  • SSH:用于远程登录,同样用非对称密钥交换会话密钥,然后用对称加密传输数据。
  • IPsec:用于VPN,也是类似机制。
  • 电子邮件加密:PGP和S/MIME用接收方的公钥加密会话密钥,再用会话密钥加密邮件。
  • 加密货币钱包:很多钱包用混合加密备份和恢复私钥。

小结

混合加密是密码学工程实践的典范。它没有追求“纯粹的”非对称加密或对称加密,而是巧妙地将两者结合,取长补短。非对称加密负责安全地交换密钥,解决密钥分发难题;对称加密负责高效地加密数据,保证性能。两者协同工作,构成了现代网络安全通信的基石。

当你下次看到浏览器地址栏的小锁时,可以自豪地说:我知道那是TLS在保护我的连接,而TLS的核心正是混合加密——公钥密码学与对称密码学的完美联姻。


从下一章开始,我们将进入另一个重要的密码学领域:哈希函数。它不是用来加密数据,而是用来给数据“打指纹”。你会看到,哈希函数无处不在,从密码存储到文件校验,都离不开它。