迪菲-赫尔曼 密钥交换算法
p,g 通信双方已知,p是质数,g是p的 primative root(什么鬼 :), 0< g <p
Alice: 取一随机数a(私钥), 算 A=g^a mod p, 发给 Bob
Bob: 取一随机数b, 算 B=g^b mod p, 发给 Alice
然后两边算共享密钥:
Alice: S1 = B^a mod p
Bob: S2 = A^b mod p
数学上可证明: S1 = S2
p, a, b 应尽量大,比如150位,200位, g通常只使用2,3或5
Ellipic Curve
椭圆曲线算法: y^2 = x^3 + ax + b
Ellipic Curve Diffie-Hellman
已知椭圆曲线的G(generator),
Alice的私钥: dA, 公钥 QA = dA * G, Bob 私钥:dB, 公钥:QB = dB * G
互换公钥后:
Alice 计算: dA * QB
Bob 计算: dB * QA
可证明二者相等: dA * dB * G = dB * dA * G
计算的结果是一个点(px, py)的坐标, shared secret S = px