RSA加密 VS 秀尔算法

作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分解出公约数,从而打破了RSA算法的基础(即假设我们不能很有效的分解一个已知的整数)。同时,秀尔算法展示了因数分解这问题在量子计算机上可以很有效率的解决,所以一个足够大的量子计算机可以破解RSA。

RSA加密“曾经”之所以强大,是因为它对极大整数做因数分解的难度决定了RSA算法的可靠性。将两个质数相乘是件很容易的事情,但要找到一个庞大数字的质因子却非常困难。这便是大量现代科技的依靠之处,RSA加密就是凭借其简洁性迅速风靡。

然而,有一种技术可以让RSA加密无用武之地。秀尔算法可以破解RSA,但是怎样才能让它真正见效呢?

我们这里并非建议你同时尝试所有可能的质因子。

而是使用(相对)简洁的语句:

如果我们快速找到下面这个周期函数的周期,

 f(x) = m^x (mod N)

我们便可以破解RSA加密。

秀尔五步走

那么,秀尔算法究竟是怎样工作的呢?在秀尔五步法中,只有一步需要是需要用到量子计算机的,其他的步骤则都可以采用传统方法解决。

第一步:

使用传统最大公约数分解(gcd)算法,也就是辗转相除法。N是你需要尝试的因子,m则是一个小于N的随机正整数。

如果gcd(m,N)=1,则继续。一旦你使用gcd找到一个因子,你便能获得一个非凡因子,然后结束。

第二步:

找到周期 P

m mod N, m^2 mod N, m^3 mod N

这是使用量子计算的一步。

第三步:

如果周期P是奇数,回到第一步,选择另一个随机整数。如果不是,继续下一步。

第四步:

检验

如果成立,则继续第五步;反之,回到第一步。

第五步:

解得一个非凡素因数N的值,然后你便能破解RSA加密了。

第二步是怎样实现的?

然而,量子计算机是如何找到函数周期的?这又为什么如此重要?

我们来看一下周期 P :

m mod N, m^2 mod N, m^3 mod N

(由于这是一个指数函数,我们可以将一个复杂的质数转换成双曲正弦、余弦然后得到周期)

这个发现周期的过程需要依赖量子计算机同时计算许多状态的能力,也就是状态的“叠加”,因此我们能找到方程的周期。

我们需要这么做:

1、应用Hadamard gate来创建一个量子叠加态
2、量子转换使方程生效
3、执行量子傅立叶变换

与传统情况类似,在这些转化之后,一个测量值将会产生一个近似方程周期的值(你可以获得“波峰”,就像傅立叶变换中的,而准确性会更高一点)。使用量子傅立叶变换,我们能够解决排序和因数问题,这二者相同。量子傅立叶变换可以让一台量子计算机进行相位估计(酉算子特征值的近似值)。

当你完成量子部分(第二步)的时候,你可以检查一下周期的有效性,然后使用另一个传统的最大公约数算法得到密钥的质因素。

有趣的是,由于这项技术并不是在于找到所有潜在质因数,而是找到潜在周期,你就不必尝试很多随机数直到找到一个成功的质因数N。如果P是奇数,那你不得不回到第一步,这里

K是一个不同于N的质因素。因此,即使你加倍密钥长度(N),寻找质因数也不会出现放缓的情况。RSA是不安全的,同样加倍密钥长度也不能帮你抵御量子计算的汹涌来袭,而保障安全。

“破解RSA-2048(2048-bit)的密钥可能需要耗费传统电脑10亿年的时间,而量子计算机只需要100秒就可以完成。” 
                                                          ——Dr. Krysta Svore, 微软研究院

量子傅立叶变换被用于建立量子线路,使得秀尔算法的物理实现成了量子计算机最为轻松的任务之一。

量子傅立叶变换:青出于蓝

秀尔算法的核心是发现顺序,这样便可以减少阿贝尔的隐子群问题,使用量子傅立叶变换便可以解决。——NIST 量子世界

量子傅立叶变换是许多量子算法的关键所在。它并不加速寻找传统傅立叶转变,但是能够在一个量子振幅内执行一个傅立叶变换。在一台量子计算机上可以指数增长般快速处理量子傅立叶变换。虽然超过了直接映射经典傅立叶变换的范畴,量子计算机也可以做其他的事。例如,解决隐子群问题(也就是解决离散对数问题),或是计数问题(解决了这个问题就可以解决现代密码学中很多其他形式的密码)。更重要的是,量子傅立叶变换可以应用到机器学习、化学、材料科学或者模拟量子系统。

秀尔算法中只有一个步骤是需要在量子计算机上完成的,其他的都可以在普通的超级计算机上完成。量子计算机运行完子程序后就会将结果返回给超级计算机让它继续完成计算过程。量子计算机可能永远不会是单独存在的,而是一直和超级计算机配合执行任务,经过这样的配合它们就可以破解RSA密钥。

因为篇幅有限,很多数学细节和证明过程就不再赘述了,如果你对这些数学解释感兴趣,如果你具备线性代数、群论、高等数学的知识,你可以看看这些:

Quantum Computer Science

Quantum Information and Quantum Computation

NIST Quantum Zoo — 一个所有量子算法的列表

秀尔算法:破解RSA加密的“不灭神话”的更多相关文章

  1. 秀尔算法:破解RSA加密的“不灭神话” --zz

    http://netsecurity.51cto.com/art/201508/488766.htm RSA加密曾被视为最可靠的加密算法,直到秀尔算法出现,打破了RSA的不灭神话. RSA加密 VS ...

  2. “不给力啊,老湿!”:RSA加密与破解

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...

  3. RSA算法原理与加密解密 求私钥等价求求模反元素 等价于分解出2个质数 (r*X+1)%[(p-1)(q-1)]=0

    Rsapaper.pdf http://people.csail.mit.edu/rivest/Rsapaper.pdf [概述Abstract 1.将字符串按照双方约定的规则转化为小于n的正整数m, ...

  4. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  5. 基于OpenSLL的RSA加密应用(非算法)

    基于OpenSLL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...

  6. 电信级的RSA加密后的密码的破解方法

    一直以来,电信通过HTTP劫持推送广告的方式已经存在了很多年了,这种手段至今并未停止.这种手段月光博客曾经有多次曝光,见<电信级的网络弹出广告>.<获取了电信恶意弹出广告的罪证> ...

  7. 【加密】RSA加密之算法

    RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的. RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥, ...

  8. RSA加密解密算法

    /** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...

  9. 基于OpenSSL的RSA加密应用(非算法)

    基于OpenSSL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...

随机推荐

  1. Deep Learning 论文解读——Session-based Recommendations with Recurrent Neural Networks

    博客地址:http://www.cnblogs.com/daniel-D/p/5602254.html 新浪微博:http://weibo.com/u/2786597434 欢迎多多交流~ Main ...

  2. [c#基础]集合foreach的必要条件和自定义集合

    引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...

  3. 关于1Byte 1K 1M 1G(换算)

    1个字节等于8位二进制 .... 1byte=8bit 1K = 1024 byte =1024byte*8b 说白一点就是 1M等于1024个K组成,而1K又等于1024B,所以1M等于1024K乘 ...

  4. setter方法的内存错误

    - (void)setList:(ClassicList *)list { self.list = list; _titleLabel.text = list.activityName; _addre ...

  5. Java虚拟机的功能

    1:通过ClassLoader寻找和装载class文件 2:解释字节码成为指令并执行,提供class文件的运行环境.即将字节码转换为不同OS下可执行的机器码指令. 3:进行垃圾回收. 4:提供与硬件交 ...

  6. BZOJ-1800 飞行棋 数学+乱搞

    这道题感觉就是乱搞,O(n^4)都毫无问题 1800: [Ahoi2009]fly 飞行棋 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1172 So ...

  7. myeclipse 部署应用

    昨天把MyEclipse10给安装上了,今天想在MyEclipse下启动Tomcat并在浏览器中看到写的Web页面,但是当在浏览器中输入地址时,出现了404错误,出现这个错误的原因是因为没有找到指定的 ...

  8. windows ubuntu双系统启动

    开始安装系统 1.安装系统 首先安装windows8和ubuntu12.04,安装先后顺序可以不用管,只是安装到ubuntu的分区时需要注意device for boot loader install ...

  9. LABJS使用教程

    知道LABJS这个概念其实早于sea.js,但因为sea.js是中文,并且第一眼就喜欢上sea.js的CommonJS所以并没有深入了解过LABJS. 在使用sea.js的时候不可避免的碰到js文件依 ...

  10. hdu 2045 不容易系列之(3)—— LELE的RPG难题

    解题思路: f(n)=1,2,.....n-2,n-1,n 前n-2个已经涂好,那么n-1有两种可能 1.n-1与n-2和1 的颜色都不同 1 粉,   n-2 红,   n-1 绿.  那么n的颜色 ...