· 抽象代数(区块链密码学向)

6 · 现代密码学协议专题

一个数学难题怎么变成可用的安全协议?从 DH 密钥交换到 KZG 多项式承诺,串起群、域、有限域与椭圆曲线的完整链条。

群、域、模运算、有限域、椭圆曲线这些工具凑齐后,就能串成真实协议。本节回答一个问题:一个数学难题,怎么变成可用的安全?


一、所有安全的根:单向难题

公钥密码学都建在「正向容易、反向极难」的问题上:

难题正向(快)反向(难)用于
大数分解两质相乘分解 NRSA
离散对数 DLP算 $g^x$求 xDH、ElGamal
椭圆曲线 DLP算 $x\cdot G$求 xECDSA、BLS

这些难题都是前面学的群/域结构里「生成元反推指数」的困难。

二、Diffie–Hellman 密钥交换

两人在公开信道商定密钥:

  1. 公开群 g\langle g\rangle。Alice 选 a 发 gag^a;Bob 选 b 发 gbg^b
  2. 双方各自算 (gb)a=(ga)b=gab(g^b)^a=(g^a)^b=g^{ab}——这就是共享密钥。
  3. 窃听者只看到 g,ga,gbg,g^a,g^b,要算 gabg^{ab} 得先解离散对数——算不出。换成椭圆曲线点就是 ECDH。

三、零知识证明(ZK)一眼看懂

ZK 让你证明「我知道一个秘密」而不泄露秘密本身。三个性质:完备性(真话能证)、可靠性(假话难蒙混)、零知识(验证者学不到秘密)。现代 zk-SNARK 把计算转化为有限域上的多项式约束,再用承诺压缩。

四、KZG 多项式承诺(串起所有工具)

KZG 是 PLONK、以太坊 Danksharding 的核心,它同时用到了你学的所有东西:

  1. 把数据编成有限域上的多项式 f(x)f(x)
  2. 用椭圆曲线点「承诺」整个多项式:C=f(τ)GC=f(\tau)\cdot G(这是椭圆曲线标量乘)。
  3. 要证明 f(z)=vf(z)=v,提供一个简短证据,验证方用配对检查等式成立。

整个过程体现了本章主线:多项式(环)+ 有限域 + 椭圆曲线群 + 配对。

五、从难题到协议的通用套路

代数结构单向难题承诺/加密/签名协议\text{代数结构} \to \text{单向难题} \to \text{承诺/加密/签名} \to \text{协议}

看懂这条主线,你再读 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)

七、动手想一想

  1. DH 为什么能抵御窃听,但抵不住中间人攻击?
  2. 为什么说 KZG 「用到了本章几乎所有知识点」?
  3. 量子计算对哪些难题构成威胁?

答案:(1) 窃听者解不了离散对数,但中间人可分别与双方建密钥,所以需要身份认证(签名/证书)。(2) 它要多项式(环)、有限域、椭圆曲线标量乘、配对,几乎用上了所有基础工具。(3) Shor 算法能高效解大数分解与离散对数,威胁 RSA 与 ECC;这正是后量子密码(格密码等)兴起的原因。


全章完。你现在拥有了从群到现代协议的完整链条,足以支撑你读懂主流区块链密码学的协议设计。