23 TLS 1.3 新特性
-
总结
1、为了兼容 1.1、1.2 等老协议,TLS1.3 会 伪装 成 TLS1.2,新特性在 扩展 里实现
2、1.1、1.2 在实践中发现了很多安全隐患,所以 TLS1.3 大幅度 删减了加密算法,只保留了 ECDHE、AES、ChaCha20、SHA-2 等极少数算法,强化了安全;
3、TLS1.3 也 简化了握手过程,完全握手只需要一个消息往返,提升了性能
三个主要改进目标
TLS1.2 - 2008 年出现,在性能和安全上缺陷
TLS1.3 的三个主要改进目标:兼容、安全与性能:
-
最大化兼容性
保持现有的记录格式不变,通过 伪装TLS1.2 来实现兼容;在记录末尾添加一系列的 扩展字段 来增加新的功能
【区分:只要是 TLS1.3 协议,握手的
Hello
消息后面就必须有supported_versions
扩展,它标记了 TLS 的版本号】 -
强化安全
修补了加密算法的弱点不安全因素
1、伪随机数函数由 PRF 升级为 HKDF
2、明确禁止在记录协议里使用压缩
3、废除了 RC4、DES 对称加密算法
4、废除了 ECB、CBC 等传统分组模式
5、废除了 MD5、SHA1、SHA-224 摘要算法
6、废除了 RSA、DH 密钥交换算法和许多命名曲线
算法精简后,TLS1.3 里只有 5 个套件
-
提升性能
TLS1.2 中的握手,多花两个消息往返(2-RTT),甚至更长时间的延迟
因为密码套件大幅度简化 – TLS1.3 压缩了以前的
Hello
协商过程,删除了Key Exchange
消息,把握手时间减少到了1-RTT
TLS1.2 和TLS 1.3的握手对比
解析:
客户端 在 Client Hello
息里直接用 supported_groups
带上支持的曲线,比如 P-256、x25519,用 key_share
带上曲线对应的客户端公钥参数,用 signature_algorithms
带上签名算法。
服务器 收到后在这些扩展里选定一个曲线和参数,再用key_share
扩展返回服务器这边的公钥参数,就实现了双方的密钥交换,后面的流程就和 1.2 基本一样了。
可以看下抓包:
分析:
1、客户端发出:可以关注下扩展
2、服务器返回:
– 客户端和服务器就拿到了四个共享信息:Client Random
和Server Random
、Client Params
和Server Params
,两边就可以各自用 ECDHE 算出Pre-Master
,再用 HKDF 生成主密钥Master Secret
–
3、算出主密钥后,服务器立刻发出Change Cipher Spec
消息,比 TLS1.2 提早进入加密通信,后面的证书等就都是加密的了,减少了握手时的明文信息泄露
4、比TLS1.2多一个Certificate Verify
:用服务器的私钥把前面的曲线、套件、参数等握手数据加了签名,强化了身份认证和和防窜改