现代密码学(六)因子分解和离散对数算法

本章的意义在于对因子分解和离散对数这些问题的有效算法 。这些算法本身是有趣的,并可作为己学过的数论知识的良好应用 。此外 ,理解这些算法的效率对于在实际应用中选择密码学参数是至关重要的

因式分解算法

  • 亚指数:如果f(n)= 2^o(n) , 则f是关于n的亚指数
  • Pollard的p - 1方法 ,当p-1有 “ 小 ” 素数因子时它是种有效的方法 。
  • Pollard的rho方法, 这种方法适用于任意的N因此, 这种方法还被称为 “通用 ” 因子分解算法。对于本节开始部分讨论的那种类型的 整数N来 说 , 它的时间复 杂度是O(N^1/4*polylog(N))
  • 二次筛算法 ,这是一种通用因子分解算法,运行时间的复杂度为(关于N的长度)亚指数

Pollard的p - 1方法

整数N = pq且p - 1只有 “ 小 ” 因子时,能找到一个元素y属于Z*N且y<——>(1,y< q>),且y< q>!=1
所以gcd(y, N) = p,于是就得到了一个因子,求y的方法如下:假设能找到一个B使得 (p − 1)| B and (q − 1)!| B,令B=r(p-1)于是算法如下:
在这里插入图片描述下面证明算法生成的y是不是满足上述条件

  1. 证明 y=0modp
    在这里插入图片描述

  2. 证明 y!=0modq
    在这里插入图片描述
    但如果xq是生成元的话上述结论结不成立(生成元的B次方有可能正好为1),但因为生成元的个数为φ(q - 1 ),modq的域大小为q-1,所以概率由下面定理得到Ω(1/ log q) = Ω( 1/n),即可忽略

    • 一个定理:在这里插入图片描述通常认为
      在这里插入图片描述

选择B的方法:
在这里插入图片描述

  • pi表示第i个素数
  • k代表一个范 围 ,它影响时间复杂度和算法成功的概率
  • n是p的长度
  • pi^ [n/log pi]表示能整除p-1的最大的pi的幂
  • 只要q-1一个素数因子比Pk大,那么(q - 1) )!|B
  • 所以当增加k的值,会增加运算复杂度,但会提高找到B的成功率

Pollard的rho方法

对比p-1算法,rho算法可以找到任意整数N的非平凡因子,不用对p和q值有任何假设,算法复杂度:在这里插入图片描述

思想:N=pq,找到Good对(x,x’)有x-x’=0 mod p,且x-x’ !=0 mod N,那么p=gcd(x − x’, N)。我们从均匀选取x1,x2…xk,其中k=2^(n/2)=O(p ^1/2),然后双射到在这里插入图片描述
所以根据某种结论,约1/4的概率存在i,j使得x(i)=x(j)mod p,可以在O(√p)=O(N1/4)时间内生成k个元素,然后测试所有数对,将花费O(k2)=O(N1/2)的时间。这种方法因为p是未知的,需要计算所有数对来和N求gcd,所以并不比试除法好

二次筛算法

仅仅描述了算法的思想,对某些计算做了省略。
如果存在元素x ∈Zn,满足条件x^2 = z mod N,则元素z ∈Zn是模N的一个二次剩余,这种情况下称x为z的平方根。一些结论:

  1. 如果N= pq是两个不同素数的乘积,那么N的每个二次平方剩余都恰好有四个平方根
  2. 给定x,y满足x2= ymod N且x≠ ±y mod N,则在多项式时间内计算N的一个非平凡因子是可能的。及gcd(x-y,N)为N的其中一个因子

二次筛的目的是生成x,y,有x2=y2 mod N,且保证x!=±y,步骤如下:

  1. 规定一个小素数组成的集合B= {P1,…,Pk},寻找不同的数x1,…. xl∈ Zn(l>k)使得qi=[xi2mod N]足够“小”,以便能被分解,而且使qi的所有素数因子都在B中。(xi > √N,这能确保xi2 >N,从而在对N进行取模运算时不是平凡的)。这里省略如何寻找{xi}的细节。有下面的等式:右侧是q的素因子
    在这里插入图片描述2. 将指数e进行mod2 得到全是0,1的矩阵:在这里插入图片描述因为l>k,需要将其化为一个方阵,因此,部分行叠加到某一行,使该行结果对2取模全为0,S是{qi}的子集,即我们想选取的相叠加的行,因为我们想叠加后每项的指数都为2的倍数,所以在这里插入图片描述在这里插入图片描述于是我们就得到了z的两个平方根,虽然不能保证这两个值为z的因式分解,但至少能通过启发式的方法期望这种情况发生的概率约为1/2(因为X有四个平方根〉

计算离散对数的算法

给定g ∈G且y ∈< g>,找到.c,使得gx=y。(< g>是由g生成的循环子群,{g0,g1,…} ∈G。若 < g>=G,则g是G群的一个生成元,且G是循环群。)这个回答x=loggy表示

“ 小步大步” 算法

在时间O(√q· ploylog(q))计算阶为q的群中的离散对数

给定输入g和h ∈ < g>,其中< g>的阶为q。外,以大小为t=[√q]的间隔“标记”这个循环,也就是说,计算和记录[q/t]+1 =O(√q)个元素,这就是大步
在这里插入图片描述
易知 = gx位于某个间隔中 , 因此t个元素

在这里插入图片描述
中的某一个必然等于刚才标记出来的某个大步点(这就是小步),有h*gi=gkt,便可以得到log< g>y=kt-i (mod q),伪代码如下:在这里插入图片描述

Pohlig-Hellman 算法

当群的阶q的任何非平凡因子已经知道的情况下,Pohlig-Hellman算法可用来加速对离散对数的计算。前面曾经提到,任何元素g的阶(记为ord(g))是最小的正整数i使得gi = 1。需要下面的引理:
在这里插入图片描述
也会使用到通用的中国剩余定理,现在描述Pohlig-Hellman 的方法。给定g和y,希望找到一个x满足9x= y。令ord(g)=q,其因式分解为在这里插入图片描述
在这里插入图片描述
令gi=gq/qi,因此得到在k个 “更小的 ” 群中的离散对数问题的k个实例 ,每1个大小为
ord (gi) = qi,于是就简化了,然后能够通过任何其他解决离散对数 问题的算法来解决产生的k个实例中的每一个

由碰撞而产生的离散对数法

小步大步算法的一个缺点是,它使用了大量的内存,因为它需要存储O(√q)点。我们可以利用离散对数问题和抗碰撞哈希之间的联系寻找冲突,获得一个使用恒定内存的算法

索引演算方法

索引演算方法能够以p的长度表示的亚指数时间内,解决循环群Z*p(p为素数)上的离散对数问题。类似于二次筛

  1. 令q=p-1,是Z的阶。固定小素数的集合B={P1,…;Pk}。在这个步骤中,发现l≥k个不同的非零值x1 ,…, xl ∈Z,满足gi=gxi mod p]是“小”的,以便gi能因子分解(比如使用试除法),并且gi的所有素数因子都在集合B中。xi为随机尝试出的,然后有gi的因式分解:
    在这里插入图片描述
    取离散对数,将其转换为线性方程:在这里插入图片描述
    其中x和e是已知的,logp是未知的

  2. 现在给定一个元素h,来计算 logh。找到一个数x∈Zq,满足条件g=[gx* h mod p]是“小”的,使得g能够进行因子分解并且g的所有素数因子都在集合B中。在这里插入图片描述
    其中x*和 {e*i}都是己知的,于1️⃣中式子联立,发现在l + 1(>k+1)个线性方程中包含了{logg pi}f=1和log9 y的k + 1个变量和 logg h一共k+1个变量,可以得到所期望的logh

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值