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

计算机网络 HTTPS 全流程

HTTPS 通信的全流程(特别是 TLS 握手阶段)中使用的三个随机数是保障安全性的核心设计,不能随意减少。每个随机数都承担着至关重要的安全职责。下面详细解释 HTTPS 全流程,并重点分析这三个随机数的作用和必要性:


🔐 HTTPS 全流程详解 (以 TLS 1.2 为例)

1. TCP 三次握手建立连接
  • 客户端向服务器发起 TCP 连接(SYN)。
  • 服务器响应 (SYN-ACK)。
  • 客户端确认 (ACK)。此时建立了 TCP 通道,但数据仍是明文!
2. TLS 握手 (安全通道建立)

这才是 HTTPS 的核心安全阶段,涉及 三个关键随机数

步骤操作方关键操作与信息三个随机数的角色
1️⃣Client发送 **ClientHello**
消息:
- 支持的 TLS 版本、加密套件列表
- **Client Random**
(客户端随机数,明文)
产生第一个随机数:**Client Random**
2️⃣Server响应 **ServerHello**
消息:
- 选定 TLS 版本和加密套件
- **Server Random**
(服务端随机数,明文)
发送 **Certificate**
(服务器数字证书)
可能请求客户端证书 (双向认证)
发送 **Server Key Exchange**
(可选,如 DH 参数)
发送 **Server Hello Done**
产生第二个随机数:**Server Random**
3️⃣Client验证服务器证书 (有效性、域名匹配、CA 信任链)
生成 **Pre-Master Secret**
(预备主密钥)
服务器公钥加密 **Pre-Master Secret**
**Encrypted Pre-Master Secret**

发送 **Client Key Exchange**
(包含加密的预备主密钥)
可能发送客户端证书
发送 **Change Cipher Spec**
(准备切加密)
发送 **Finished**
(加密的握手摘要,验证)
产生第三个随机数:**Pre-Master Secret**
4️⃣Server服务器私钥解密 **Encrypted Pre-Master Secret**
→ 获取 **Pre-Master Secret**

发送 **Change Cipher Spec**
(准备切加密)
发送 **Finished**
(加密的握手摘要,验证)
服务端也获取 **Pre-Master Secret**
5️⃣双方客户端和服务端各自独立计算出相同的 **Master Secret**
(主密钥) 和 会话密钥
Master Secret = PRF(Pre-Master Secret, "master secret", Client Random + Server Random)

会话密钥 = PRF(Master Secret, "key expansion", Client Random + Server Random)
三个随机数共同生成最终密钥
3. 加密数据传输 (应用层 HTTP 通信)
  • 双方使用协商好的会话密钥进行对称加密通信。
  • HTTP 请求和响应内容全部被加密传输 (application_data)。
4. 连接关闭
  • 任何一方发送 **close_notify** 警报消息,通知安全关闭。
  • TCP 四次挥手断开连接。

🔢 三个随机数的安全意义与不可替代性

随机数产生方作用能否减少?为什么?
**Client Random**客户端绑定本次会话的唯一性
参与 Master Secret
计算 → 保障前向安全
** 不可减少!**
缺少它:攻击者可能重放旧握手或伪造会话。客户端无源参与密钥生成,安全降级。
**Server Random**服务端绑定本次会话的唯一性
参与 Master Secret
计算 → 保障前向安全
** 不可减少!**
缺少它:服务端无源参与密钥生成。若服务端私钥泄露,攻击者可解密所有历史流量(破坏前向安全)。
**Pre-Master Secret**客户端真正的密钥核心种子!
结合前两个随机数生成最终加密密钥
通过非对称加密传输 → 保障机密性
保障会话密钥的前向安全性
** 不可减少!**
没有它意味着没有密钥协商!
直接使用 Client/Server Random
生成密钥? → 随机数公开,密钥极易被破解!

前向安全性 (Forward Secrecy): 即使攻击者长期保存加密流量事后破解服务器私钥,也无法解密历史会话。因为每次会话的 Pre-Master Secret 是临时生成的,且与随机数混合计算后销毁。


🔐 为什么必须三个随机数?安全设计本质

  1. 双重随机绑定会话(**Client Random + Server Random**:
    • 防重放攻击:确保握手数据包是新鲜的、针对本次连接的。
    • 会话唯一性:即使同一客户端短时间多次连接,密钥也不同(因随机数变化)。
    • 参与主密钥生成:增加熵值,让 Master Secret 更不可预测。
  2. 临时密钥种子(**Pre-Master Secret**:
    • 核心机密性:这是唯一需要通过非对称加密(服务器公钥)保护传输的秘密。
    • 前向安全基石:每次会话独立生成,用完即弃。即使服务器私钥未来泄露,历史会话仍安全。
  3. 三者结合生成强密钥(**PRF 函数**:
    • Master Secret = f(Pre-Master Secret, Client Random, Server Random)
    • 最终 会话密钥 = f(Master Secret, Client Random, Server Random)
    • 公开参数(**Client/Server Random**) + 秘密种子(**Pre-Master**) → 安全的对称密钥

⚙️ 性能优化与演进(TLS 1.3)

虽然不能减少随机数,TLS 1.3 协议通过精简握手大幅提升效率

  1. 1-RTT 握手:客户端在 ClientHello猜测服务端支持的密钥交换参数,并提前生成 Client Random**Key Share**(包含用服务端公钥加密的临时公钥,取代了 Pre-Master Secret 的显式传输)。
  2. 服务端响应:在 ServerHello 中确认参数并发送自己的 **Key Share**,用客户端公钥加密的临时公钥。
  3. 密钥生成:双方通过 ECDH 协议,结合 Client Random, Server Random各自的临时私钥/公钥直接计算得到相同的 **Pre-Master Secret**(无需显式传输) → 最终密钥。
  • 核心改进:隐式生成 Pre-Master Secret,避免显式加解密开销。
  • 随机数仍是三个!Client Random + Server Random + 双方临时密钥对中的秘密值(相当于增强版**Pre-Master**

✅ 结论:三个随机数缺一不可!

  • 设计目的:解决密钥交换的机密性、会话唯一性、抗重放、前向安全等核心安全问题。
  • 减少代价:破坏前向安全、易遭密钥破解或会话重放攻击 ⚠️。
  • 优化方向:不是减少随机数,而是优化其生成、交换和计算效率(如 TLS 1.3)。

简言之:三个随机数是 HTTPS 信任链条的“安全三角支架”,强行拆除任何一条腿,都会导致整个通信暴露在风险之中! 🔐

http://www.dtcms.com/a/335668.html

相关文章:

  • p5.js 3D 形状 “预制工厂“——buildGeometry ()
  • 【位运算】查询子数组最大异或值|2693
  • 图灵完备(Turing Complete)免安装中文版
  • 关于pygsp引发的一系列问题和实例小demo
  • ​​Vue 3 开发速成手册
  • 裸机框架:按键模组
  • macos 安装nodepad++ (教程+安装包+报错后的解决方法)
  • AI证书怎么选
  • 交叉编译 手动安装 SQLite 库 移植ARM
  • 基于Vue + Node能源采购系统的设计与实现/基于express的能源管理系统#node.js
  • JavaScript 性能优化实战大纲
  • 记SpringBoot3.x + Thymeleaf 项目实现(MVC架构模式)
  • .NET 中的延迟初始化:Lazy<T> 与LazyInitializer
  • 【Java后端】MyBatis-Plus 原理解析
  • Unity进阶--C#补充知识点--【Unity跨平台的原理】了解.Net
  • Linux | i.MX6ULL网络通信-套字节 UDP(第十八章)
  • 【牛客刷题】后缀子串字母统计:O(n)高效算法详解
  • python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
  • 数学建模 15 逻辑回归与随机森林
  • 大上墨水屏显示器Paperlike253 Mac 特别版 使用体会
  • MySQL数据库初识
  • 黑马java八股文全集
  • AUTOSAR ARXML介绍
  • 数据结构(排序篇)——七大排序算法奇幻之旅:从扑克牌到百亿数据的魔法整理术
  • C++编程实战:高效解决算法与数据结构问题
  • 【CV 目标检测】Fast RCNN模型②——算法流程
  • 【递归、搜索与回溯算法】记忆化搜索
  • 图解希尔排序C语言实现
  • 分治-归并-315.计算右侧小于当前元素的个数-力扣(LeetCode)
  • Java基础 8.17