离散对数问题之 Pohlig-Hellman algorithm
introduction
在解决非广义离散对数问题(DLP) g x = h   m o d   p g^x=h\bmod p gx=hmodp的时候,我们要求p是一个(大)素数以至于能抵抗CRT的攻击,但考虑到欧拉定理在p群中的作用,任意一个元素的阶必定整除p-1,而p-1必定是合数,PHA算法考虑p-1的质数唯一分解.
Pohlig-Hellman Algorithm 从任意阶到素数幂阶
Theorem 1: 令G是一个群,g
∈
\in
∈G满足ord(g)=
q
e
q^e
qe其中q为某个奇质数,假设我们能在
O
(
S
q
e
)
O(S_{q^e})
O(Sqe)步中解决上述DLP问题(粗略地说枚举取
S
q
e
=
q
e
S_{q^e}=q^e
Sqe=qe,碰撞取
S
q
0.5
e
S_{q^{0.5e}}
Sq0.5e),那么当
o
r
d
(
g
)
=
N
=
q
1
e
1
q
2
e
2
q
3
e
3
…
q
t
e
t
ord(g)=N=q_1^{e_1}q_2^{e_2}q_3^{e_3}\ldots q_t^{e_t}
ord(g)=N=q1e1q2e2q3e3…qtet时,我们可以解决DLP问题在
O
(
S
q
1
e
1
+
S
q
2
e
2
+
…
+
S
q
t
e
t
+
L
o
g
N
)
O(S_{q_1^{e_1}}+S_{q_2^{e_2}}+\ldots+S_{q_t^{e_t}}+LogN)
O(Sq1e1+Sq2e2+…+Sqtet+LogN)步中.
Proof: 我们第一步令
g
i
=
g
N
/
q
i
e
i
,
h
i
=
h
N
/
q
i
e
i
g_i=g^{N/q_i^{e_i}}, h_i=h^{N/q_i^{e_i}}
gi=gN/qiei,hi=hN/qiei
用已有的算法解决这t个DLP问题所需时间为
S
q
1
e
1
+
S
q
2
e
2
+
…
+
S
q
t
e
t
S_{q_1^{e_1}}+S_{q_2^{e_2}}+\ldots+S_{q_t^{e_t}}
Sq1e1+Sq2e2+…+Sqtet.
我们第二步解决如下:
x
=
y
1
 
m
o
d
 
q
1
e
1
,
x
=
y
2
 
m
o
d
 
q
2
e
2
,
…
,
x
=
y
t
 
m
o
d
 
q
t
e
t
,
x=y_1\bmod q_1^{e_1},x=y_2\bmod q_2^{e_2},\ldots,x=y_t\bmod q_t^{e_t},
x=y1modq1e1,x=y2modq2e2,…,x=ytmodqtet,
这t个CRT问题,因为互素显然有解,考虑唯一解,所需步骤为
O
(
L
o
g
N
)
O(LogN)
O(LogN)步,事实上CRT步骤时间基本可以忽略.
我们还需说明这个唯一解就是DLP问题的解.
我们有
x
=
y
i
+
q
i
e
i
z
i
x=y_i+q_i^{e_i}z_i
x=yi+qieizi从而我们可以计算
(
g
x
)
N
/
q
i
e
i
=
(
g
y
i
+
q
i
e
i
z
i
)
N
/
q
i
e
i
=
g
i
y
i
=
h
i
=
h
N
/
q
i
e
i
(g^x)^{N/q_i^{e_i}}=(g^{y_i+q_i^{e_i}z_i})^{N/q_i^{e_i}}=g_i^{y_i}=h_i=h^{N/q_i^{e_i}}
(gx)N/qiei=(gyi+qieizi)N/qiei=giyi=hi=hN/qiei注意上述推算过程中运用到
g
N
g^N
gN是单位元.
上述等式等价于
N
q
i
e
i
x
=
N
q
i
e
i
l
o
g
g
(
h
)
 
m
o
d
 
N
\frac{N}{q_i^{e_i}}x=\frac{N}{q_i^{e_i}}log_g(h)\bmod N
qieiNx=qieiNlogg(h)modN我们注意到有
g
c
d
(
N
q
1
e
1
,
N
q
2
e
2
,
…
,
N
q
t
e
t
)
=
1
gcd(\frac{N}{q_1^{e_1}},\frac{N}{q_2^{e_2}},\ldots,\frac{N}{q_t^{e_t}})=1
gcd(q1e1N,q2e2N,…,qtetN)=1
从而有
c
1
N
q
1
e
1
+
c
2
N
q
2
e
2
+
…
+
c
t
N
q
t
e
t
=
1
c_1\frac{N}{q_1^{e_1}}+c_2\frac{N}{q_2^{e_2}}+\ldots+c_t\frac{N}{q_t^{e_t}}=1
c1q1e1N+c2q2e2N+…+ctqtetN=1
累加得证.
Remark: 上述定理事实上说明了任意阶的DLP问题可以规约到素数幂阶的DLP.
Remark: 上述定理说明了p-1的质因数分解复杂度极大地影响了DLP问题的难度,因此我们我们通常令p=2q+1,其中q是一个大素数,然后我们令ord(g)=q,换句话说我们取q阶元素g
Pohlig-Hellman Algorithm 从素数幂阶到素数阶
该算法思路是如果ord(g)=
q
e
q^e
qe,那么
o
r
d
(
g
q
e
−
1
)
=
q
ord(g^{q^{e-1}})=q
ord(gqe−1)=q.
Theorem: 前提如上,将
S
q
S_q
Sq修改成解决一个素数阶DLP问题步骤.那么对于
q
e
q^e
qe阶元
g
∈
G
g\in G
g∈G,我们可以以
e
S
q
eS_q
eSq步骤解决这个问题.
Proof: 我们将x写成如下形式:
x
=
x
0
+
x
1
q
+
x
2
q
2
+
…
+
x
e
−
1
q
e
−
1
,
0
≤
x
i
≤
q
x=x_0+x_1q+x_2q^2+\ldots +x_{e-1}q^{e-1},0\leq x_i\leq q
x=x0+x1q+x2q2+…+xe−1qe−1,0≤xi≤q
这个形式是合理的,因为有
g
q
e
=
1
g^{q^e}=1
gqe=1,而且在上述条件下是唯一的.我们计算
h
q
e
−
1
=
(
g
x
)
q
e
−
1
=
(
g
x
0
+
x
1
q
+
x
2
q
2
+
…
+
x
e
−
1
q
e
−
1
)
q
e
−
1
=
(
g
q
e
−
1
)
x
0
h^{q^{e-1}}=(g^x)^{q^{e-1}}=(g^{x_0+x_1q+x_2q^2+\ldots +x_{e-1}q^{e-1}})^{q^{e-1}}=(g^{q^{e-1}})^{x_0}
hqe−1=(gx)qe−1=(gx0+x1q+x2q2+…+xe−1qe−1)qe−1=(gqe−1)x0
事实上我们把q阶元
g
q
e
−
1
g^{q^{e-1}}
gqe−1当做g来看待,
h
q
e
−
1
h^{q^{e-1}}
hqe−1当做h来看待,这就变成了一个素数阶DLP问题.
我们计算如下:
(
g
q
e
−
1
)
x
0
=
h
q
e
−
1
(g^{q^{e-1}})^{x_0}=h^{q^{e-1}}
(gqe−1)x0=hqe−1再次强调这是一个q阶元的DLP问题,我们用已有算法求解出
x
0
x_0
x0.
其次,我们用之前的技巧计算
h
q
e
−
2
=
(
g
x
)
q
e
−
2
=
g
x
0
q
e
−
2
g
x
1
q
e
−
1
h^{q^{e-2}}=(g^x)^{q^{e-2}}=g^{x_0q^{e-2}}g^{x_1q^{e-1}}
hqe−2=(gx)qe−2=gx0qe−2gx1qe−1
不难得到等价DLP问题
(
g
q
e
−
1
)
x
1
=
(
h
g
−
x
0
)
q
e
−
2
(g^{q^{e-1}})^{x_1}=(hg^{-x_0})^{q^{e-2}}
(gqe−1)x1=(hg−x0)qe−2忽略求逆的难度,到这一步用了
2
S
q
2S_q
2Sq步,我们决定了
x
0
,
x
1
x_0,x_1
x0,x1
往下重复,得到
x
0
,
x
1
,
…
,
x
e
−
1
x_0,x_1,\ldots, x_{e-1}
x0,x1,…,xe−1,我们即求出了DLP问题的解.