• 素数与密码学的关系


    素数被利用在 密码学 上,所谓的 公钥 就是将想要传递的信息在编码时加入砠数,编码之后传送给收信人,任何人栶到此信息后,若没有此收信人所拥有砄 密钥 ,则解密的过程中(实为寻找素数的蠇程),将会因为找素数的过程( 分解质因数 )过久而无法解读信息。

    哪些数是素数

    人们很难捕捉到素数的分布规律。素数之间的间隔要多大有多大,对于无论多大的自然数n,总是存在两个素数,它们之间的距离大于n而且其间没有素数。理由很简单,对于n,以下n个整数是相继排列的,而且都是合数:(n+1)!+2,(n+1)!+3,…(n+1)!+(n+1)。可见在(n+1)!+1和(n+1)!+(n+2)之间没有素数。

    几千年来,历代数学家都希望能找到一个数学公式,把全部素数都表示出来。欧拉找到公式N=n2+n+41,当n=-40,-39,…0,1,…39时,N都是素数,只有80个素数。后来有人证明,N=n2+n+72491,当n=0,1,2,…11000时都是素数,也只有一万多个。可以证明,整系数多项式是不可能用来表示全部的素数,而不表示合数的。

    十七世纪费马猜测,2的2n次方+1,n=0,1,2…时是素数,这样的数叫费马素数,可惜当n=5时,232+1就不是素数,至今也没有找到第六个费马素数。

    18世纪发现的最大素数是231-1,19世纪发现的最大素数是2127-1,20世纪末人类已知的最大素数是2859433-1,用十进制表示,这是一个258715位的数字。

    素数与密码

    本世纪七十年代,几位美国数学家提出一种编码方法,这种方法可以把通讯双方的约定公开,然而却无法破译密码,这种奇迹般的密码就与素数有关。

    人们知道,任何一个自然数都可以分解为素数的乘积,如果不计因数的次序,分解形式是唯一的。这叫做算术基本定理,欧几里得早已证明了的。可是将一个大整数分解却没有一个简单通行的办法,只能用较小的素数一个一个去试除,耗时极大。如果用电子计算机来分解一个100位的数字,所花的时间要以万年计。可是将两个100位的数字相乘,对计算机却十分容易。美国数学家就利用了这一点发明了编制容易而破译难的密码方式。这种编码方式以三位发明者姓氏的首字母命名为RSA码。

    例如,A、B两位通讯者约定两个数字N和e,A想要将数字M发给B,他不是直接将M发出,而是将M连乘e次,然后除以N,将余数K发给B。B有一个秘密的数字d,连A也不知道,他将K连乘d次,然后除以N,得到的余数就是原来的数M。

    数字是这样选择的,N=p×q,p、q是选定的两个大的素数,选取e、d,使ed-1是(p-1)×(q-1)的倍数,而且使e和p-1、q-1没有公因数,这是容易做到的。根据这个方法,编码规则可以公开,可是由于N太大,分解得到p、q几乎是不可能的,他人也就无从知道d,不可能破译密码了。

    RSA提出后,三位发明家曾经公布了一条密码,悬赏100美元破译,他们预言,人们至少需要20000年,才能破译,即使计算机性能提高百倍,也需要200年。但只过了不到18年,这个密码就被人破译,意思是:“The magic words are squeamish ossifrage”。这个密码如此快的破解,是因为全世界二十多个国家的六百多位工作者自发联合起来,利用计算机网络,同时进行因式分解,并不断交流信息,汇总计算结果,用了不到一年的时间,就将129位的N分解成64位和65位的两个素数的积。计算机网络将分解效率提高了近万倍,这是发明者当初没有预想到的。但是,如果提高位数到200或300位,工作量将会大的不可思议,即使计算机技术有重大突破,破译也几乎不可能。

  • 相关阅读:
    swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
    swift 第十三课 GCD 的介绍和使用
    swift 第十二课 as 的使用方法
    swift 第十一课 结构体定义model类
    swift 第十课 cocopod 网络请求 Alamofire
    swift 第九课 用tableview 做一个下拉菜单Menu
    swift 第八课 CollectView的 添加 footerView 、headerView
    swift 第七课 xib 约束的优先级
    swift 第六课 scrollview xib 的使用
    swift 第五课 定义model类 和 导航栏隐藏返回标题
  • 原文地址:https://www.cnblogs.com/macliu/p/10942285.html
Copyright © 2020-2023  润新知