Pollard ρ \rho ρ 算法求解离散对数问题
离散对数(DLP)问题:设有群
(
G
,
⋅
)
(G,\cdot)
(G,⋅),
α
∈
G
\alpha \in G
α∈G是一个
n
n
n阶元素。给定
β
∈
<
α
>
\beta \in \left< \alpha \right>
β∈⟨α⟩,找到指数
c
,
0
≤
c
≤
n
−
1
c,0\le c\le n-1
c,0≤c≤n−1,满足
α
c
=
β
\alpha ^{c} =\beta
αc=β前面分享过因子分解的Pollard
ρ
\rho
ρ 算法(为了更好地理解Pollard
ρ
\rho
ρ 离散对数算法,建议读者先看Pollard
ρ
\rho
ρ 因子分解算法),也分享过求解离散对数问题的小步大步算法和Pohlig-Hellman算法。
Pollard
ρ
\rho
ρ 算法是启发式的算法,不是确定性的数学证明算法,它可能得到较好的解,也可能会失败,这取决于攻击者选取的初始参数。
算法思想
类似Pollard ρ \rho ρ 因子分解算法。为了求解出 c = log α β c=\log_{\alpha}\beta c=logαβ,直接求是困难的,我们希望构造出一个关于 c c c的一次同余方程,通过解方程间接得到 c c c。Pollard ρ \rho ρ的因子分解算法是寻找一个碰撞 x = x ′ x=x' x=x′,所以这里也想找一个碰撞。
准备工作
-
设 S 1 ∪ S 2 ∪ S 3 S_{1} \cup S_{2}\cup S_{3} S1∪S2∪S3是群 G G G的一个划分,它们元素个数大致相同。
-
定义函数 f : < α > × Z n × Z n → < α > × Z n × Z n f:\left< \alpha \right> \times \mathbb{Z}_{n} \times \mathbb{Z}_{n} \rarr \left< \alpha \right> \times \mathbb{Z}_{n} \times \mathbb{Z}_{n} f:⟨α⟩×Zn×Zn→⟨α⟩×Zn×Zn如下
并且要求构造的三元组 ( x , a , b ) (x,a,b) (x,a,b)满足 x = α a β b x=\alpha^{a}\beta^{b} x=αaβb,比如 ( 1 , 0 , 0 ) (1,0,0) (1,0,0)。可以看出如果 ( x , a , b ) (x,a,b) (x,a,b)满足这个性质,则 f ( x , a , b ) f(x,a,b) f(x,a,b)也满足这个性质。 -
令
算法核心
计算三元组
(
x
i
,
a
i
,
b
i
)
(x_{i},a_{i},b_{i})
(xi,ai,bi)和
(
x
2
i
,
a
2
i
,
b
2
i
)
(x_{2i},a_{2i},b_{2i})
(x2i,a2i,b2i),直到发现
x
2
i
=
x
i
,
i
≥
1
x_{2i}=x_{i},i\ge 1
x2i=xi,i≥1。此时有
α
a
i
β
b
i
=
α
a
2
i
β
b
2
i
\alpha^{a_{i}}\beta^{b_{i}}=\alpha^{a_{2i}}\beta^{b_{2i}}
αaiβbi=αa2iβb2i因为
β
=
α
c
\beta = \alpha ^{c}
β=αc,所以有
α
a
i
+
c
b
i
=
α
a
2
i
+
c
b
2
i
\alpha^{a_{i}+cb_{i}}=\alpha^{a_{2i}+cb_{2i}}
αai+cbi=αa2i+cb2i因为
α
\alpha
α的阶是
n
n
n,所以有
a
i
+
c
b
i
≡
a
2
i
+
c
b
2
i
(
m
o
d
n
)
a_{i}+cb_{i} \equiv a_{2i}+cb_{2i} \pmod{n}
ai+cbi≡a2i+cb2i(modn)即
c
(
b
2
i
−
b
i
)
≡
a
i
−
a
2
i
(
m
o
d
n
)
c(b_{2i}-b_{i}) \equiv a_{i} - a_{2i} \pmod{n}
c(b2i−bi)≡ai−a2i(modn)如果
g
c
d
(
n
,
b
2
i
−
b
i
)
=
1
gcd(n,b_{2i}-b_{i}) = 1
gcd(n,b2i−bi)=1,则可以解出
c
=
(
a
i
−
a
2
i
)
(
b
2
i
−
b
i
)
−
1
m
o
d
n
c=(a_{i} - a_{2i})(b_{2i}-b_{i})^{-1}\mod{n}
c=(ai−a2i)(b2i−bi)−1modn如果
g
c
d
(
n
,
b
2
i
−
b
i
)
≠
1
gcd(n,b_{2i}-b_{i}) \ne 1
gcd(n,b2i−bi)=1,可以利用扩展的
g
c
d
gcd
gcd解一次线性同余方程。
例子
问题:群 G = Z 809 ∗ G=\mathbb{Z}_{809}^{*} G=Z809∗, α = 89 \alpha = 89 α=89, β = 618 \beta = 618 β=618, α \alpha α的阶 n = 101 n=101 n=101。下面计算 log α β \log_{\alpha}\beta logαβ。
-
对 G G G做划分:
S 1 = { x ∈ Z 809 ∗ : x ≡ 1 ( m o d 3 ) } S 2 = { x ∈ Z 809 ∗ : x ≡ 0 ( m o d 3 ) } S 3 = { x ∈ Z 809 ∗ : x ≡ 2 ( m o d 3 ) } S_{1} = \lbrace x\in \mathbb{Z}_{809}^{*}:x\equiv 1\pmod{3} \rbrace \\ S_{2} = \lbrace x\in \mathbb{Z}_{809}^{*}:x\equiv 0\pmod{3} \rbrace \\ S_{3} = \lbrace x\in \mathbb{Z}_{809}^{*}:x\equiv 2\pmod{3} \rbrace S1={x∈Z809∗:x≡1(mod3)}S2={x∈Z809∗:x≡0(mod3)}S3={x∈Z809∗:x≡2(mod3)} -
对 i = 1 , 2 , ⋯ i=1,2,\cdots i=1,2,⋯,计算三元组 ( x i , a i , b i ) (x_{i},a_{i},b_{i}) (xi,ai,bi)和 ( x 2 i , a 2 i , b 2 i ) (x_{2i},a_{2i},b_{2i}) (x2i,a2i,b2i),有
i i i | ( x i , a i , b i ) (x_{i},a_{i},b_{i}) (xi,ai,bi) | ( x 2 i , a 2 i , b 2 i ) (x_{2i},a_{2i},b_{2i}) (x2i,a2i,b2i) |
---|---|---|
1 | ( 618 , 0 , 1 ) (618,0,1) (618,0,1) | ( 76 , 0 , 2 ) (76,0,2) (76,0,2) |
2 | ( 76 , 0 , 2 ) (76,0,2) (76,0,2) | ( 113 , 0 , 4 ) (113,0,4) (113,0,4) |
3 | ( 46 , 0 , 3 ) (46,0,3) (46,0,3) | ( 488 , 1 , 5 ) (488,1,5) (488,1,5) |
4 | ( 113 , 0 , 4 ) (113,0,4) (113,0,4) | ( 605 , 4 , 10 ) (605,4,10) (605,4,10) |
5 | ( 349 , 1 , 4 ) (349,1,4) (349,1,4) | ( 422 , 5 , 11 ) (422,5,11) (422,5,11) |
6 | ( 488 , 1 , 5 ) (488,1,5) (488,1,5) | ( 683 , 7 , 11 ) (683,7,11) (683,7,11) |
7 | ( 555 , 2 , 5 ) (555,2,5) (555,2,5) | ( 451 , 8 , 12 ) (451,8,12) (451,8,12) |
8 | ( 605 , 4 , 10 ) (605,4,10) (605,4,10) | ( 344 , 9 , 13 ) (344,9,13) (344,9,13) |
9 | ( 451 , 5 , 10 ) (451,5,10) (451,5,10) | ( 112 , 11 , 13 ) (112,11,13) (112,11,13) |
10 | ( 422 , 5 , 11 ) (422,5,11) (422,5,11) | ( 422 , 11 , 15 ) (422,11,15) (422,11,15) |
可以发现,
x
10
=
x
20
x_{10} = x_{20}
x10=x20。
3. 解方程
c
=
(
5
−
11
)
(
15
−
11
)
−
1
m
o
d
101
=
49
c=(5-11)(15-11)^{-1}\mod{101}=49
c=(5−11)(15−11)−1mod101=49。所以z在
Z
809
∗
\mathbb{Z}_{809}^{*}
Z809∗ 中
log
89
618
=
49
\log_{89}618=49
log89618=49。
注意事项
- 在划分群 G G G时,必须保证 1 ∉ S 2 1\notin S_{2} 1∈/S2,否则根据 f f f的定义,对 ∀ i ≥ 0 \forall i \ge 0 ∀i≥0,都有 ( x i , a i , b i ) = ( 1 , 0 , 0 ) (x_{i},a_{i},b_{i})=(1,0,0) (xi,ai,bi)=(1,0,0)。
- 如果初始参数设置合理,在 n n n阶循环群情况下算法复杂度为 O ( n ) O(\sqrt{n}) O(n)。
参考书籍:Stinson D , 斯廷森, 冯登国. 密码学原理与实践[M]. 电子工业出版社, 2009.