TLS 1.2 vs TLS 1.3 对比
一、核心设计理念变化
维度 | TLS 1.2 | TLS 1.3 |
密码套件数量 | 300+(IANA 注册了 300 多个) | 仅 5 个(RFC 8446 定义) |
密钥交换 | RSA、DH、DHE、ECDH、ECDHE(5种) | 仅 ECDHE / DHE(强制前向保密) |
认证方式 | 写在套件名里(RSA/ECDSA) | 由证书决定,套件名不再包含认证算法 |
加密模式 | CBC、GCM、CCM、Stream | 仅 AEAD (GCM/CCM/ChaCha20-Poly1305) |
哈希算法 | MD5、SHA-1、SHA-256、SHA-384 | 仅 SHA-256 / SHA-384 |
密钥派生 | 自定义 PRF(拼接+哈希迭代) | HKDF(RFC 5869 标准) |
完整握手 RTT | 2-RTT | 1-RTT |
会话恢复 RTT | 1-RTT(Session Ticket / Session ID) | 0-RTT(Early Data) |
前向保密 | 可选(用 ECDHE/DHE 才有) | 强制 |
二、密码套件对比
TLS 1.3 密码套件(仅 5 个,RFC 8446)
套件名 | 对称加密 | 模式 | 哈希 | 状态 |
TLS_AES_256_GCM_SHA384 | AES-256 | GCM | SHA-384 | 强制推荐 |
TLS_AES_128_GCM_SHA256 | AES-128 | GCM | SHA-256 | 强制推荐 |
TLS_CHACHA20_POLY1305_SHA256 | ChaCha20 | Poly1305 | SHA-256 | 推荐(移动/低功耗) |
TLS_AES_128_CCM_SHA256 | AES-128 | CCM | SHA-256 | 可选(IoT/受限设备) |
TLS_AES_128_CCM_8_SHA256 | AES-128 | CCM-8 | SHA-256 | 可选(极低功耗 IoT) |
TLS 1.2 常见密码套件(对比用)
套件名 | 密钥交换 | 认证 | 加密 | 模式 | 哈希 |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | ECDHE | RSA | AES-256 | GCM | SHA-384 |
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | ECDHE | ECDSA | AES-128 | GCM | SHA-256 |
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 | ECDHE | RSA | ChaCha20 | Poly1305 | SHA-256 |
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | DHE | RSA | AES-256 | GCM | SHA-384 |
TLS_RSA_WITH_AES_256_CBC_SHA256 | RSA | RSA | AES-256 | CBC | SHA-256 |
TLS_RSA_WITH_AES_128_CBC_SHA | RSA | RSA | AES-128 | CBC | SHA-1 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | ECDHE | RSA | AES-128 | CBC | SHA-256 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | RSA | RSA | 3DES | CBC | SHA-1 |
三、TLS 1.3 新增的算法/机制
1. 新增密钥交换组(Named Groups)
组 | 类型 | 安全强度 | 说明 |
secp256r1(P-256) | ECDHE | 128位 | 最常用,NIST 标准 |
secp384r1(P-384) | ECDHE | 192位 | 高安全 |
secp521r1(P-521) | ECDHE | 256位 | 极高安全 |
X25519 | ECDHE | 128位 | 1.3 新增主推,Curve25519,高性能恒定时间 |
X448 | ECDHE | 224位 | 1.3 新增,Curve448,高安全 |
ffdhe2048 | DHE | 112位 | 有限域 DH,2048位 |
ffdhe3072 | DHE | 128位 | 有限域 DH,3072位 |
ffdhe4096 | DHE | 152位 | 有限域 DH,4096位 |
X25519MLKEM768 | 混合 | 128位+抗量子 | 后量子混合组(RFC 9180 / draft),X25519 + Kyber-768 |
2. 新增签名算法(证书签名)
算法 | 说明 | TLS 1.2 | TLS 1.3 |
rsa_pkcs1_sha256/384/512 | RSA PKCS#1 v1.5 | 支持 | 支持(但推荐 PSS) |
rsa_pss_sha256/384/512 | RSA-PSS | 扩展 | 支持 主推 |
ecdsa_secp256r1_sha256 | ECDSA P-256 | 支持 | 支持 |
ecdsa_secp384r1_sha384 | ECDSA P-384 | 支持 | 支持 |
ecdsa_secp521r1_sha512 | ECDSA P-521 | 支持 | 支持 |
ed25519 | EdDSA Curve25519 | 不支持 | 支持新增(RFC 8420) |
ed448 | EdDSA Curve448 | 不支持 | 支持新增 |
3. 新增 HKDF 密钥派生
TLS 1.2 | TLS 1.3 | |
密钥派生 | 自定义 PRF:PRF(secret, label, seed) = P_hash(secret, label + seed) | HKDF(RFC 5869):Extract + Expand两阶段 |
密钥分离 | 主密钥 → 多个子密钥(客户端写密钥/服务器写密钥/IV/MAC密钥) | 更清晰的密钥调度:early_secret handshake_secret master_secret,每阶段独立派生 |
哈希灵活性 | PRF 哈希在套件中固定 | HKDF 哈希在套件中指定(SHA-256/SHA-384) |
4. 新增 ChaCha20-Poly1305 为标准套件
四、TLS 1.3 移除的算法/机制
被移除的算法清单
被移除项 | 原因 | 攻击/漏洞 |
RSA 密钥交换 | 无前向保密,服务器私钥泄露可解密历史流量 | — |
静态 ECDH | 无前向保密 | — |
CBC 模式 | 多个 padding oracle 攻击 | BEAST、Lucky13、POODLE |
3DES | 64位块大小,生日攻击 | SWEET32 |
RC4 | 多个密码分析攻击 | Fluhrer-Mantin-Shamir、Barak-Maitra |
MD5 | 碰撞攻击 | — |
SHA-1(签名/PRF) | 碰撞攻击 | SHAttered |
Export 套件 | 故意弱化的 40位/56位加密 | FREAK、Logjam |
匿名 DH(ADH/AECDH) | 无认证,易受中间人 | — |
压缩 | CRIME/BREACH 攻击 | CRIME、BREACH、TIME |
自定义 PRF | 非标准,实现易出错 | — |
重协商(Renegotiation) | 协议复杂度高,多个漏洞 | Renegotiation Attack |
RSA PKCS#1 v1.5 加密 | Bleichenbacher 攻击 | ROBOT |
DSS(DSA)签名 | 弱算法,已被 NIST 弃用 | — |
密码套件数量对比
五、握手流程对比
TLS 1.2 完整握手(2-RTT)
客户端 服务端 │ │ │── ClientHello ─────────────────────→ │ (支持的套件、压缩、扩展) │ │ │←── ServerHello ───────────────────── │ (选中套件) │←── Certificate ───────────────────── │ (服务器证书) │←── ServerKeyExchange ─────────────── │ (DHE/ECDHE 参数,RSA密钥交换时无) │←── ServerHelloDone ───────────────── │ │ │ │── ClientKeyExchange ───────────────→ │ (预主密钥:RSA加密 / DH参数) │── ChangeCipherSpec ────────────────→ │ │── Finished ─────────────────────────→ │ (加密) │ │ │←── ChangeCipherSpec ───────────────── │ │←── Finished ───────────────────────── │ (加密) │ │ │═══ 应用数据 ═════════════════════════ │TLS 1.3 完整握手(1-RTT)
客户端 服务端 │ │ │── ClientHello ─────────────────────→ │ (key_share: 客户端ECDHE公钥) │ (supported_groups, signature_algos) │ │ │ │←── ServerHello ───────────────────── │ (key_share: 服务端ECDHE公钥) │←── EncryptedExtensions ───────────── │ (加密!ALPN、版本等) │←── Certificate ───────────────────── │ (加密!) │←── CertificateVerify ─────────────── │ (加密!证书签名) │←── Finished ──────────────────────── │ (加密!) │ │ │── Finished ─────────────────────────→ │ (加密!) │ │ │═══ 应用数据 ═════════════════════════ │- ServerHello 之后所有消息都加密(1.2 中 Certificate 等是明文)
- 密钥交换参数在 ClientHello/ServerHello 的 key_share 扩展中直接携带,不需要单独的 ServerKeyExchange
- 移除了 ChangeCipherSpec(兼容模式下仍发送但被忽略)
- 1-RTT 即可开始传输应用数据
六、安全特性对比总结
安全特性 | TLS 1.2 | TLS 1.3 |
前向保密(PFS) | 可选(需选 ECDHE/DHE 套件) | 强制 |
加密握手消息 | 仅 Finished 后加密 | ServerHello 后全部加密 |
弱算法 | 包含 RC4/3DES/CBC/MD5/SHA-1 | 全部移除 |
重协商 | 支持(有漏洞) | 移除 |
压缩 | 支持(CRIME 漏洞) | 移除 |
0-RTT | 不支持 | 支持(需重放保护) |
密钥派生 | 自定义 PRF | HKDF 标准 |
降级攻击防护 | 弱(TLS_FALLBACK_SCSV 扩展) | 强(版本协商在扩展中,downgrade protection) |
后量子密码 | 不支持 | 支持混合组(X25519MLKEM768) |
证书透明度 | 可选 | 更易集成(握手加密) |