1. HTTPS密钥交换的数学魔法
第一次接触HTTPS密钥交换时,我也被这个"魔术"惊呆了——两个从未谋面的陌生人,在公开场合下交谈,居然能神不知鬼不觉地商量出一个只有他们知道的秘密。这就像两个特工在拥挤的咖啡馆里,当着所有人的面交换情报,却没人能破解他们的暗号。
1.1 日常生活中的密钥交换
想象这样一个场景:你和朋友Alice想在一个公开的聊天群里约定一个秘密数字,但不想让群里的其他人知道。你们可以这样做:
- 你们先公开约定一个基础数字,比如5
- 你私下选一个秘密数字(比如3),计算5×3=15,然后在群里发"15"
- Alice私下选另一个秘密数字(比如7),计算5×7=35,然后在群里发"35"
- 你收到35后,用自己的秘密数字3计算35×3=105
- Alice收到15后,用自己的秘密数字7计算15×7=105
神奇的事情发生了!你们都得到了105这个相同的数字,而群里的其他人虽然看到了15和35,却无法推算出105。这就是迪菲-赫尔曼密钥交换(Diffie-Hellman)的简化版。
注意:实际HTTPS使用的数学运算要复杂得多,这个例子只是为了便于理解基本原理。
1.2 从简单乘法到复杂数学
现实中HTTPS使用的不是简单的乘法,而是基于离散对数问题的数学运算。具体来说,它使用以下组件:
- 一个大质数p(通常至少2048位)
- 一个生成元g(g的某些幂次模p能生成一个大循环群)
- 双方各自选择私钥:
- 客户端私钥a(随机数)
- 服务器私钥b(随机数)
- 双方计算并交换公钥:
- 客户端公钥A = g^a mod p
- 服务器公钥B = g^b mod p
- 最终双方计算共享密钥:
- 客户端计算s = B^a mod p = (g^b)^a mod p = g^(ab) mod p
- 服务器计算s = A^b mod p = (g^a)^b mod p = g^(ab) mod p
这个过程的精妙之处在于,即使攻击者截获了g、p、A和B,由于离散对数问题的计算复杂度,他们也无法在合理时间内计算出a或b,因此无法得到共享密钥s。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. TLS握手中的密钥交换实战
2.1 完整的TLS 1.2握手流程
让我
