2. 密码学基础回顾:对称加密、非对称加密、哈希函数与数字签名
SSL/TLS 协议的安全基石建立在现代密码学的四大核心支柱之上:对称加密、非对称加密、哈希函数与数字签名。理解这些原语的工作原理、性能特征与安全边界,是掌握 SSL/TLS 握手协议、密钥交换与证书验证机制的前提。
2.1 对称加密:AES 与 DES
对称加密使用同一把密钥完成数据的加密与解密。其核心优势在于加解密速度快,适合对大量数据进行保护;挑战在于密钥分发与管理。
2.1.1 DES(数据加密标准)
DES 是早期对称加密标准,使用 56 位密钥对 64 位数据块进行 16 轮 Feistel 结构加密。由于密钥长度过短,DES 已能被暴力破解攻破,目前仅用于向后兼容或教学场景。
2.1.2 AES(高级加密标准)
AES 是当前对称加密的事实标准,采用 SubBytes-ShiftRows-MixColumns-AddRoundKey 的 SPN 结构,支持 128/192/256 位密钥长度,对应 10/12/14 轮加密。AES 在硬件与软件上均具有极高的执行效率,且未发现有效的实用攻击。
| 算法 | 密钥长度 | 分组大小 | 轮数 | 安全状态 |
|---|---|---|---|---|
| DES | 56 位 | 64 位 | 16 | 已破解(暴力可行) |
| 3DES | 112/168 位 | 64 位 | 48 | 逐步弃用(性能差) |
| AES-128 | 128 位 | 128 位 | 10 | 安全(推荐) |
| AES-256 | 256 位 | 128 位 | 14 | 安全(最高等级) |
2.2 非对称加密:RSA 与 ECC
非对称加密使用公钥-私钥对:公钥公开分发,私钥严格保密。加密时使用接收方公钥,解密时使用接收方私钥。非对称加密解决了密钥分发问题,但计算速度比对称加密慢 100–1000 倍。
2.2.1 RSA
RSA 的安全性基于大整数分解难题。密钥生成过程:选择两个大素数 p、q,计算 n = p×q,选取公钥指数 e,计算私钥指数 d 满足 e×d ≡ 1 mod φ(n)。RSA 可用于加密与数字签名,推荐密钥长度 ≥ 2048 位。
2.2.2 ECC(椭圆曲线密码学)
ECC 的安全性基于椭圆曲线离散对数问题(ECDLP)。在相同安全强度下,ECC 密钥长度远小于 RSA:256 位 ECC 密钥 ≈ 3072 位 RSA 密钥。ECC 计算效率更高,带宽占用更小,是 TLS 1.3 的首选非对称算法。
| 安全等级 | RSA 密钥长度 | ECC 密钥长度 | 性能对比 |
|---|---|---|---|
| 80 位 | 1024 位 | 160 位 | ECC 快 3–5 倍 |
| 112 位 | 2048 位 | 224 位 | ECC 快 5–10 倍 |
| 128 位 | 3072 位 | 256 位 | ECC 快 10–20 倍 |
| 256 位 | 15360 位 | 512 位 | ECC 优势极大 |
2.3 哈希函数:SHA-256
哈希函数将任意长度的输入数据映射为固定长度的摘要值,具有单向性(不可逆)、抗碰撞性(难以找到两个不同输入产生相同输出)和雪崩效应(输入微小变化导致输出完全改变)。
2.3.1 SHA-256 工作原理
SHA-256 属于 SHA-2 家族,输出 256 位(32 字节)摘要。处理流程:
- 填充:在消息末尾添加 1 位 '1' 和若干 '0',使长度模 512 等于 448,最后附加 64 位原始长度。
- 分块:将填充后的消息划分为 512 位(64 字节)的数据块。
- 压缩:每个数据块经过 64 轮压缩函数,使用 8 个 32 位工作变量和 64 个常数 K。
- 输出:最终 8 个 32 位寄存器值拼接为 256 位摘要。
2.4 数字签名
数字签名提供身份认证、数据完整性与不可否认性。签名者使用私钥对消息摘要进行签名,验证者使用签名者公钥验证签名。
2.4.1 签名与验证流程
- 签名方:对消息 m 计算哈希 h = Hash(m),使用私钥对 h 签名得到签名值 s。
- 验证方:对收到的消息 m' 计算哈希 h' = Hash(m'),使用公钥验证签名 s 是否匹配 h'。
2.4.2 常见签名算法
| 算法 | 基础 | 签名长度 | TLS 支持 |
|---|---|---|---|
| RSA-PSS | 大整数分解 | 与密钥长度相同 | TLS 1.2+ |
| ECDSA | 椭圆曲线 | 64–72 字节 | TLS 1.2+ |
| EdDSA (Ed25519) | 扭曲爱德华曲线 | 64 字节 | TLS 1.3 |
2.5 混合加密体系:SSL/TLS 的密码学组合
SSL/TLS 采用混合加密策略,结合对称与非对称加密的优势:
- 握手阶段:使用非对称加密(ECDHE、RSA)协商对称密钥,使用数字签名验证证书身份。
- 记录阶段:使用对称加密(AES-GCM、ChaCha20-Poly1305)加密应用数据,使用哈希函数(HMAC)保证完整性。
2.6 密码学安全边界与 TLS 实践
| 密码原语 | 安全边界 | TLS 实践要求 |
|---|---|---|
| AES | 密钥长度 ≥ 128 位,使用认证加密模式 | 禁用 CBC 模式,使用 GCM/CCM |
| RSA | 密钥长度 ≥ 2048 位,使用 OAEP 填充 | 仅用于签名,不用于密钥交换(TLS 1.3) |
| ECC | 曲线选择至关重要(如 P-256、X25519) | 优先使用 X25519 或 P-256 |
| SHA-256 | 输出 256 位,抗碰撞安全 | 用于证书签名与 PRF 计算 |
| 数字签名 | 私钥保护、随机数质量 | 使用 ECDSA 或 EdDSA,避免 RSA 签名 |