因子分解算法——Pollard 的p-1方法

因子分解算法——Pollard 的 p − 1 p-1 p1方法

1 算法核心

为了分解合数 n n n。设数 n n n的一个因子是 p p p,若 p − 1 p-1 p1的每个因子 q q q满足 q ≤ B q\le B qB(B是自己选的一个数,称为界),此时必有
( p − 1 ) ∣ B ! (p-1)|B! (p1)B!

证:设 p − 1 = q 1 q 2 ⋯ q m p-1=q_{1}q_{2}\cdots q_{m} p1=q1q2qm,并且 q 1 、 q 2 、 ⋯ 、 q m ≤ B q_{1}、q_{2}、\cdots、q_{m}\le B q1q2qmB,显然上式成立。

Pollard的 p − 1 p-1 p1算法是直接计算 a ≡ 2 B ! ( m o d n ) a\equiv 2^{B!}\pmod{n} a2B!(modn) g c d ( a − 1 , n ) gcd(a-1,n) gcd(a1,n),这个最大公因子就是 n n n的一个非平凡因子

证:由于 p ∣ n p|n pn,所以有
a ≡ 2 B ! ( m o d p ) a\equiv 2^{B!} \pmod{p} a2B!(modp)
又根据Fermat定理,
2 p − 1 ≡ 1 ( m o d p ) 2^{p-1}\equiv 1 \pmod{p} 2p11(modp)
因为 2 ( p − 1 ) ∣ 2 B ! 2^{(p-1)}|2^{B!} 2(p1)2B!,所以
a ≡ 2 B ! ≡ 1 ( m o d p ) a\equiv 2^{B!} \equiv 1 \pmod{p} a2B!1(modp)
p ∣ ( a − 1 ) p|(a-1) p(a1)。于是 p p p就是 a − 1 a-1 a1 n n n的公因子。最大公因子当然是其中一个。

2 算法评价

根据重复平方-乘方法可以计算 a ≡ 2 B ! ( m o d n ) a\equiv 2^{B!}\pmod{n} a2B!(modn),根据扩展的Euclidean算法可以计算最大公因数。所以只要 B B B取值合理,可以在多项式时间计算出结果。但是 B B B必须满足"大于 p − 1 p-1 p1的所有因子",如果 p − 1 p-1 p1的因子很大,选择小的 B B B会造成算法求解失败,选择足够大的 B B B会增加算法成功的概率,但那样的话算法的复杂度不比试除法好

为了抵抗Pollard的 p − 1 p-1 p1因子攻击,通常选取两个大素数 p 1 、 q 1 p_{1}、q_{1} p1q1,令 p = 2 p 1 + 1 、 q = 2 q 1 + 1 p=2p_{1}+1、q=2q_{1}+1 p=2p1+1q=2q1+1,这样得到的模数 n = p q n=pq n=pq能够抵抗攻击。

参考书籍:Stinson D , 斯廷森, 冯登国. 密码学原理与实践[M]. 电子工业出版社, 2009.

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值