Pollard ρ\rhoρ 算法求解离散对数问题

离散对数(DLP)问题:设有群(G,⋅)(G,\cdot)(G,⋅),α∈G\alpha \in Gα∈G是一个nnn阶元素。给定β∈<α>\beta \in \left< \alpha \right>β∈⟨α⟩,找到指数c,0≤c≤n−1c,0\le c\le n-1c,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}\betac=logα​β,直接求是困难的,我们希望构造出一个关于ccc的一次同余方程,通过解方程间接得到ccc。Pollard ρ\rhoρ的因子分解算法是寻找一个碰撞x=x′x=x'x=x′,所以这里也想找一个碰撞。

准备工作

  1. 设S1∪S2∪S3S_{1} \cup S_{2}\cup S_{3}S1​∪S2​∪S3​是群GGG的一个划分,它们元素个数大致相同。

  2. 定义函数f:<α>×Zn×Zn→<α>×Zn×Znf:\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βbx=\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)也满足这个性质


算法核心

计算三元组(xi,ai,bi)(x_{i},a_{i},b_{i})(xi​,ai​,bi​)和(x2i,a2i,b2i)(x_{2i},a_{2i},b_{2i})(x2i​,a2i​,b2i​),直到发现x2i=xi,i≥1x_{2i}=x_{i},i\ge 1x2i​=xi​,i≥1。此时有
αaiβbi=αa2iβb2i\alpha^{a_{i}}\beta^{b_{i}}=\alpha^{a_{2i}}\beta^{b_{2i}} αai​βbi​=αa2i​βb2i​因为β=αc\beta = \alpha ^{c}β=αc,所以有
αai+cbi=αa2i+cb2i\alpha^{a_{i}+cb_{i}}=\alpha^{a_{2i}+cb_{2i}} αai​+cbi​=αa2i​+cb2i​因为α\alphaα的阶是nnn,所以有
ai+cbi≡a2i+cb2i(modn)a_{i}+cb_{i} \equiv a_{2i}+cb_{2i} \pmod{n} ai​+cbi​≡a2i​+cb2i​(modn)即c(b2i−bi)≡ai−a2i(modn)c(b_{2i}-b_{i}) \equiv a_{i} - a_{2i} \pmod{n} c(b2i​−bi​)≡ai​−a2i​(modn)如果gcd(n,b2i−bi)=1gcd(n,b_{2i}-b_{i}) = 1gcd(n,b2i​−bi​)=1,则可以解出
c=(ai−a2i)(b2i−bi)−1modnc=(a_{i} - a_{2i})(b_{2i}-b_{i})^{-1}\mod{n} c=(ai​−a2i​)(b2i​−bi​)−1modn如果gcd(n,b2i−bi)≠1gcd(n,b_{2i}-b_{i}) \ne 1gcd(n,b2i​−bi​)​=1,可以利用扩展的gcdgcdgcd解一次线性同余方程

例子

问题:群G=Z809∗G=\mathbb{Z}_{809}^{*}G=Z809∗​,α=89\alpha = 89α=89,β=618\beta = 618β=618,α\alphaα的阶n=101n=101n=101。下面计算log⁡αβ\log_{\alpha}\betalogα​β。

  1. 对GGG做划分:
    S1={x∈Z809∗:x≡1(mod3)}S2={x∈Z809∗:x≡0(mod3)}S3={x∈Z809∗:x≡2(mod3)}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)}

  2. 对i=1,2,⋯i=1,2,\cdotsi=1,2,⋯,计算三元组(xi,ai,bi)(x_{i},a_{i},b_{i})(xi​,ai​,bi​)和(x2i,a2i,b2i)(x_{2i},a_{2i},b_{2i})(x2i​,a2i​,b2i​),有

iii (xi,ai,bi)(x_{i},a_{i},b_{i})(xi​,ai​,bi​) (x2i,a2i,b2i)(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)

可以发现,x10=x20x_{10} = x_{20}x10​=x20​。
3. 解方程c=(5−11)(15−11)−1mod101=49c=(5-11)(15-11)^{-1}\mod{101}=49c=(5−11)(15−11)−1mod101=49。所以z在Z809∗\mathbb{Z}_{809}^{*}Z809∗​ 中log⁡89618=49\log_{89}618=49log89​618=49。

注意事项

  1. 在划分群GGG时,必须保证1∉S21\notin S_{2}1∈/​S2​,否则根据fff的定义,对∀i≥0\forall i \ge 0∀i≥0,都有(xi,ai,bi)=(1,0,0)(x_{i},a_{i},b_{i})=(1,0,0)(xi​,ai​,bi​)=(1,0,0)。
  2. 如果初始参数设置合理,在nnn阶循环群情况下算法复杂度为O(n)O(\sqrt{n})O(n​)。

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

Pollard rho 算法求解离散对数问题相关推荐

  1. 大整数分解——Pollard Rho算法

    延续上一篇,这次来讲一讲大整数分解算法的应用. 要解决的问题很简单,对一个整数进行分解质因数. 首先还是效率非常低的暴力算法,相信大家都会,不多提. 和上次一样,当数达到非常大的时候,分解将变得非常困 ...

  2. c语言用rho函数求复数模长,Pollard Rho 算法简介

    $\text{update 2019.8.18}$ 由于本人将大部分精力花在了cnblogs上,而不是洛谷博客,评论区提出的一些问题直到今天才解决. 下面给出的Pollard Rho函数已给出散点图. ...

  3. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...

  4. 因数分解 Pollard rho

    因数分解 Pollard rho 算法思路 随机生成两个数a,ba,ba,b,然后求gcd⁡(n,a−b)\gcd\pod{n,a-b}gcd(n,a−b),如果其值不为111,则这个数就是nnn的一 ...

  5. 素数判定质因数分解(数论)(Miller Rabin)(Pollard Rho)

    太玄学了! 我真的被概率的魅力折服了.此前我认为1便是1,0.9999999999-便是0.9999999999-. 但实际上它们有着千丝万缕的关系. 试想,如果一件事发生的概率是0.99999999 ...

  6. 【快速因数分解】Pollard's Rho 算法

    算法目的 给一个数n,快速提取n的一个因数. 算法根据:生日悖论 讲生日悖论之前,先看一个东西. 给出[1-1000]的数,从中任意选出一个数为k的概率是110001\over 100010001​. ...

  7. 64位以内Rabin-Miller 强伪素数测试和Pollard rho 因数分解解析

    在求解POJ1811题Prime Test中应用到的两个重要算法是Rabin-Miller强伪素数测试和Pollard r因数分解算法.前者可以在的时间内以很高的成功概率判断一个整数是否是素数.后者可 ...

  8. 整数的素因子分解:Pollard rho method

    参考: 1.CLRS<算法导论> 2.http://www.csh.rit.edu/~pat/math/quickies/rho/#algorithm Pollard rho方法是随机算法 ...

  9. 蚁群算法求解TSP问题

    蚁群算法求解TSP问题 蚁群算法求解TSP问题 蚁群算法求解TSP问题 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著 ...

  10. 【优化布局】基于免疫算法求解充电站最优布局matlab代码

    1 简介 为了普及电动汽车,以缓解我国日益严重的环境能源问题,本文研究电动汽车充换电站的选址方法,旨在利用提高电动汽车充电设施的覆盖范围,加快电动汽车的普及发展.本文建立人们日常出行模型,模拟电动汽车 ...

最新文章

  1. js url参数的获取和设置以及删除
  2. 通过变长数组(VLA)来看编译器的不同
  3. 我的log4j与logback简易配置
  4. C#多线程与并行编程方面的电子书,中英文版本
  5. canal mysql从库_大厂如何基于binlog解决多机房同步mysql数据(一)?
  6. 信息学奥赛一本通 2068:【例2.6】鸡兔同笼
  7. 教你一招:让集群慢节点无处可藏
  8. 2017.3.5 yveh测试
  9. Java Web学习总结(33)——Java Web 程序员如何转型大数据
  10. 江湖二三事:听说你想做数据分析师?
  11. asp.net生成随机数或字母验证码代码
  12. “爱装X”开源组织:“教科书级”AI知识树究竟长什么样?
  13. Ubuntu录制gif图
  14. 前端程序员和后端程序员哪个工资高?
  15. java poi读取excel数据_java 使用POI读取excel数据
  16. 15家企业入选2020年中国最佳雇主榜单;《新形势下国企数字化转型之路》白皮书发布 | 美通企业日报...
  17. 使用FFmpeg 编解码 FLV的HEVC(H265)格式的视频
  18. 移动广告平台盈利模式
  19. 1072: 青蛙爬井
  20. 相关系数与决定系数的关系

热门文章

  1. 记一次失败的机械键盘拆机换轴经历(含失败的经验总结)
  2. 如何解决安装或者卸载时 临时文件夹已满或不能访问
  3. CSS3浏览器前缀,背景大小,位置,渐变以及过渡效果
  4. Python 实现局域网视频聊天工具
  5. 【安信可首款4G模组CA-01直连阿里物联网平台②】一机一密认证方式连接
  6. Oceans (where feet may fail)
  7. 洛谷-P1107 [BJWC2008]雷涛的小猫
  8. PyCharm 下载安装及配置使用详细图文教程
  9. matlab用我爱你绘制立体桃心,用MATLAB画心形图案
  10. ironman钢铁侠高清mac动态壁纸