# 不基础的数学基础# 椭圆曲线上的映射和 Frobenius 迹在一个素域F p \mathbb{F}_p F p 上,我们定义一个椭圆曲线E E E ,在这条椭圆曲线上我们选择一个基点P P P ,在密码学中我们使用的也就是这个基点生成的循环群⟨ P ⟩ \langle P\rangle ⟨ P ⟩ 。
我们定义一个从椭圆曲线E ( K ) E(K) E ( K ) 到其自身的有理映射 (Rational Map) 是椭圆曲线E ( K ( E ) ) E(K(E)) E ( K ( E )) 的一个元素。(K ( E ) K(E) K ( E ) 是E E E 的 “值域”)
对于( g x , g y ) ∈ E ( K ( E ) ) (g_x,g_y)\in E(K(E)) ( g x , g y ) ∈ E ( K ( E )) ,可以知道g x ( X , Y ) g_x(X,Y) g x ( X , Y ) 和g y ( X , Y ) g_y(X,Y) g y ( X , Y ) 都是满足方程E E E 的有理函数。那么对于椭圆曲线E ( K ) E(K) E ( K ) 上面的一个点P = ( x , y ) P=(x,y) P = ( x , y ) ,点( g x ( x , y ) , g y ( x , y ) ) (g_x(x,y),g_y(x,y)) ( g x ( x , y ) , g y ( x , y )) 也是椭圆曲线E ( K ) E(K) E ( K ) 上面的点。
也就是这个有理映射就是用来描述( x , y ) → ( g x ( x , y ) , g y ( x , y ) ) (x,y)\rightarrow(g_x(x,y),g_y(x,y)) ( x , y ) → ( g x ( x , y ) , g y ( x , y )) ,也就是怎么样去把椭圆曲线E ( K ) E(K) E ( K ) 上的点映射到E ( K ) E(K) E ( K ) 上面其他的点。
如果这个有理映射能够将无穷远点O O O 映射到其自身,那么这个映射又叫做自同态 (endomorphism) ,所有自同态的集合记作E n d ( E ) \rm{End}(E) End ( E ) ,E n d ( E ) \rm{End}(E) End ( E ) 是一个环。
下面列举一些特殊的有理映射:
恒等映射 (Identity Map):这个映射是一对有理函数X X X 和Y Y Y ,i d = ( X , Y ) id=(X,Y) i d = ( X , Y ) ,也就是将一个点映射到其自身。 常映射 (Constant Map):对于一个点P = ( x , y ) P=(x,y) P = ( x , y ) ,常映射将每一个输入的点都映射到点P P P :C P = ( x , y ) C_P=(x,y) C P = ( x , y ) 。 Translation Map:(这个不知道怎么翻译 ) 这个映射是将一个点P = ( x , y ) P=(x,y) P = ( x , y ) 加到每一个输入上,也就是τ P = i d + C P \tau_P=id+C_P τ P = i d + C P 。 乘法映射 (Multiplication Map):这是将常数m m m 乘在每个点上,将点P P P 转换为[ m ] P [m]P [ m ] P 。 Frobenius 映射:对于在素域F q \mathbb{F}_q F q 上的椭圆曲线E E E ,Frobenius 映射是一个自同态:ϕ = ( X q , Y q ) \phi=(X^q,Y^q) ϕ = ( X q , Y q ) 。 在特征为q q q 的域F q \mathbb{F}_q F q 上的一条椭圆曲线,令t = q + 1 − # E ( F q ) t=q+1-\#E(\mathbb{F}_q) t = q + 1 − # E ( F q ) 即 Frobenius 迹 (trace of Frobenius) ,ϕ \phi ϕ 为 Frobenius 映射。
根据 Hasse 定理,上面的各个参数满足下面的条件:
通过 Hasse 定理能够确定椭圆曲线上点数量的上下界。
# Hensel 引理Hensel 引理是模算数中的一个结论。在模给定质数p p p 的多项式方程有单根的情况下,可以通过这个单根求解出该方程模p p p 更高次方时的根。
也就是说,对于一个整系数多项式f f f 和素数p p p ,对于一个不小于 2 的整数k k k ,如果r ∈ Z r\in\mathbb{Z} r ∈ Z 满足:
f ( r ) ≡ 0 m o d p k − 1 f(r)\equiv 0\mod p^{k-1} f ( r ) ≡ 0 mod p k − 1
那么对于
f ( r + t p k − 1 ) ≡ 0 m o d p k f(r+tp^{k-1})\equiv 0\mod p^k f ( r + t p k − 1 ) ≡ 0 mod p k
若f ′ ( r ) ≢ 0 f'(r)\not\equiv 0 f ′ ( r ) ≡ 0 ,则存在0 ≤ t ≤ p − 1 0\le t\le p-1 0 ≤ t ≤ p − 1 使得上式成立,且t f ′ ( r ) ≡ − ( f ( r ) / p k − 1 ) m o d p tf'(r)\equiv-(f(r)/p^{k-1})\mod p t f ′ ( r ) ≡ − ( f ( r ) / p k − 1 ) mod p 。
若f ′ ( r ) ≡ 0 m o d p f'(r)\equiv 0\mod p f ′ ( r ) ≡ 0 mod p ,如果f ( r ) ≡ 0 m o d p k f(r)\equiv 0\mod p^k f ( r ) ≡ 0 mod p k ,则上式对任意整数t t t 恒成立,否则无整数解。
可以通过 Taylor 公式证明该引理:
f ( r + t p k − 1 ) = f ( r ) + t p k − 1 f ′ ( r ) + 1 2 t 2 p 2 ( k − 1 ) f ′ ′ ( r ) + 1 6 t 3 p 3 ( k − 1 ) f ′ ′ ′ ( r ) + . . . f(r+tp^{k-1})=f(r)+tp^{k-1}f'(r)+\frac{1}{2}t^2p^{2(k-1)}f''(r)+\frac{1}{6}t^3p^{3(k-1)}f'''(r)+... f ( r + t p k − 1 ) = f ( r ) + t p k − 1 f ′ ( r ) + 2 1 t 2 p 2 ( k − 1 ) f ′′ ( r ) + 6 1 t 3 p 3 ( k − 1 ) f ′′′ ( r ) + ...
从第三项开始的项都能被p k p^k p k 整除,故
f ( r + t p k − 1 ) ≡ f ( r ) + t p k − 1 f ′ ( r ) m o d p k f(r+tp^{k-1})\equiv f(r)+tp^{k-1}f'(r)\mod p^k f ( r + t p k − 1 ) ≡ f ( r ) + t p k − 1 f ′ ( r ) mod p k
到此证明完毕。
一个对于 Hensel 引理的应用,就是所谓的 Hensel Lifting ,将椭圆曲线上的点 “提升” 到更高阶的曲线上。举个例子,对于一条椭圆曲线E ( F p ) : y 2 ≡ x 3 + a x + b m o d p E(\mathbb{F}_p):y^2\equiv x^3+ax+b\mod p E ( F p ) : y 2 ≡ x 3 + a x + b mod p ,我们已经知道了一个点P ( x 1 , y 1 ) P(x_1,y_1) P ( x 1 , y 1 ) 在椭圆曲线上,那么y 1 y_1 y 1 是方程f ( y ) = x 3 + a x + b − y 2 ≡ 0 m o d p f(y)=x^3+ax+b-y^2\equiv 0\mod p f ( y ) = x 3 + a x + b − y 2 ≡ 0 mod p 的一个根,也就是说f ( y 1 ) ≡ 0 m o d p f(y_1)\equiv 0\mod p f ( y 1 ) ≡ 0 mod p 。
那么根据 Hensel 引理,f ( y 1 + t p ) ≡ 0 m o d p 2 f(y_1+tp)\equiv 0\mod p^2 f ( y 1 + tp ) ≡ 0 mod p 2 有解,其中t f ′ ( y ) ≡ − ( f ( y ) / p ) m o d p tf'(y)\equiv-(f(y)/p)\mod p t f ′ ( y ) ≡ − ( f ( y ) / p ) mod p 。而我们知道f ′ ( y ) = ( x 3 + a x + b − y 2 ) ′ = − 2 y f'(y)=(x^3+ax+b-y^2)'=-2y f ′ ( y ) = ( x 3 + a x + b − y 2 ) ′ = − 2 y ,那么
t ≡ ( x 1 3 + a x 1 + b − y 1 2 ) p ⋅ ( 2 y 1 ) − 1 m o d p t\equiv \cfrac{(x_1^3+ax_1+b-y_1^2)}{p}\cdot (2y_1)^{-1}\mod p t ≡ p ( x 1 3 + a x 1 + b − y 1 2 ) ⋅ ( 2 y 1 ) − 1 mod p
也就是能够求解出满足方程 $$f (y)\equiv 0\mod p^2$$ 的一个解y = y 1 + t p y=y_1+tp y = y 1 + tp 。也就是说点( x , y 1 + t p ) (x,y_1+tp) ( x , y 1 + tp ) 实际上是在曲线y 2 ≡ x 3 + a x + b m o d p 2 y^2\equiv x^3+ax+b\mod p^2 y 2 ≡ x 3 + a x + b mod p 2 上的一个点。
通过上面的这一段过程,我们就把曲线E ( F p ) E(\mathbb{F_p}) E ( F p ) 上的一个点转换到了曲线E ( F p 2 ) E(\mathbb{F}_{p^2}) E ( F p 2 ) 上。
比较容易地可以实现代码:
def hensel_lift ( E, P) : x, y = P. x, P. y a, b, p = E. a, E. b, E. p t = ( ( pow ( x, 3 ) + a * x + b - pow ( y, 2 ) ) // p) % p t = inverse( 2 * y, p) * t % p return ( x, t * p + y)
# SSSA Attack目前求解 ECDLP 的一个应用十分广泛的方法是 Pollard rho 算法,这个算法的复杂度是O ( N ) O(\sqrt N) O ( N ) ,N N N 为群E ( F p ) E(\mathbb{F}_p) E ( F p ) 的阶的最大素因子。
为了避免 Pollard rho 算法的攻击,一个思路就是去构造阶包含十分大的素因子的椭圆曲线群。上面提到了 Hasse 定理给出了椭圆曲线阶的上限,如果我们构造F p \mathbb{F}_p F p 上一个阶为p p p 的曲线(也就是 Frobenius 迹为 1),那自然是可以免受 Pollard rho 算法的攻击的。
这看似是一个安全的解决方案,然而却存在着十分高效的算法用以求解 ECDLP。
# 基本原理SSSA 是由 Smart、Semaev 和 Satoh-Araki 分别独立发现的,用以将F p \mathbb{F}_p F p 上的椭圆曲线转换到Q p \mathbb{Q}_p Q p 上。这个算法针对的是这样的一个问题,对于定义在模素数p p p 的有限域F p \mathbb{F}_p F p 上的椭圆曲线E ‾ ( F p ) \overline{E}(\mathbb{F}_p) E ( F p ) ,这个椭圆曲线满足上面的点的数量# E ‾ ( F p ) \#\overline{E}(\mathbb{F}_p) # E ( F p ) 等于p p p ,也就是说 Frobenius 迹t = p + 1 − # E ( F q ) = 1 t=p+1-\#E(\mathbb{F}_q)=1 t = p + 1 − # E ( F q ) = 1 。这一类曲线叫做异常曲线 (Anomalous Curve) 。
我们都知道 ECDLP 实际上是针对椭圆曲线E ‾ ( F p ) \overline{E}(\mathbb{F}_p) E ( F p ) 上的两个点P ‾ \overline{P} P 和Q ‾ \overline{Q} Q ,求解下面的离散对数问题:
Q ‾ = [ m ] P ‾ \overline{Q}=[m]\overline{P} Q = [ m ] P
很明显 ECDLP 问题是一个计算困难问题,直接去暴力破解是很不现实的。一个解决思路在于去构造一个 “对数” 映射(实际上就是一个群E ‾ \overline{E} E 的一个同态),将椭圆曲线中的元素映射到一个求解 DLP 比较容易的群里去求解 DLP 问题。
一个比较容易计算 DLP 问题的群是F p + \mathbb{F}_p^+ F p + ,也就是模p p p 意义上的加法群。但是现在并没有一个从在F p \mathbb{F}_p F p 上的椭圆曲线群到F p + \mathbb{F}_p^+ F p + 的同态映射,不过对于Q p \mathbb{Q}_p Q p 上的椭圆曲线群,倒是存在着这样的映射。
选择一条定义在Q p \mathbb{Q}_p Q p 上的椭圆曲线E E E ,它模p p p 约减会得到曲线E ‾ \overline{E} E 。我们可以计算E ‾ \overline{E} E 上的点P ‾ \overline{P} P 和Q ‾ \overline{Q} Q 在曲线E E E 上的对应点P P P 和Q Q Q ,对应的点的横坐标是原来点的横坐标,纵坐标则可以通过计算得到。
记E ( Q p ) E(\mathbb{Q}_p) E ( Q p ) 的一个子群E n ( Q p ) E_n(\mathbb{Q}_p) E n ( Q p ) 为
E n ( Q p ) = { P ∈ E ( Q p ) ∣ v p ( x ( P ) ) ≤ − 2 n } ∪ { O } E_n(\mathbb{Q}_p)=\{P\in E(\mathbb{Q}_p)|v_p(x(P))\le-2n\}\cup\{O\} E n ( Q p ) = { P ∈ E ( Q p ) ∣ v p ( x ( P )) ≤ − 2 n } ∪ { O }
这里的x ( P ) x(P) x ( P ) 是点P P P 的横坐标,v p ( x ) v_p(x) v p ( x ) 是x x x 的p p p - 进赋值。我们将x ∈ Q x\in \mathbb{Q} x ∈ Q 表示为分数形式a b \cfrac{a}{b} b a ,其中a , b a,b a , b 为整数,根据算数基本定理对a a a 和b b b 得到唯一分解,其中p p p 在a a a 和b b b 的分解式中的次数分别是o r d p ( a ) ord_p(a) or d p ( a ) 和o r d p ( b ) ord_p(b) or d p ( b ) ,定义:
v p ( x ) = o r d p ( a ) − o r d p ( b ) v_p(x)=ord_p(a)-ord_p(b) v p ( x ) = or d p ( a ) − or d p ( b )
同时有约定v p ( 0 ) = + ∞ v_p(0)=+\infty v p ( 0 ) = + ∞ 。
例如对于p = 5 , x = 53 250 p=5, x=\frac{53}{250} p = 5 , x = 250 53 ,因为53 = 53 , 250 = 5 3 ∗ 2 53=53,250=5^3*2 53 = 53 , 250 = 5 3 ∗ 2 ,那么o r d 5 ( 53 ) = 0 , o r d 5 ( 250 ) = 3 ord_5(53)=0,ord_5(250)=3 or d 5 ( 53 ) = 0 , or d 5 ( 250 ) = 3 ,故v p ( x ) = 0 − 3 = − 3 v_p(x)=0-3=-3 v p ( x ) = 0 − 3 = − 3 。
这个子群定义中v p ( x ( P ) ) ≤ − 2 n v_p(x(P))\le-2n v p ( x ( P )) ≤ − 2 n 也就意味着P P P 的经过约减的横坐标的分母上至少有p 2 r p^{2r} p 2 r 。
这里实际上可以对椭圆曲线进行一个替换。对于y 2 = x 3 + a x + b y^2=x^3+ax+b y 2 = x 3 + a x + b ,我们设z = − x / y z=-x/y z = − x / y ,w = − 1 / y w=-1/y w = − 1/ y ,带入曲线的方程中可以得到:
w = z 3 + a z w 2 + b w 3 w=z^3+azw^2+bw^3 w = z 3 + a z w 2 + b w 3
将这条式子的w w w 带入自身迭代,可以得到一个w w w 关于z z z 的无穷级数w ( z ) w(z) w ( z ) 。 (好难算)
利用这些能反过来表示x = z w ( z ) x=\cfrac{z}{w(z)} x = w ( z ) z ,y = − x ( z ) z y=-\cfrac{x(z)}{z} y = − z x ( z ) ,那么只要这个级数w ( z ) w(z) w ( z ) 收敛,我们就能够仅用z z z 去表示x x x 和y y y ,也就是表示椭圆曲线上的点。实际上在域Q p \mathbb{Q}_p Q p 上,z ∈ p Z p z\in p\mathbb{Z}_p z ∈ p Z p ,a , b ∈ Z p a,b\in\mathbb{Z}_p a , b ∈ Z p 时,这个数列是收敛的。
这样子我们也能够用z z z 去表示两个点的z 1 , z 2 z_1,z_2 z 1 , z 2 加法,记作F ( z 1 , z 2 ) = z 1 + z 2 − a z 1 z 2 . . . F(z_1,z_2)=z_1+z_2-az_1z_2... F ( z 1 , z 2 ) = z 1 + z 2 − a z 1 z 2 ... 。我们定义群E ^ ( p n Z p ) \hat{E}(p^n\mathbb{Z}_p) E ^ ( p n Z p ) ,这是集合p n Z p p^n\mathbb{Z}_p p n Z p 中的元素在F F F 定义的加法运算下构成的群。
上面定义了:
E n ( Q p ) = { P ∈ E ( Q p ) ∣ v p ( x ( P ) ) ≤ − 2 n } ∪ { O } E_n(\mathbb{Q}_p)=\{P\in E(\mathbb{Q}_p)|v_p(x(P))\le-2n\}\cup\{O\} E n ( Q p ) = { P ∈ E ( Q p ) ∣ v p ( x ( P )) ≤ − 2 n } ∪ { O }
而我们也得到了x = z w ( z ) x=\cfrac{z}{w(z)} x = w ( z ) z ,y = − x ( z ) z y=-\cfrac{x(z)}{z} y = − z x ( z ) ,将这个记作一个映射V p ( z ) : = ( z w ( z ) , − x ( z ) z ) \mathcal{V}_p(z):=(\cfrac{z}{w(z)},-\cfrac{x(z)}{z}) V p ( z ) := ( w ( z ) z , − z x ( z ) ) ,这个映射是群E ^ ( p n Z p ) \hat{E}(p^n\mathbb{Z}_p) E ^ ( p n Z p ) 和群E n ( Q p ) E_n(\mathbb{Q}_p) E n ( Q p ) 之间的一个同构。
我们需要一个从群E ^ ( p Z p ) \hat{E}(p\mathbb{Z}_p) E ^ ( p Z p ) 到加法群p n Z p p^n\mathbb{Z}_p p n Z p 的映射,也就是要找到一个函数l o g log l o g ,满足∀ z 1 , z 2 ∈ p Z p , s . t . l o g ( F ( z 1 , z 2 ) ) = l o g ( z 1 ) + l o g ( z 2 ) \forall z_1,z_2\in p\mathbb{Z}_p,\ s.t.\ log(F(z_1,z_2))=log(z_1)+log(z_2) ∀ z 1 , z 2 ∈ p Z p , s . t . l o g ( F ( z 1 , z 2 )) = l o g ( z 1 ) + l o g ( z 2 ) 。一个映射是这样的:l o g ( T ) = T + d 1 2 T 2 + d 2 3 T 3 + . . . log(T)=T+\frac{d_1}{2}T^2+\frac{d_2}{3}T^3+... l o g ( T ) = T + 2 d 1 T 2 + 3 d 2 T 3 + ...
我们前面得出了E ^ ( p Z p ) ≅ E n ( Q p ) \hat{E}(p\mathbb{Z}_p)\cong E_n(\mathbb{Q}_p) E ^ ( p Z p ) ≅ E n ( Q p ) ,又有E ^ ( p Z p ) ≅ p Z p \hat{E}(p\mathbb{Z}_p)\cong p\mathbb{Z}_p E ^ ( p Z p ) ≅ p Z p ,那么很明显有E n ( Q p ) ≅ p Z p E_n(\mathbb{Q}_p)\cong p\mathbb{Z}_p E n ( Q p ) ≅ p Z p ,它们之间的同构是ψ p : = l o g ∘ V p − 1 \psi_p:=log\circ\mathcal{V}_p^{-1} ψ p := l o g ∘ V p − 1 。
将前面这些同构用于商群,能够得到E n ( Q p ) / E n + 1 ( Q p ) ≅ p n Z p / p n + 1 Z p ≅ F p + E_n(\mathbb{Q}_p)/E_{n+1}(\mathbb{Q}_p)\cong p^n\mathbb{Z}_p/p^{n+1}\mathbb{Z}_p\cong \mathbb{F}_p^+ E n ( Q p ) / E n + 1 ( Q p ) ≅ p n Z p / p n + 1 Z p ≅ F p + 。
我们上面的这些操作得到了这样的一系列同构。下面让我们来看 Smart 构造的方式。
通过前面的 ECDLP 问题的定义:
Q ‾ = [ m ] P ‾ \overline{Q}=[m]\overline{P} Q = [ m ] P
可以通过 Hensel 定理推出:
Q − [ m ] P = R ∈ E 1 ( Q p ) Q-[m]P=R\in E_1(\mathbb{Q}_p) Q − [ m ] P = R ∈ E 1 ( Q p )
这里有下面的结论:
E 0 ( Q p ) / E 1 ( Q p ) ≅ E ‾ ( F p ) E 1 ( Q p ) / E 2 ( Q p ) ≅ F p + E_0(\mathbb{Q}_p)/E_1(\mathbb{Q}_p)\cong \overline{E}(\mathbb{F}_p)\\[2ex] E_1(\mathbb{Q}_p)/E_2(\mathbb{Q}_p)\cong \mathbb{F}_p^+\\ E 0 ( Q p ) / E 1 ( Q p ) ≅ E ( F p ) E 1 ( Q p ) / E 2 ( Q p ) ≅ F p +
也就是说商群E 0 ( Q p ) / E 1 ( Q p ) E_0(\mathbb{Q}_p)/E_1(\mathbb{Q}_p) E 0 ( Q p ) / E 1 ( Q p ) 和E ( F p ) E(\mathbb{F}_p) E ( F p ) 同构,商群E 1 ( Q p ) / E 2 ( Q p ) E_1(\mathbb{Q}_p)/E_2(\mathbb{Q}_p) E 1 ( Q p ) / E 2 ( Q p ) 和F p + \mathbb{F}_p^+ F p + 同构。群E ( F p ) = E ( F p ) ‾ E(\mathbb{F}_p)=\overline{E(\mathbb{F}_p)} E ( F p ) = E ( F p ) 和F p + \mathbb{F}_p^+ F p + 的阶都为p p p ,那么乘以p p p (对于椭圆曲线实际上是p p p 倍点)能够将E ( Q p ) E(\mathbb{Q}_p) E ( Q p ) 中的元素映射到E 1 ( Q p ) E_1(\mathbb{Q}_p) E 1 ( Q p ) 、将E 1 ( Q p ) E_1(\mathbb{Q}_p) E 1 ( Q p ) 中的元素映射到E 2 ( Q p ) E_2(\mathbb{Q}_p) E 2 ( Q p ) 中。
[ p ] Q − [ m ] ( [ p ] P ) = [ p ] R ∈ E 2 ( Q p ) [p]Q-[m]([p]P)=[p]R\in E_2(\mathbb{Q}_p) [ p ] Q − [ m ] ([ p ] P ) = [ p ] R ∈ E 2 ( Q p )
这样子就可以采用对数映射ψ p \psi_p ψ p 对E 1 ( Q p ) E_1(\mathbb{Q}_p) E 1 ( Q p ) 上的点[ p ] Q , [ p ] P , [ p ] R [p]Q,[p]P,[p]R [ p ] Q , [ p ] P , [ p ] R 进行计算。这里注意上面有R ∈ E 1 ( Q p ) R\in E_1(\mathbb{Q}_p) R ∈ E 1 ( Q p ) ,那么有[ p ] R ∈ E 2 ( Q p ) [p]R\in E_2(\mathbb{Q}_p) [ p ] R ∈ E 2 ( Q p ) :
ψ p ( [ p ] Q ) − m ψ p ( [ p ] P ) = ψ p ( [ p ] R ) ≡ 0 m o d p 2 \psi_p([p]Q)-m\psi_p([p]P)=\psi_p([p]R)\equiv 0\mod p^2 ψ p ([ p ] Q ) − m ψ p ([ p ] P ) = ψ p ([ p ] R ) ≡ 0 mod p 2
如果将上面的各个元素写作p p p - 进数的系数,可以得到:
c 1 p + c 2 p 2 + . . . − m ( d 1 p + d 2 p 2 + . . . ) = b 2 p 2 + . . . c_1p+c_2p^2+...-m(d_1p+d_2p^2+...)=b_2p^2+... c 1 p + c 2 p 2 + ... − m ( d 1 p + d 2 p 2 + ... ) = b 2 p 2 + ...
c i c_i c i 是p p p - 进数形式的ψ p ( [ p ] Q ) \psi_p([p]Q) ψ p ([ p ] Q ) 的系数,d i d_i d i 是p p p - 进数形式的ψ p ( [ p ] P ) \psi_p([p]P) ψ p ([ p ] P ) 的系数。那么需要计算m m m ,只需要:
m ≡ ψ p ( [ p ] Q ) ψ p ( [ p ] P ) m o d p m\equiv\frac{\psi_p([p]Q)}{\psi_p([p]P)}\mod p m ≡ ψ p ([ p ] P ) ψ p ([ p ] Q ) mod p
接下来要关心的就是怎么样去计算ψ p ( [ p ] Q ) \psi_p([p]Q) ψ p ([ p ] Q ) 和ψ p ( [ p ] P ) \psi_p([p]P) ψ p ([ p ] P ) 模p 2 p^2 p 2 的系数。
对于一个点S ∈ E 1 ( Q p ) S\in E_1(\mathbb{Q}_p) S ∈ E 1 ( Q p ) ,参考前面V p \mathcal{V}_p V p 的定义可以得到:
V p − 1 ( S ) = − x ( S ) y ( S ) ∈ p Z p \mathcal{V}_p^{-1}(S)=-\cfrac{x(S)}{y(S)}\in p\mathbb{Z}_p V p − 1 ( S ) = − y ( S ) x ( S ) ∈ p Z p
其中x ( S ) , y ( S ) x(S),y(S) x ( S ) , y ( S ) 分别对应了S S S 的横、纵坐标。带回到前面给出的定义,我们能够得到ψ p ( S ) \psi_p(S) ψ p ( S ) 的值:
ψ p ( S ) ≡ − x ( S ) y ( S ) m o d p 2 \psi_p(S)\equiv-\frac{x(S)}{y(S)}\mod p^2 ψ p ( S ) ≡ − y ( S ) x ( S ) mod p 2
这样子的话只要知道群的 Frobenius 迹为 1,那么就能够在线性的时间内求解出这个 DLP 问题。这里要做的也就是计算出E E E 上的[ p ] P [p]P [ p ] P 和[ p ] Q [p]Q [ p ] Q ,通过快速幂也可以在log p \log p log p 时间内完成。而且上面计算ψ p \psi_p ψ p 需要模p p p ,故这些计算在曲线E ( Z / p 2 Z ) E(\mathbb{Z}/p^2\mathbb{Z}) E ( Z / p 2 Z ) 就行了。
# 实现这里用 Sage 实现,网络上也有一些能够参考的资料。
def sssa ( a, b, p, xP, yP, xQ, yQ) : gf = GF( p) E = EllipticCurve( gf, [ a, b] ) P = E( xP, yP) Q = E( xQ, yQ) lE = EllipticCurve( Qp( p) , [ a, b] ) pl = hensel_lift( lE, P, gf) ql = hensel_lift( lE, Q, gf) pPl = p * pl pQl = p * ql plx, ply = pPl. xy( ) qlx, qly = pQl. xy( ) return int ( gf( ( qlx / qly) / ( plx / ply) ) )
这里拿一个异常的椭圆曲线为例:
p = 0xb0000000000000006c5b40000000000010ad7f77
a = 0x7cbc14e5e0a72f05864385397829cbc15a2fe1d6
b = 0xa9cbc14e5e0a72f0bc20f05397829cbc24fd94a8
xP = 0x725c5b2943cc60511e0ff0dc2caa3d5b718c5453
yP = 0xf7eac9839e184ed16dcf70880867c8bcb094fae
xQ = 0x2a7e3b1a3960ee48d5e74dbb59859e433ead2dc0
yQ = 0x598275e68ac488066c93dc89f4e23748346c0365
经过计算可以发现这条椭圆曲线的 Frobenius 迹为 1,因此可以进行 SSSA 攻击,得到结果:
x = 0x46a79bf05f70d85552d0c2e587354e6bd8ad972f
# 参考资料[1] Smart N P. The discrete logarithm problem on elliptic curves of trace one[J]. Journal of cryptology, 1999, 12(3): 193-196.
[2] https://crypto.stanford.edu/pbc/notes/elliptic/
[3] https://github.com/elliptic-shiho/ecpy/blob/master/ecpy/elliptic_curve/sssa_attack.py
[4] https://github.com/jvdsn/crypto-attacks/blob/master/attacks/ecc/smart_attack.py
[5] Satoh T, Araki K. Fermat quotients and the polynomial time discrete log algorithm for anomalous elliptic curves[J]. Rikkyo Daigaku sugaku zasshi, 1998, 47(1): 81-92.
[6] https://zh.wikipedia.org/wiki/ 亨泽尔引理
[7] https://en.wikipedia.org/wiki/P-adic_number
[8] Semaev I. Evaluation of discrete logarithms in a group of 𝑝-torsion points of an elliptic curve in characteristic 𝑝[J]. Mathematics of computation, 1998, 67(221): 353-356.
[9] Kenneth H. Rosen. Handbook of Elliptic and Hyperelliptic Curve Cryptography.
[10] Joseph H. Silverman. The Arithmetic of Elliptic Curves.
[11] 朱玉清,庄金成,于伟,等。特征 p 椭圆曲线上 p - 群的离散对数问题 [J]. 密码学报,2018, 5 (4): 368-375.
[12] WASHINGTON L C. Elliptic Curves: Number Theory and Cryptography[M]. New York: CRC Press.
[13] https://math.stackexchange.com/questions/3021935/what-is-p-adic-logarithmic-map-of-an-elliptic-curve-how-to-compute-it
[14] Leprévost F, Monnerat J, Varrette S, et al. Generating anomalous elliptic curves[J]. Information processing letters, 2005, 93(5): 225-230.