非对称加密:SSL/TLS握手的数学基石

104 阅读3分钟

1. 密钥交换的密码学困局

在未加密的HTTP通信中,攻击者可通过中间人攻击(MITM)窃听或篡改数据。SSL/TLS协议的核心挑战在于:如何在不安全的信道上建立安全通信?这本质上是一个“密钥分发问题”——若使用对称加密(如AES),双方需要共享同一密钥,但密钥本身如何安全传递?

非对称加密的突破性在于公钥与私钥的分离。以RSA算法为例,其数学基础是大质数分解难题:选择两个大质数p和q(通常≥2048位),计算n=p×q,公钥为(n,e),私钥为(n,d)。加密过程为 c=memodnc = m^e \mod n,解密为 m=cdmodnm = c^d \mod n,其中e与d满足 e×d1modφ(n)e×d ≡ 1 \mod φ(n)。攻击者即使截获公钥,也无法在多项式时间内分解n得到私钥。

2. TLS握手:从非对称到对称的密钥传递

在TLS 1.2握手流程中(以RSA密钥交换为例):

  1. ClientHello:客户端发送支持的密码套件列表和随机数(Client Random)

  2. ServerHello:服务器选择密码套件,发送证书和随机数(Server Random)

  3. 密钥交换:客户端生成Pre-Master Secret(46字节随机数),用服务器公钥加密后发送

  4. 密钥派生:双方通过PRF函数将Client Random、Server Random和Pre-Master Secret生成Master Secret,最终导出对称密钥(如AES-256-GCM)

此过程的安全性依赖两个层级:

短期安全性:Pre-Master Secret的加密强度(RSA-2048破解需数千年)

长期安全性:证书私钥的存储安全(HSM硬件模块防护)

3. ECC:更高效的量子前哨站

椭圆曲线密码(ECC)在相同安全强度下,密钥长度仅为RSA的1/6:

| 安全级别 | RSA密钥长度 | ECC密钥长度 |

|----------|-------------|-------------|

| 128-bit  | 3072-bit    | 256-bit     |

| 256-bit  | 15360-bit   | 512-bit     |

以ECDHE密钥交换为例:

  • 服务器生成临时椭圆曲线参数(如secp256r1)和私钥dSd_S

  • 计算公钥QS=dS×GQ_S = d_S×G(G为基点),发送给客户端

  • 客户端生成私钥dCd_C,计算QC=dC×GQ_C = d_C×G,共享密钥为dC×QS=dS×QCd_C×Q_S = d_S×Q_C

Cloudflare实测显示,ECC使TLS握手速度提升15%,移动设备能耗降低22%。

4. 前向保密(PFS):会话密钥的“阅后即焚”

传统RSA密钥交换的隐患:若服务器私钥泄露,所有历史通信均可被解密。PFS通过临时密钥(Ephemeral Key)解决此问题:

DHE_RSA:每次会话生成新Diffie-Hellman参数

ECDHE_RSA:结合ECC的高效性与临时密钥特性

TLS 1.3已强制要求PFS,并废除静态RSA密钥交换。某银行在2017年升级至ECDHE后,即使遭遇APT攻击,历史交易数据仍未被破解。

5. 实战中的风险与防御

Logjam攻击(2015): 攻击者降级TLS至512位出口级DH参数,通过预计算破解。防御措施:禁用DHE导出级密码套件,使用≥2048位DH参数

ROBOT攻击(2017): RSA填充漏洞导致选择明文攻击。解决方案:启用RSA-PSS填充模式,禁用PKCS#1 v1.5