本文涉及:抽象代数、非对称密码
在SIDH受攻击后,本文已过时
带*的可略过
SIDH:Supersingular Isogeny Diffie-Hellman
1.超奇异椭圆曲线
1.1.同构
isomorphism
令K为一个域,K 为K的代数闭包
定义在K上的两条椭圆曲线在 K 中同构当且仅当它们有相同的 j-不变量。
1.2.扭子群
torsion group
该小节建议在看完 2.2 后再回来看
有限域椭圆曲线E的m阶扭子群定义为
E[m]=ker([m])={p∈E(K)∣mP=O}
其中 O 为 E 的单位元
E的扭子群
Etors=⋃m=1∞E[m]
当 p∤m 时,E[m]≅(Z/mZ)2 ,对于 r ≥ 1 ,E[pr]有两种情况:
(1) E[pr]=0 对任意 r 同时成立
(2) E[pr]=Z/prZ 对任意 r 同时成立
1.3.超奇异
supersingular
q=pr , p为素数,r为正整数
对于有限域 Fq 上的椭圆曲线 E ,若 E[pr]=0,则称 E 为超奇异(supersingular)的;若 E[pr]=Z/prZ , 则称 E 为正常(ordinary)的
2.同源
2.0.定义
isogeny
isogenous
若 ϕ:E1→E2 是椭圆曲线间的态射(morphism)且 ϕ(OE1)=OE2,则称 ϕ 是椭圆曲线间的同源(isogeny)
同源有两种情况:
(1) ϕ(E1)=O , 此时称为零同源
(2) ϕ(E1)=E2,此时 K(E1) 是 K(E2) 的有限扩张,且 ϕ 是有限加法满同态,故 ker(ϕ) 是有限子群
SIDH仅考虑后者
两条椭圆曲线是同源的(isogenous),如果存在同源(isogeny) ϕ:E1→E2 使得 ϕ(E1)=O
isogenous是等价关系。
Tate定理:
设 E1, E2 为有限域 Fq 上的椭圆曲线,则存在定义在 Fq 上的同源 ϕ:E1→E2 当且仅当 #E1(Fq)=#E2(Fq)
然而,给定有限域上的两条椭圆曲线 E1,E2,满足 #E1(Fq)=#E2(Fq),找到 E1与 E2 之间的同源是困难的。我们称该问题为标准的同源计算问题。
某个命题:
令 Φ 是 E 的一个有限子群,有且仅有一条椭圆曲线 E’ 和一个可分同源(separable isogeny)
ϕ:E→E′ 满足 ker(ϕ)=Φ
通常把 E′ 记作 E/Φ
这个命题也可以表述为:
令 ϕ:E1→E2 是一个非零同源,那么
kerϕ=ϕ−1(O) 是一个有限群
2.1.自同态环(*)
从 E1 到 E2 的所有isogeny的集合定义为
Hom(E1,E2)={all isogenies:E1→E2}
令 P 是 E1 中一点
两个isogenies之间的加法:
(ϕ+ψ)(P)=ϕ(P)+ψ(P)
可以证明(ϕ+ψ)∈Hom(E1,E2)
所以 Hom(E1,E2) 成群
特别地
End(E)=Hom(E,E)
是E的自同态环
加法如上所述,乘法如下:
(ϕψ)(P)=ϕ(ψ(P))
2.2.乘以 m 同源
其实就是椭圆曲线的倍点操作
对每个 m∈Z 定义multiplication-by-m isogeny
[m]:E→E
如果 m > 0 ,则 [m](P)=P+P+...+P
即m个P相加
如果 m < 0,则 [m](P)=[−m](−P)
如果 m = 0 , 定义 [m](P)=O
由定义不难推出
[m] 的 kernel 即为 E[m] (E的m阶扭子群)
如果m与q互素,那么
#E[m]=m2,E[m]≅(Z/dZ)×(Z/mZ)
2.3.Q平移映射 (*)
令 Q∈E ,
translation-by-Q map 定义为
τQ:E→E,τQ(P)=P+Q
显然 τQ 是一个同构映射,因为 τ−Q 是它的逆。
除非 Q = O ,否则它不是一个同源
现在任意选取一个态射:
F:E1→E2
令 ϕ=τ−F(O)∘F
显然 ϕ 是一个同源,因为 ϕ(O)=O
这证明了任何态射 F 都可以表示为一个同源及一个平移的组合:
F=τF(O)∘ϕ
2.4.同源是一种群同态
令 ϕ:E1→E2 是一个同源,以下等式恒成立
ϕ(P+Q)=ϕ(P)+ϕ(Q)
即 ϕ 是一种群同态
2.5.可分同源
字面意思,ϕ 是可分同源,若存在至少两个非零同源 g,f 使得
ϕ=g∘f
具有此性质的同源可以像快速幂一样加快加密时间
一个同源映射要么是可分的,要么是不可分的。
对于可分同源而言,最重要的一个性质是它们与一个有限子群一一对应。
具体而言,对于 E1 的任意子群 G,有且仅有一个同源
ϕ:E1→E2 的kernel是 G
反之亦然。
在这种情况下,我们通常把 E2 记作 E1/G
2.6.degree(*)
一个同源的 度 定义为kernel的元素个数。
且恒有如下等式
deg(ϕ∘ψ)=deg(ϕ)×deg(ψ)
正题:SIDH
1.参数选择
取定素数
p=lAeAlBeBf±1
其中 lA, lB 为素数,f 为与其互素的数(一般取lA=2,lB=3 , 且lAeA≈lBeB)
eA,eB 为正整数
E 为 Fp2 上的超奇异椭圆曲线,且
E[lAeA]=⟨PA,QA⟩,E[lBeB]=⟨PB,QB⟩
曲线为Montgomery form,即:
by2=x3+ax2+x
公开 p,E,PA,PB,QA,QB
2.私钥选择
Alice选择私钥
a∈{0,...,lAeA−1}
构造循环子群
GA=⟨PA+[a]QA⟩
(这里也可以选择两个整数作为私钥构造⟨sAPA+tAQA⟩, 其中 sA,tA 不都 整除 lAeA)
计算同源
ϕA:E→EA=E/GA
同样地,Bob选择私钥
b∈{0,...,lBeB−1}
构造循环子群
GB=⟨PB+[b]QB⟩
(同理这里也可以选择两个整数作为私钥构造子群)
计算同源
ϕB:E→EB=E/GB
3.公钥交换
Alice公开
{EA,ϕA(PB),ϕA(QB)}
Bob公开
{EB,ϕB(PA),ϕB(QA)}
Alice计算子群
GA′=⟨ϕB(PA)+[a]ϕB(QA)⟩
用这个子群计算同源
ϕBA:EB→EBA=EB/GA′
同样地,Bob计算
GB′=⟨ϕA(PB)+[b]ϕA(QB)⟩
用这个子群计算同源
ϕAB:EA→EAB=EA/GB′
EAB 与 EBA 同构,因此有相同的j-不变量
4.安全性与困难问题
其实上面已经提及过了,这里重申一遍:
给定有限域上的两条超奇异椭圆曲线 E1,E2,找到 E1与 E2 之间的同源是困难的。我们称该问题为标准的超奇异同源计算问题。
SIDH的安全性依赖于计算两个超奇异椭圆曲线间的同源是困难的,Biasse-Jao-Sankar在2014年提出了一个算法,先将在 Fp2 上的超奇异椭圆曲线通过量子 Grover 算法找到定义在 Fp 上的超奇异椭圆曲线的同源,其时间复杂度是O(p1/4) 。而计算定义在 F_p 上的超奇异椭圆曲线的同源的时间复杂度是亚指数的。所以在量子算法下改进从 Fp2 上的超奇异椭圆曲线到定义在 Fp 上的超奇异椭圆曲线的同源的寻找是其中的关键。总之,计算超奇异椭圆曲线同源在量子计算机下的时间复杂度是指数时间。
4.1.DSSI
Decisional Supersingular Isogeny (DSSI) problem
令 EA 是定义在 Fp2下的另一条超奇异椭圆曲线,确定 EA 是否是 lAeA-同源于 E
4.2.CSSI
Computational Supersingular Isogeny (CSSI) problem
令 ϕA:E→EA 是kernel为 <[mA]PA+[nA]QA> 的同源,其中 mA,nA∈Z/lAeAZ 且不都被 lA 整除,给定 EA 和 ϕA(PB),ϕB(PA) ,找到 <[mA]PA+[nA]QA> 的生成元 RA
需要注意的是,给定生成元 RA=[mA]PA+[nA]QA , 求出 (mA,nA) 是容易的,因为 E 的阶光滑以至于求它的扩展离散对数问题是简单的。
4.3.SSCDH
Supersingular Computational Diffie-Hellman problem
令 ϕA:E→EA 是kernel为 <[mA]PA+[nA]QA> 的同源
令 ϕB:E→EB 是kernel为 <[mB]PB+[nB]QB> 的同源
其中 mA,nA∈Z/lAeAZ 且不都被 lA 整除
mB,nB∈Z/lBeBZ 且不都被 lB 整除
给定 EA,EB,ϕA(PB),ϕA(QB),ϕB(PA),ϕB(QA)
找到 E/<[mA]PA+[nA]QA,[mB]PB+[nB]QB> 的 j-不变量
4.4.SSDDH
Supersingular Decision Diffie-Hellman problem
给定两个元组,以1/2概率随机选取其中一元组,确定该元组是从哪个分布抽取的:
- (EA,EB,ϕA(PB),ϕA(QB),ϕB(PA),ϕB(QA),EAB)
其中 EAB≅E/<[mA]PA+[nA]QA,[mB]PB+[nB]QB>
-
(EA,EB,ϕA(PB),ϕA(QB),ϕB(PA),ϕB(QA),EC)
其中 EC≅E/<[mA′]PA+[nA′]QA,[mB′]PB+[nB′]QB>
mA′,nA′(mB′,nB′) 与 mA,nA(mB,nB) 的选择方式相同
4.5.规约
如果存在 CSSI(SSCDH) 问题的解决方法, 那么 SSCDH(SSDDH) 问题就很容易解决. 如果存在 DSSI 问题的解决方法, 那么 SSDDH 问题也很容易解决. 这是目前知道的归约.
DLC:图论相关(*)
其实SIDH算法的机密性和可用性与所谓的“同源图”有关,但笔者还没学到位,暂时更不了
可移步至:
Trusted Setup with Isogenies - Maria Corte-Real Santos (mariascrs.com)
一个可视化的网站:
Isogeny Explorer - Isogeny Database (enricflorit.com)
Sage代码展示
这里的代码搬运自 bintou的博客 ,有极少量的修改
更详细的工程研究请移步超奇异椭圆曲线同源密钥协商工程研究
0.参数设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| lA, lB = 2, 3 eA, eB = 6, 7 p = lA ^ eA * lB ^ eB - 1 assert p.is_prime() assert p % 4 == 3 k = GF(p) E = EllipticCurve(k, [1, 0]) E E.is_supersingular() E.j_invariant()
points = [] while len(points) != 4: p = E.random_point() if p not in points: points.append(p) PA, PB, QA, QB = points PA, PB, QA, QB
|
1.Alice的操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
sA, tA = 123, 525 RA = sA * PA + tA * QA print(RA)
phiA = E.isogeny(RA)
EA = phiA.codomain() print(E.is_isogenous(EA))
EA, phiA_PB, phiA_QB = EA, phiA(PB), phiA(QB) EA, phiA_PB, phiA_QB
|
2.Bob的操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| sB, tB = 812, 580 RB = sB * PB + tB * QB print(RB)
phiB = E.isogeny(RB) print(phiB) EB = phiB.codomain() print(EB) print(E.is_isogenous(EB))
EB, phiB_PA, phiB_QA = EB, phiB(PA), phiB(QA) EB, phiB_PA, phiB_QA
|
3.秘密值计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| R_BA = sA * phiB_PA + tA * phiB_QA print(R_BA) phiBA = EB.isogeny(R_BA) print(phiBA) KA = phiBA.codomain().j_invariant()
R_AB = sB * phiA_PB + tB * phiA_QB print(R_AB) phiAB = EA.isogeny(R_AB) print(phiAB) KB = phiAB.codomain().j_invariant()
if KA == KB: print("Success!")
|
参考
[1] 后量子安全密钥交换协议SIDH简介 | Bintou’s Blog
[2] The Arithmetic of Elliptic Curves
[3] TOWARDS QUANTUM-RESISTANT CRYPTOSYSTEMS FROM SUPERSINGULAR ELLIPTIC CURVE ISOGENIES
[4] A Friendly Introduction to Supersingular Isogeny Diffie-Hellman
[5] Isogenies for Cryptography - Maria Corte-Real Santos (mariascrs.com)
[6] SIDH - Maria Corte-Real Santos (mariascrs.com)