Appearance
“博客是写给别人看的,笔记是写给自己看的。”
Hello,Curve25519
Curve25519 是一个为 Diffie-Hellman 密钥交换协议而提出的椭圆曲线,其运算在
其中
我们知道,DH 密钥交换协议是定义在有限群上的,那么 Curve25519 上怎么定义一个群呢?考虑方程
在一般情况下有三个解
Associative?
这里简述一个初等的方法,证明上述运算结合,从而可以作为群运算。
首先证明 grid theorem ,这个定理叙述如下:
三条直线
和三条直线 两两相交得到九个交点。若一个三次曲线经过了九个交点中的八个,那么它必然经过剩下的那个交点。
我们知道,三次曲线可以用关于
现在,借助 grid theorem,我们可以证明
遗憾的是,以上证明只对九点两两不同成立。如果有重复的点(例如
Naive Implementation
想要实现这个群的运算,我们可以直接用
联立
由韦达定理,
事实证明,这一定义在
按照以上定义,我用 Racket 写了一个 朴素的实现 ,包括 ECDH 和 ECDSAby 2024-11-11 。这个实现尚不能抵抗 timing attack。
测试 ECDH
(let* ([u (generate-key)]
[v (generate-key)]
[k1 (X25519 (car u) (cdr v))]
[k2 (X25519 (car v) (cdr u))])
(assert (CV-= k1 k2))
(printf "Established shared key ~a\n" k1))
测试 ECDSA
(let* ([msg (random-natural Q)]
[key (generate-key)]
[sign (ED25519-sign msg (cdr key))]
[success? (ED25519-verify msg sign (car key))])
(assert success?)
(display "Signature verified!\n"))
Enhanced Implementation
待续...
后记 - 我们为什么需要 DH
因为 DH 可以在无需交互的情况下实现前向保密,这在 Signal 或者 Matrix 这样的加密聊天软件是重要的。
参考文献
- Implementing Curve25519/X25519: A Tutorial on Elliptic Curve Cryptography
- Curve25519 - Wikipedia
- Elliptic Curve Cryptography: ECDH and ECDSA
- The grid theorem
- The elliptic curve group law
- An elementary linear-algebraic proof without computer-aided arguments for the group law on elliptic curves
- Pappus’s theorem and elliptic curves - Terry Tao