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