加密原理(上):对称加密、非对称加密、混合加密机制

聊到 HTTPS,绕不开的一个核心就是加密。说实话,我在早期做 Web 开发时,对加密的理解仅仅停留在“把数据弄乱,让别人看不懂”。后来在做公司的一个支付项目时,才真正被上了一课。

那次我们直接用对称密钥加密了所有请求,结果密钥在客户端和服务器之间传输时被截获了。你能想象吗?加密后的数据对方直接就能解开。嗯,这就是典型的“锁被挂在了没上锁的箱子里”。

所以,搞懂加密的三种机制,是理解 HTTPS 安全体系的基石。下面我把这三种机制拆开揉碎了讲清楚。

对称加密:效率高,但有个致命问题

对称加密,说白了就是加密和解密用同一把钥匙。就像你家的门锁,插进去转一下锁上,再转一下打开。

它的优点是 速度快,特别适合加密大量数据。我在处理日志加密时,用过 AES-256 加密 TB 级别的数据,吞吐量能到 GB/s 级别,非对称加密根本做不到。

但对称加密有一个 致命缺陷:密钥怎么安全地传给对方?

你想想看,如果你和远在国外的朋友通信,你把门锁和钥匙都寄过去了。中途快递被人拆开,偷配了一把钥匙。后面所有的通信都是不安全的。

典型对称加密算法:

  • AES(Advanced Encryption Standard):当前最主流的对称加密算法,密钥长度 128/192/256 位。
  • DES(Data Encryption Standard):老算法,密钥只有 56 位,现在能暴力破解,别用了。
  • 3DES:DES 的加强版,效率低,逐渐被 AES 替代。

我在项目中遇到过最尴尬的一次——客户要求我们用 3DES。我问为什么,他说“听起来更安全,因为三个 DES”。我当时差点没绷住。

我的建议:新项目一律用 AES-256。别碰 DES 和 3DES,除非你在维护十年前的遗留系统。

非对称加密:安全性高,但慢得让人抓狂

非对称加密引入了 公钥 和 私钥 的概念。公钥可以公开给别人,私钥只有自己知道。

核心逻辑是:公钥加密的内容,只能用私钥解密。 反过来,私钥加密的内容,只能用公钥解密。

这样,你就不用再担心“钥匙在传输过程中被偷”了。因为公钥本来就是公开的,别人拿到也解不开只有私钥才能解开的密文。

但非对称加密的 性能是个大问题。拿 RSA 举例,2048 位的 RSA,加解密速度大约是 AES 的千分之一到万分之一。你要用非对称加密加密一个 1GB 的视频文件?等你加完密,天都黑了。

注意:别直接用非对称加密加密大块数据,这是新手容易犯的错误。我见过有同学用 RSA 加密一张高清图片,结果前端页面卡死了 3 秒。

典型的非对称加密算法:

  • RSA(Rivest-Shamir-Adleman):应用最广,密钥长度至少 2048 位。安全性基于大整数分解难题。
  • ECC(Elliptic Curve Cryptography):椭圆曲线加密,同样安全强度下,密钥更短,速度更快。现在很多现代系统(包括 TLS 1.3)都推荐 ECC。
  • DH(Diffie-Hellman):主要用于密钥交换,不直接用于加解密。
特性 对称加密 非对称加密
密钥数量 1 个(共享密钥) 2 个(公钥 / 私钥)
速度 快(硬件加速可达 GB/s) 慢(通常是对称的 1/1000)
安全性基础 密钥保密性 数学难题(大整数分解或椭圆曲线离散对数)
典型算法 AES、ChaCha20 RSA、ECDSA、Ed25519
应用场景 批量数据加密 密钥交换、数字签名

混合加密机制:取长补短,HTTPS 的解决方案

对称加密快但密钥分发难,非对称加密安全但慢得像蜗牛。那怎么办呢?

答案是 混合起来用。这也是 HTTPS 在 TLS 握手阶段采用的核心策略。

简单来说就是两步走:

  1. 用 非对称加密 安全地传输一个临时的对称密钥(这个密钥叫会话密钥 / Session Key)。
  2. 双方拿到会话密钥后,后续所有通信都用 对称加密(如 AES)来加解密数据。

这样做的好处很明显:既享受了非对称加密在“密钥分发”环节的安全,又保留了对称加密在“大批量数据传输”环节的高效。

我曾经在一次内部培训上问学员:“如果你的浏览器和服务器之间有一段非对称加密加解密的过程,你会感觉到延迟吗?”答案是几乎不会。因为混合加密只在一开始用非对称交换密钥,后面全是高速的对称加密。

关键流程示意(TLS 1.2 的混合加密):

  • 客户端向服务器索要公钥。
  • 服务器把公钥(含在证书中)发给客户端。
  • 客户端用公钥加密一个随机生成的对称密钥(Pre-Master Secret)。
  • 服务器用私钥解密,得到对称密钥。
  • 双方用这个对称密钥进行后续的 AES 对称加密通信。

你可能会问,为什么不直接用公钥加密所有数据?嗯,这就像你用金条去搭房子——能用,但太浪费。金条应该用来做地基的关键支撑,墙体和屋顶用普通的砖石就行。

一点补充:现代 TLS 1.3 进一步优化了握手次数,但混合加密的思路没变。它依然是“用非对称握手,用对称传数据”。

为了让你更直观地理解这三者之间的关系,我画了一张图:

加密机制关系图 对称加密 密钥:同一把 速度:快(GB/s) 非对称加密 密钥:公钥/私钥 速度:慢 混合加密机制 非对称加密交换密钥 对称加密传输数据 (TLS 核心) 密钥分发困难 速度太慢 单独用对称加密 密钥传输不安全 单独用非对称加密 性能不可接受 混合加密 = 取长补短 安全 + 高效

从这张图可以看得很清楚:单独使用对称或非对称加密,都有各自的短板。混合加密把两者的优势组合起来,这也是 HTTPS 能兼顾安全与性能的根本原因。