热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

大整数分解因子算法——Dixon的随机平方算法

大整数分解因子算法——Dixon的随机平方算法许多分解因子算法的理论依据是这样的事实:假设我们可以找到x≢y(modn)x\not\equiv\pmy\pmod
大整数分解因子算法——Dixon的随机平方算法

许多分解因子算法的理论依据是这样的事实:

假设我们可以找到x≢±y(modn)x\not\equiv \pm y\pmod{n}x±y(modn),但是有x2≡y2(modn)x^{2}\equiv y^{2}\pmod{n}x2y2(modn)。那么有
n∣(x−y)(x+y)n|(x-y)(x+y) n(xy)(x+y)
但是n∤(x+y)n\nmid (x+y)n(x+y)n∤(x−y)n\nmid (x-y)n(xy),所以gcd(x+y,n)gcd(x+y,n)gcd(x+y,n)gcd(x−y,n)gcd(x-y,n)gcd(xy,n)都是nnn的非平凡因子。

Dixon的随机平方算法也是利用这个事实进行设计的。

算法思想

我们先描述出随机平方算法的大致全貌,再分点详细讨论细节问题。

  1. 假设我们事先找到一个集合BBB称为因子基,BBB中包含了bbb个最小的素数(bbb是适当选取的一个数);
  2. 我们通过某种方法得到了若干个整数zzz,使得z2modnz^{2}\mod{n}z2modn的所有因子都在集合BBB中;
  3. 将某些zzz相乘使得因子基中的每个素数出现偶数次,这样就可以得到一个x2≡y2(modn)x^{2}\equiv y^{2}\pmod{n}x2y2(modn)的式子,根据这个式子可以得到nnn的一个分解

通过例子看看具体的流程:

n=15770708441n=15770708441n=15770708441,并且取的b=6b=6b=6,那么B={1,3,5,7,11,13}B=\lbrace 1,3,5,7,11,13\rbraceB={1,3,5,7,11,13},找到三个zzz确定出如下三个方程:
83409341562≡3×7(modn)120449429442≡2×7×13(modn)27737000112≡2×3×13(modn)8340934156^{2} \equiv 3\times 7\pmod{n}\\ 12044942944^{2} \equiv 2\times 7\times 13\pmod{n}\\ 2773700011^{2} \equiv 2\times 3 \times 13\pmod{n} 834093415623×7(modn)1204494294422×7×13(modn)277370001122×3×13(modn)
把上式两边同时相乘得到
(8340934156×12044942944×2773700011)2≡(2×3×7×13)2(modn)(8340934156\times 12044942944 \times 2773700011)^{2} \equiv (2\times 3\times 7\times 13)^{2}\pmod{n} (8340934156×12044942944×2773700011)2(2×3×7×13)2(modn)

95034357852≡5462(modn)9503435785^{2} \equiv 546^{2}\pmod{n} 950343578525462(modn)
利用Euclidean算法,计算
gcd(9503435785−546,n)=115759gcd(9503435785-546,n)=115759 gcd(9503435785546,n)=115759
所以得到nnn的一个因子为115759.


几个关键问题


  1. 如何选择zzz才能使得z2modnz^{2}\bmod{n}z2modn的所有因子都在集合BBB中。

    这里没有完全绝对的方法,只能给出几个技巧。一种技巧是简单地随机选择一些zzz,计算z2modnz^{2}\bmod{n}z2modn,这也是随机平方法名字的由来;二是使用行如j+⌈kn⌉,j=0,1,2,⋯,k=1,2,⋯j+\lceil \sqrt{kn} \rceil,j=0,1,2,\cdots,k=1,2,\cdotsj+kn

    ,j=0,1,2,,k=1,2,,这些整数的平方模nnn之后,通常很小,因子容易落在BBB中;另外可以使用行如⌊kn⌋\lfloor \sqrt{kn} \rfloorkn

    的整数,这些数在模nnn之后,比nnn小一点,这意味着−z2-z^{2}z2是很小的,只要我们把-1加入BBB中,就可以容易地在BBB上分解z2z^{2}z2

  2. 选择哪些zzz才能使得那些zzz相乘后,因子基中的每个素数出现偶数次。

    假定B={p1,⋯,pb}B=\lbrace p_{1},\cdots,p_{b}\rbraceB={p1,,pb}为因子基。设ccc为稍大于bbb的整数(比如c=b+1c=b+1c=b+1,c=b+2c=b+2c=b+2),且假定我们已经得到ccc个同余方程:
    zj2≡p1α1j×p2α2j×⋯×pbαbj(modn)z_{j}^{2}\equiv p_{1}^{\alpha_{1j}} \times p_{2}^{\alpha_{2j}} \times \cdots \times p_{b}^{\alpha_{bj}}\pmod{n} zj2p1α1j×p2α2j××pbαbj(modn)
    其中1≤j≤c1\le j \le c1jc。对于每个jjj,考虑向量
    αj=(α1jmod2,⋯,αbjmod2)∈(Z2)b\alpha _{j} =(\alpha_{1j}\bmod{2},\cdots,\alpha_{bj}\bmod{2})\in (\mathbb{Z}_{2})^{b} αj=(α1jmod2,,αbjmod2)(Z2)b
    如果我们可以找到{aj}\lbrace a_{j}\rbrace{aj}的子集使得其模2的和为向量{0,0,⋯,0}\lbrace 0,0,\cdots,0\rbrace{0,0,,0},那么对应的zjz_{j}zj的乘积将会使用BBB中每个因子偶数次。


例子

在这里插入图片描述
在这里插入图片描述
3. BBB该怎么选。

BBB的选取比较复杂,如果b=∣B∣b=|B|b=B取得越大,整数z2z^{2}z2似乎更容易在BBB上分解。但是bbb越大,为了找到一个等式需要累积很多同余式。具体方法我们就不赘述,有兴趣的可以参考书籍——Stinson D , 斯廷森, 冯登国. 密码学原理与实践[M]. 电子工业出版社, 2009.


推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了如何在不使用SearchBar display controller的情况下,单独使用SearchBar并捕获其textChange事件。作者介绍了实际状况,即左侧SliderMenu中的SearchBar需要在主页TableView中显示搜索结果。然后,作者提供了解决方案和步骤,帮助读者实现这一功能。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
author-avatar
蛮妞妞小公主切_292
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有