6 · 现代密码学协议专题
一个数学难题怎么变成可用的安全协议?从 DH 密钥交换到 KZG 多项式承诺,串起群、域、有限域与椭圆曲线的完整链条。
群、域、模运算、有限域、椭圆曲线这些工具凑齐后,就能串成真实协议。本节回答一个问题:一个数学难题,怎么变成可用的安全?
一、所有安全的根:单向难题
公钥密码学都建在「正向容易、反向极难」的问题上:
| 难题 | 正向(快) | 反向(难) | 用于 |
|---|---|---|---|
| 大数分解 | 两质相乘 | 分解 N | RSA |
| 离散对数 DLP | 算 $g^x$ | 求 x | DH、ElGamal |
| 椭圆曲线 DLP | 算 $x\cdot G$ | 求 x | ECDSA、BLS |
这些难题都是前面学的群/域结构里「生成元反推指数」的困难。
二、Diffie–Hellman 密钥交换
两人在公开信道商定密钥:
- 公开群 。Alice 选 a 发 ;Bob 选 b 发 。
- 双方各自算 ——这就是共享密钥。
- 窃听者只看到 ,要算 得先解离散对数——算不出。换成椭圆曲线点就是 ECDH。
三、零知识证明(ZK)一眼看懂
ZK 让你证明「我知道一个秘密」而不泄露秘密本身。三个性质:完备性(真话能证)、可靠性(假话难蒙混)、零知识(验证者学不到秘密)。现代 zk-SNARK 把计算转化为有限域上的多项式约束,再用承诺压缩。
四、KZG 多项式承诺(串起所有工具)
KZG 是 PLONK、以太坊 Danksharding 的核心,它同时用到了你学的所有东西:
- 把数据编成有限域上的多项式 。
- 用椭圆曲线点「承诺」整个多项式:(这是椭圆曲线标量乘)。
- 要证明 ,提供一个简短证据,验证方用配对检查等式成立。
整个过程体现了本章主线:多项式(环)+ 有限域 + 椭圆曲线群 + 配对。
五、从难题到协议的通用套路
看懂这条主线,你再读 ECDSA、BLS、PLONK、Bulletproofs 的白皮书时,就能认出同一套积木。
六、Python 代码(DH 演示)
p = 0xFFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A63A3620FFFFFFFFFFFFFFFF
g = 2
import secrets
a = secrets.randbelow(p) # Alice 私钥
b = secrets.randbelow(p) # Bob 私钥
A, B = pow(g, a, p), pow(g, b, p) # 公开传输
key_alice = pow(B, a, p)
key_bob = pow(A, b, p)
print("共享密钥一致?", key_alice == key_bob)
七、动手想一想
- DH 为什么能抵御窃听,但抵不住中间人攻击?
- 为什么说 KZG 「用到了本章几乎所有知识点」?
- 量子计算对哪些难题构成威胁?
答案:(1) 窃听者解不了离散对数,但中间人可分别与双方建密钥,所以需要身份认证(签名/证书)。(2) 它要多项式(环)、有限域、椭圆曲线标量乘、配对,几乎用上了所有基础工具。(3) Shor 算法能高效解大数分解与离散对数,威胁 RSA 与 ECC;这正是后量子密码(格密码等)兴起的原因。
全章完。你现在拥有了从群到现代协议的完整链条,足以支撑你读懂主流区块链密码学的协议设计。