离散对数问题之 Pohlig-Hellman algorithm

本文介绍了Pohlig-Hellman算法在解决非广义离散对数问题中的应用,从任意阶到素数幂阶,再到素数阶的转换。通过定理和证明阐述了算法如何将问题简化,特别是强调了群中元素阶的质因数分解对算法复杂度的影响,并展示了如何将DLP问题规约为素数阶问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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=q1e1q2e2q3e3qtet时,我们可以解决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(gqe1)=q.
Theorem: 前提如上,将 S q S_q Sq修改成解决一个素数阶DLP问题步骤.那么对于 q e q^e qe阶元 g ∈ G g\in G gG,我们可以以 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++xe1qe1,0xiq
这个形式是合理的,因为有 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} hqe1=(gx)qe1=(gx0+x1q+x2q2++xe1qe1)qe1=(gqe1)x0
事实上我们把q阶元 g q e − 1 g^{q^{e-1}} gqe1当做g来看待, h q e − 1 h^{q^{e-1}} hqe1当做h来看待,这就变成了一个素数阶DLP问题.
我们计算如下:
( g q e − 1 ) x 0 = h q e − 1 (g^{q^{e-1}})^{x_0}=h^{q^{e-1}} (gqe1)x0=hqe1再次强调这是一个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}} hqe2=(gx)qe2=gx0qe2gx1qe1
不难得到等价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}} (gqe1)x1=(hgx0)qe2忽略求逆的难度,到这一步用了 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,,xe1,我们即求出了DLP问题的解.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值