当前位置: 首页 > news >正文

SSL/TLS 的演进

在学习SSL和TLS握手过程中,书上(计算机网络:自顶向下的方法)和博客文章,总会有一些出入和矛盾点,让我摸不着头脑,所以我通过 AI 对 SSL 和 TLS 各个版本握手模式进行了总结,希望帮到大家

SSL/TLS 的演进史本质上是一部“安全性”与“性能”不断博弈的进化史。为了方便记忆和面试,我将其总结为版本演进密钥交换演进加密模式演进三个维度。


1. 协议版本演进:从诞生到“大繁至简”

版本发布年份地位与现状核心改进 / 变化
SSL 1.0/2.01994/95已废弃初始尝试,存在严重设计缺陷(如中间人攻击)。
SSL 3.01996已废弃互联网安全的基础。后因 POODLE 漏洞被彻底停用。
TLS 1.01999已废弃SSL 3.1 的升级版,标准化的开始。
TLS 1.12006逐渐退出增强了防御 CBC 模式攻击的能力(引入显式 IV)。
TLS 1.22008当今主流里程碑版本。引入 SHA-256,支持AEAD模式,是目前应用最广的版本。
TLS 1.32018未来标准大刀阔斧的改革。砍掉废旧算法,1-RTT 握手,强制前向安全,安全性与速度质变。

2. 密钥交换模式演进:从“传输”到“协商”

这是决定“对称密钥如何产生”的关键:

  • RSA 时代(TLS 1.2 以前的主流):

    • 机制:客户端生成密钥,用服务器公钥加密发送。

    • 槽点:不支持前向安全 (Forward Secrecy)。一旦服务器私钥泄露,历史记录全部玩完。

  • DH / DHE 时代(过渡期):

    • 机制:双方交换参数计算密钥,不传输密钥本身。

    • 槽点:纯 DH 计算量巨大,导致服务器 CPU 负载极高。

  • ECDHE 时代(TLS 1.2 主流 & TLS 1.3 唯一):

    • 机制:椭圆曲线版的 DH。

    • 优势:前向安全 + 性能极佳。它是目前 HTTPS 的标配方案。


3. 加密与完整性模式演进:从“分两步”到“合一”

这是你之前看书(MtE)和学到 AEAD 产生矛盾的地方:

阶段一:MtE (MAC-then-Encrypt) —— 《自顶向下》教材版

  • 逻辑:1. 算 MAC;2. 填充 Padding;3. 加密。

  • 痛点:容易受到 Padding Oracle 攻击。接收方必须解密后才能验证 MAC,给了黑客通过报错时间差猜测明文的机会。

阶段二:EtM (Encrypt-then-MAC) —— 修补版

  • 逻辑:1. 加密;2. 对密文算 MAC。

  • 改进:接收方先看 MAC,不对直接丢弃,不给黑客解密报错的机会。

阶段三:AEAD (认证加密) —— 现代版

  • 代表:AES-GCM, ChaCha20-Poly1305。

  • 逻辑:加密的同时计算认证标签(Tag)。

  • 改进:彻底抛弃独立的 MAC 密钥。不仅更安全,且硬件加速效率极高,不再需要复杂的“切四片密钥”逻辑。


4. 总结:现在的 TLS 1.3 剩下了什么?

为了彻底安全,TLS 1.3 像一个“洁癖者”,把不干净的、慢的全部砍掉了:

  1. 砍掉 RSA 密钥交换:强制使用 ECDHE,保证每一条流量都具备前向安全。

  2. 砍掉所有非 AEAD 算法:不再支持分步的 MAC 计算,只有 AES-GCM 等高效 AEAD。

  3. 砍掉握手往返:从 2-RTT 压缩到 1-RTT,甚至 0-RTT(重连)。

最经典的TLS 1.2 RSA + CBC(MtE)模式,最能体现“公钥解密、私钥解密”和“分层校验”的教科书逻辑。而现代工业界(TLS 1.3)为了性能和安全,已经把这些逻辑封装或合并了。

http://www.cnnetsun.cn/news/1986616.html

相关文章:

  • OpCore-Simplify深度解析:智能化EFI配置如何重塑黑苹果体验
  • Mysql--基础知识点--104--大表添加字段
  • 局域网快传大文件之Everything
  • SpringBoot+Vue基于爬虫的在线新闻聚合平台源码+论文
  • SQL如何高效统计分类下的多项指标_善用CASE WHEN与SUM聚合
  • 从科研计算到并行加速:在CodeBlocks中为Fortran项目配置OpenMP的两种方法实测
  • 【2026奇点智能技术大会权威内参】:AGI人才争夺战已打响,HR必须掌握的5大精准匹配模型与实时评估框架
  • 深度解析大气层整合包:从架构设计到实战应用的全方位指南
  • C++实际开发之泛型编程(模版编程)
  • CodeBlocks重装后编译器配置失效?保姆级修复与手动链接MinGW教程
  • Go语言怎么做地理围栏_Go语言地理位置计算教程【指南】
  • ROS2机械臂控制实战:用NMPC实现高精度轨迹跟踪(附避坑指南)
  • 赛元SC95F8617触摸库实战:从电机干扰到人体检测,我的按摩椅项目避坑实录
  • Android系统开发与优化:从基础到高级实践
  • C++运行时多态深度解析:从原理到实践
  • 尝试 Gemini CLI 替代Claude,Jeecg skills基本通畅,但遇致命问题
  • 基于Ollama本地部署RVC相关大语言模型辅助工具链
  • CSS如何通过BEM提升质量_应用命名规范减少Bug产生
  • RTKLIB开发者笔记:如何为自定义RTCM3消息编写解析模块?
  • 从RTL到GDSII:UPF文件在DC综合与ICC布局布线中的“变形记”与协同要点
  • ESP32按键防抖实战:用硬件消抖电路+软件延时解决LED闪烁问题
  • 2025届毕业生推荐的六大降重复率网站解析与推荐
  • 别再手动import了!用unplugin-auto-import插件5分钟搞定Vue3组件自动导入
  • 如何实现 Claude Code 和 Codex 等 Agent CLI 的自动重试
  • 保姆级教程:用ESP8266和Arduino IDE搞定华为云IOTDA命令下发与响应(附完整代码)
  • 避坑指南:LabVIEW条码识别常见错误与图像质量优化(从模糊到清晰解码)
  • B站M4S转MP4终极指南:5秒解锁你的缓存视频宝藏
  • html标签怎么表示用户输入_kbd标签键盘快捷键标注【介绍】.txt
  • 从Altium Designer转KiCad 7.0:一个硬件工程师的实战避坑与效率提升指南
  • AD9361上电后必做的10项校准,手把手教你避开射频性能的坑