Caloogy 文章
English

同源密码与 SIKE 之死:一台笔记本一小时破解 NIST 候选算法

日期
2026 年 2 月 21 日
系列
密码学
阅读
4 分钟
主题
IsogenySIDHSIKECSIDH

一句话版本

同源(isogeny)是椭圆曲线之间"保持加法的映射",即一个由有理函数给出的群同态。在一张由曲线和同源构成的巨大网络里,已知起点和终点、找出中间的路,被认为连量子计算机都难解,于是诞生了同源密码。 其中最著名的 SIKE 进入了 NIST 后量子标准化的第四轮,却在 2022 年 7 月被 Castryck 和 Decru 用一台普通电脑约一小时破解。破解用的是一条 1997 年的定理,和量子计算毫无关系。

全文分三层:

  1. 通俗理解:在曲线的迷宫里走路
  2. 实际用处:SIKE 的兴衰时间线,以及同源密码的现状(CSIDH、SQIsign)
  3. 数学原理:同源是什么、Vélu 公式、SIDH 的结构、为什么泄露的额外信息是致命的,附 F13\mathbb{F}_{13} 上的手算例子

第一层:通俗理解

1.1 曲线的迷宫

在椭圆曲线里,我们在一条曲线上"走 kk 步"。同源密码换了一个舞台:

难题:给你起点房间和终点房间,问中间的路怎么走。

1.2 像 Diffie–Hellman 一样交换密钥

SIDH(超奇异同源 Diffie–Hellman)的思路和Diffie–Hellman与离散对数很像:

  1. Alice 和 Bob 从同一个公共房间出发,各自秘密地走一条路;
  2. 各自公布终点房间;
  3. 再从对方的终点出发,按自己的秘密路线"再走一遍";
  4. 两人到达同一个房间(严格说是同构的曲线),这就是共享密钥。

问题在第 3 步:为了让对方能"按自己的路线再走一遍",SIDH 必须额外公开一些辅助点(自己路线把某些点送到了哪里)。正是这些辅助点,最终葬送了整个方案。

1.3 为什么曾经被看好


第二层:实际用处

2.1 SIKE 的兴衰

2006Charles–Goren–Lauter提出基于同源图的哈希函数2011Jao 和 De Feo 提出SIDH2017SIKE 提交 NIST后量子标准化2019Cloudflare 和 Google在 TLS 中试验 SIKE混合密钥交换2022-07NIST 第三轮结束,SIKE进入第四轮备选2022-07数周后,Castryck 和Decru公布攻击,单核约一小时破解最小参数集2022-08Maino–Martindale、Robert相继改进,所有参数集均在多项式时间内被攻破SIDH / SIKE 简史

攻击的核心工具是 Ernst Kani 1997 年关于"把两条椭圆曲线粘成一个阿贝尔曲面"的定理。一个代数几何的老结果,在 25 年后突然变成了一把钥匙。

2.2 教训

2.3 同源密码还活着吗

活着。攻击只针对 SIDH 那种"公开辅助点"的设计:

方案 状态
CSIDH(2018) 不公开辅助点,未受此次攻击影响;但有亚指数量子攻击(Kuperberg 算法),参数要取得较大
SQIsign(2020) 基于同源的签名,签名和公钥都非常短,进入了 NIST 额外签名征集的后续轮次;近年的改进版(如利用 Kani 定理本身的 SQIsign2D)反而把"攻击工具"变成了"构造工具"

第三层:数学原理

3.1 同源是什么

椭圆曲线 E1E_1 到 E2E_2 的同源是一个非常数的映射 ϕ:E1→E2\phi: E_1 \to E_2,满足:

可以证明这样的映射自动是群同态:ϕ(P+Q)=ϕ(P)+ϕ(Q)\phi(P + Q) = \phi(P) + \phi(Q)。它的核 ker⁡ϕ\ker\phi 是 E1E_1 的一个有限子群。

Vélu 公式:反过来,给定 E1E_1 的任意有限子群 GG,都存在一个以 GG 为核的同源,并且有显式公式算出目标曲线 E2E_2,记作 E1/GE_1 / G。这和抽象代数里"给定正规子群 NN,有商群 G/NG/N 和自然同态 G→G/NG \to G/N"完全类似。

Tate 定理:在 Fq\mathbb{F}_q 上,E1E_1 和 E2E_2 之间存在同源,当且仅当它们的点数相同。

3.2 手算例子:一个 2-同源

对形如 E:y2=x3+ax2+bxE: y^2 = x^3 + ax^2 + bx 的曲线,点 (0,0)(0, 0) 的阶是 22。以子群 {O,(0,0)}\{O, (0, 0)\} 为核的同源有一个简洁公式:

E′:y2=x3−2a x2+(a2−4b) x,ϕ(x,y)=(y2x2, y (b−x2)x2).E' : y^2 = x^3 - 2a\,x^2 + (a^2 - 4b)\,x,\qquad \phi(x, y) = \left(\frac{y^2}{x^2},\ \frac{y\,(b - x^2)}{x^2}\right).

F13\mathbb{F}_{13} 上,a=1a = 1,b=3b = 3

  • E:y2=x3+x2+3xE: y^2 = x^3 + x^2 + 3x
  • E′:y2=x3−2x2−11x=x3+11x2+2x(mod13)E': y^2 = x^3 - 2x^2 - 11x = x^3 + 11x^2 + 2x \pmod{13}

两条曲线点数相同:都是 1616 个点(含无穷远点),符合 Tate 定理。但它们的 jj-不变量分别是 44 和 1111,所以不同构,是迷宫里两个不同的房间。

映射一个点:P=(5,3)∈EP = (5, 3) \in E。检查:125+25+15=165=12⋅13+9≡9=32125 + 25 + 15 = 165 = 12 \cdot 13 + 9 \equiv 9 = 3^2 ✓

  • x2=25≡12≡−1x^2 = 25 \equiv 12 \equiv -1
  • X=y2/x2=9/(−1)=−9≡4X = y^2 / x^2 = 9 / (-1) = -9 \equiv 4
  • Y=y(b−x2)/x2=3⋅(3−25)/(−1)=3⋅22=66≡1Y = y(b - x^2)/x^2 = 3 \cdot (3 - 25)/(-1) = 3 \cdot 22 = 66 \equiv 1
  • ϕ(P)=(4,1)\phi(P) = (4, 1)。检查它在 E′E' 上:64+11⋅16+8=248=19⋅13+1≡1=1264 + 11 \cdot 16 + 8 = 248 = 19 \cdot 13 + 1 \equiv 1 = 1^2 ✓

用 Python 检查了 EE 上所有点,映射后都落在 E′E' 上。(已用 Python 验算。)

3.3 SIDH 的结构(简化)

3.4 为什么辅助点是致命的

公开 ϕA(PB),ϕA(QB)\phi_A(P_B), \phi_A(Q_B),等于告诉攻击者秘密同源 ϕA\phi_A 在一整个 3eB3^{e_B}-挠子群上的取值。

Castryck–Decru 的关键洞察:利用 Kani 定理,可以把 ϕA\phi_A 和另一个已知同源"拼"成两条曲线乘积 E×E′E \times E' 上的一个高维同源。只有当猜测正确时,这个高维同源的目标才会"分裂"成两条椭圆曲线的乘积,而检查是否分裂很容易。于是攻击者可以一步一步猜出 Alice 的秘密路径,每步只需要试很少几种可能。

后来 Robert 证明,借助这些辅助点,任何同源都能在多项式时间内被重建出来。


总结

层次 要点
直觉 房间是曲线,门是同源;找路很难
代数 同源是有理函数给出的群同态;核决定目标曲线(Vélu,类比商群)
SIKE 为了交换密钥必须公开辅助点,泄露了同源在整个挠子群上的值
教训 "十年没被攻破"不等于安全;混合部署救场;CSIDH、SQIsign 仍在