HTTPS

HTTPS是什么?原理是什么?用公钥加密为什么不能用公钥解密?

DNS,中间人攻击,CA,TLS,HTTPS

一、TSL 握手为什么需要前两个随机数?

TLS 握手过程中使用的 3 个随机数(Client Random、Server Random、Pre-Master Secret)是为了增强安全性,具体原因如下:

1. 三个随机数的来源

Client Random:客户端生成,发送在 Client Hello 消息中。

Server Random:服务器生成,发送在 Server Hello 消息中。

Pre-Master Secret:由客户端生成,通过服务器的公钥加密后发送(在 Client Key Exchange 中)。

2. 为什么需要 3 个随机数?

(1) 防止重放攻击(Replay Attack)

如果仅使用 Pre-Master Secret,攻击者可能截获旧的握手消息并重放,导致密钥被复用。

Client Random + Server Random 确保每次握手生成的密钥唯一(即使 Pre-Master Secret 相同,最终密钥也不同)。

(2) 前向保密(Forward Secrecy)

在支持 ECDHE 等密钥交换算法时,Pre-Master Secret 是临时生成的,即使长期私钥泄露,过去的通信也无法解密。

三个随机数共同参与密钥计算,确保会话独立性。

(3) 防止预测密钥

如果仅依赖 1 个随机数,攻击者可能通过暴力破解或伪随机数漏洞推测密钥。

多随机数混合(Client + Server + Pre-Master)大幅增加熵值,使密钥不可预测。

(4) 兼容不同密钥交换算法

对于 RSA 密钥交换:Pre-Master Secret 由客户端生成并加密传输。

对于 DH/ECDHE 密钥交换:Pre-Master Secret 由双方协商生成。

无论哪种方式,最终密钥均需结合三个随机数计算(通过 PRF 函数)。

3. 最终密钥如何生成?

TLS 使用 伪随机函数(PRF) 将三个随机数混合,生成以下密钥:

Master Secret = PRF(Pre-Master Secret, "master secret", Client Random + Server Random)

Master Secret 再衍生出实际加密密钥(如 AES 密钥、HMAC 密钥等)。

由于 Client/Server Random 参与计算,即使 Pre-Master Secret 相同,每次握手的密钥也不同。

4. TLS 1.3 的优化

在 TLS 1.3 中:

移除了 RSA 密钥交换(仅支持 ECDHE),Pre-Master Secret 由双方临时协商。

密钥计算仍依赖 Client Random + Server Random,但握手更高效(1-RTT)。

总结

随机数 作用
Client Random 标识客户端唯一性,防止重放攻击。
Server Random 标识服务器唯一性,增强密钥随机性。
Pre-Master 提供密钥交换的核心机密,前向保密(ECDHE)或静态加密(RSA)依赖于此。

二、CA 如何保障服务器公钥的安全性?避免中间人攻击

1. 证书签名的基本原理

CA(证书颁发机构)在签发证书时,会:

  1. 计算证书的哈希值(如使用 SHA-256)。
  2. 用CA的私钥对该哈希值加密,生成 数字签名
  3. 将签名附加到证书中,形成完整的数字证书。

客户端验证时:

  • 用CA的公钥解密签名,得到原始哈希值。
  • 重新计算证书的哈希值,比对是否一致。
  • 如果不一致,说明证书被篡改(如公钥、域名等信息被修改)。

因此说,虽然中间人可以获取服务器的公钥和其他信息,但是它不能对其修改,因为一旦中间人修改了这些信息,客户端在验证时,计算出的哈希值和 CA 附加的数字签名(也即 CA 计算出的哈希值)不一致。

posted @ 2025-05-20 20:25  光風霽月  阅读(44)  评论(0)    收藏  举报