首页 > 编程语言 >剑指RSA——量子计算Shor算法对经典密码体制的威胁

剑指RSA——量子计算Shor算法对经典密码体制的威胁

时间:2024-11-19 23:18:54浏览次数:3  
标签:Shor 计算机 RSA 算法 计算 量子

  

整数分解是数论中一个古老且复杂的问题,当今世界上最著名且广泛使用的RSA公钥密码体制,其安全性依赖于对极大整数进行因数分解的困难性。经典计算机在分解极大整数时所需的时间成本与信息价值不成正比,这使得RSA算法的安全性得以维持。然而,随着量子计算的迅猛发展,传统的经典密码体制的安全性正面临着严峻挑战。迄今为止,最有希望破解RSA的方法就是Shor的量子算法[1]。本文围绕Shor算法对RSA算法的威胁展开讨论,以Shor算法攻破RSA算法为重点进行研究。首先介绍了RSA算法的基本原理及其安全性依赖。随后,概述了量子计算的基本概念和Shor算法的核心思想,详细解释了Shor算法如何高效地解决整数分解问题。通过理论分析和模拟实验,展示了Shor算法如何破解RSA算法,强调了当前量子计算能力的发展对经典密码体制的现实威胁。本文的研究旨在为理解量子计算对经典密码体制的影响提供参考,引起人们对量子计算威胁的关注,并促进相关安全技术的发展和应用。

关键词:量子计算;经典密码体制;RSA算法;Shor算法;安全性威胁

目  录

1. 引言

1.1 研究背景

1.2 研究意义

2. RSA算法及其安全性

2.1 RSA算法概述

2.2 RSA算法的安全性依赖

3. 量子计算基础

3.1 量子计算的基本概念

3.1.1量子比特、叠加态和纠缠态

3.1.2量子寄存器

3.1.3量子门和量子电路

3.2 量子计算机的架构和挑战

4. Shor算法及其实现

4.1 Shor算法的基本原理

4.1.1问题转换——Order Finding问题

4.1.2量子傅立叶变换求 f(x)的周期。

4.2 Shor算法关键步骤

4.3 Shor算法的实现

4.3.1环境搭建

4.3.2模拟实验关键代码解析

4.3.3模拟实验结果分析

5. Shor算法对RSA的威胁

5.1 理论分析

5.2 实际影响

5.3 防御措施

6. 结论与展望

6.1 研究总结

6.2 未来研究方向

参考文献

  1. 引言

1.1研究背景

密码学有着悠久的历史,从古代简单的替换和转置密码,到现代复杂的对称和非对称加密算法,一直在信息保护中发挥着关键作用。随着计算机和通信技术的迅速发展,密码学也得到了快速演进。对称密钥密码体制(如DES和AES)在保护数据安全方面得到了广泛应用,但在密钥分发和管理方面存在一些挑战。为了解决这些问题,20世纪70年代末,公钥密码体制应运而生,通过使用公钥和私钥实现了更灵活和安全的通信。

RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出,是第一个可以用于加密和数字签名的公钥算法。RSA基于大整数分解问题的困难性,其安全性依赖于找到两个大素数的乘积的计算难度。RSA算法在网络通信、电子商务、电子邮件加密、虚拟专用网络和数字签名等领域得到了广泛应用,成为现代信息安全的基石。针对RSA算法进行的破解工作也一直在研究中,2005年人们利用数域法分解了一个一进制200位的大合数(665位的RSA)[2]。这是现在世界大合数因子分解的世界纪录。而目前对于一般应用RSA选用1024位的大数,重要应用选用2048位的大数。达到1024位的大数分解是当前的传统计算机难以处理的。

随着量子计算技术的快速发展,RSA算法的安全性面临着前所未有的挑战。量子计算能够高效解决大整数分解问题,对RSA算法构成了严重威胁。量子计算的研究始于20世纪80年代初。著名物理学家Feynman[4]在1982年提出了普适量子模拟器的概念[5],并指出未来的量子计算机可能在某些方面优于传统计算机,同时指出了经典计算模型无法有效模拟量子模型的困难,预言了量子计算可能会颠覆现有的计算理论。Deutsch[6]描述了一种可以模拟任何有限可实现物理系统的量子计算模型——量子图灵机模型和量子线路模型。Andrew Yao证明了Deutsch的量子图灵机与量子线路多项式计算的等价性,使得研究人员可以用线路来描述量子算法[7]。受到Simon的启发,Peter Shor于1994年提出了大整数分解和离散对数问题的多项式时间量子算法[3],这使得部分经典计算难题可以在量子计算机上以多项式时间算法解决。由于这一算法对基于RSA的密码体制构成了威胁,因此量子计算机引起了人们空前的关注。

1.2研究意义

随着信息技术的不断发展,保护数据安全变得愈发重要。长期以来,我们对RSA算法等经典密码体制的安全性充满信心,这是因为它们依赖于大整数分解等困难数学问题。然而,随着量子计算技术的崛起,这些传统密码体制面临前所未有的挑战。因此,研究量子计算对经典密码体制的影响具有重要意义。

深入研究量子计算对密码学的挑战过程可以帮助我们更好地了解量子计算的潜在威胁,并为应对措施提供指导。这种研究将引起对密码学安全性的关注,进而推动密码学技术的创新,为信息安全提供更加可靠的保障。因此,研究量子计算对经典密码体制的影响具有重要的理论和实践意义,对于推动信息安全技术的发展和维护网络空间的安全稳定具有积极的促进作用。

在传统的经典计算机上模拟量子计算机是一个巨大的挑战。如果将所有系数存储在普通计算机中并进行计算,所需的内存和计算时间将随着粒子数量的增加而指数级增长。一旦达到10或20个粒子,传统计算机就无法胜任了。目前,量子计算机仿真器只能模拟非常小规模的量子计算机,并且效率有限,但足以展示量子计算机算法背后的一些概念。因此,在量子计算机实际应用之前,借助量子计算机仿真器在经典计算机上验证量子算法的有效性变得特别重要。因此,用经典计算机实现量子计算的仿真具有重要的科研价值。Shor算法的研究为现有的密码加密技术带来了挑战,同时也为密码学的未来发展提供了新的方向和概念。本文将对Shor算法进行理论分析,然后利用现有的仿真器和仿真方式进行模拟实现,希望这些研究能够对量子计算的发展起到一定的推动作用。

2. RSA算法及其安全性

2.1 RSA算法概述

RSA 加密算法是目前广泛使用的一种公钥加密系统,由Rivest,Shamir 和 Adleman 于 1978年在美国麻省理工学院研制出来的(RSA是三位设计者的名字首字母的组合),是迄今为止理论上最为成熟和完善的一种公钥密码体制。所谓公钥加密系统,就是可以分为公开的“公钥”和保密的“私钥”。两者在生成时是成对的,公钥加密的信息,只能其对应的私钥才能解密。

下文将从RSA加密基础知识、算法原理及加密、解密过程介绍RSA算法。

密钥配制过程:首先选择一对不同的大素数p与q,使得N=pq;随机选一个与欧拉函数ϕ(N)=(p-1)(q- 1)互素的奇数e,计算它对于ϕ(N)的模逆d,即可以用辗转相除法,计算 d使得ed=1modϕ(N) ,最后现成公钥P(e,N),私钥S(d,N)。

图2-1 密钥配制过程

Fig.2-1 key configuration process

加密过程: 使用(e,N)对明文m进行加密,加密算法为:c=memod N;这里的c即是m 加密后的密文。

解密过程:使用(d,N)对密文c进行解密,解密算法为:m= cdmod N,求得的 m 即为对应干密文c的明文。

图2-2 加解密过程

Fig.2-2 encryption and decryption process

因为d是e对ϕ(N)的模逆,即ed=1modϕ(N),所以存在某个整数k,使得 ed=1+kϕ(N),故cd=med=m1+kϕ(N)=mmkϕ(N)modN,根据欧拉函数的性质,有mϕ(N)=1modN,所以mkϕ(N)=1modN,最后cd=m mod N。

2.2 RSA算法的安全性依赖

RSA算法利用了数论领域的一个基本事实:将两个大质数相乘生成一个合数非常容易,但将一个合数分解为其质因数却非常困难。RSA如何保证加密后信息的安全性?它的安全性关键在哪里?从2.1节的过程可以看出,RSA算法的安全性关键在于N是否能被分解。如果我们能够将N分解为质数p和q,就可以计算出欧拉函数ϕ(N) = (p - 1)(q - 1),结合公开的加密指数e,就能推导出私钥d进行解密。这样,使用对应公钥加密的信息都能被解密,从而攻破RSA算法。

然而,合数分解问题目前仍然是数学领域的重大难题,至今没有任何高效的分解方法。RSA算法的安全性依赖于大整数因数分解的难度。这种难度主要体现在经典计算机进行大整数因数分解时所需的时间成本远远高于其信息价值。计算机科学家认为,经典计算机无法在实际可行的时间内分解超过2048位的数字。然而,Gidney和Ekera展示了量子计算机如何利用2000万个量子比特进行计算,并证明这样一个装置只需8小时就能完成分解计算。尽管实现2000万量子比特的量子计算机目前仍遥不可及,但减少算法运行所需资源的优化研究正在不断进行。量子计算机对RSA的威胁在于其能够高效地进行因数分解(以多项式时间复杂度完成),这就是为什么量子计算机对现有网络通信和安全构成了潜在挑战。

3. 量子计算基础

3.1 量子计算的基本概念

3.1.1量子比特、叠加态和纠缠态

量子计算的基本单位是量子比特(qubit)。与经典计算机的比特不同,量子比特不仅可以表示0和1,还可以同时处于0和1两种状态的叠加态。数学上,量子比特的状态可以用|0〉和|1〉的线性组合表示,即 |ψ〉= α|0〉 + β|1〉,其中α和β是复数,且满足|α|² + |β|² = 1。这种叠加态使得量子计算能够在并行计算上具有巨大的潜力[8]。在量子计算机中,我们无法准确测定量子比特处于哪一个量子态,也就是无法确定α、β的准确值。量子力学告诉我们,只能获得这个量子比特越来越多的信息,但无法完全确定其状态。我们只能说"|ψ〉为|0〉的概率为|α|2”,|ψ〉为|1〉的概率为|β|2,这个量子比特的状态可介于|0〉和|1〉之间的任何量子态上。

量子纠缠是另一种独特的量子现象。当两个或多个量子比特处于纠缠态时,即使它们相距很远,一个比特的状态变化会立即影响到其他纠缠的比特。纠缠态是量子计算中许多算法和协议的核心,使量子计算能够进行高效的信息处理和通信。

3.1.2量子寄存器

n个量子位的有序集合称为n位量子寄存器[9],它的系统态是n个量子位态的张量

积,用符号表示,它的表达式如下:

|ψ〉是2n 维 Hilbert 空间的单位向量,它有2n 个相互正交的基本态。

因此,在量子计算机中,处于叠加态的n位量子寄存器中的数是从0到2n-1的所有数它们各以一定的概率同时存在。在常规计算机中,1个n位的寄存器只能保存1个n位二进制数;而在量子计算机中,1个n位的量子寄存器可以保存2n个n位二进制数。量子寄存器位数的线性增长使存储空间指数增长,这是量子计算机的一个基本特点。量子寄存器中态的测量可以通过测量寄存器中的各个量子位的态来完成,每个量子位的态的测量都是对各自基本态进行的。在测量量子寄存器的态时,其叠加态坍缩。n位量子寄存器虽然可以存储2n个n位数,但在测量时,只能测量某一个n位数。

3.1.3量子门和量子电路

量子计算通过量子门来操作量子比特。量子门是用于改变量子比特状态的基本操作,可以类比为经典计算中的逻辑门。常见的量子门包括:Hadamard门(H门):将量子比特置于均匀的叠加态。Pauli-X门:类似于经典的NOT门,翻转量子比特的状态。CNOT门(控制非门):在控制比特为1时翻转目标比特的状态。相位门(S门和T门):改变量子比特的相位。

下面给出涉及较多的两个门电路示例:

Hadamard门(H-gate):这是一个单qubit门,其矩阵表示为

其电路表示为

控制-U门(C-U gate):该门由两部分组成,其中U门是给定的可以作用于多qubit输入(|ψ〉)的酉正变换,而U门是否触发则由上面的控制qubit|c〉来决定,如果|c〉=|1〉,则U门对其输入|ψ〉施加作用,输出 U|ψ〉,若|c〉=|0〉,则U门令其输入无害通过,输出|ψ〉。控制qubit则直接通过。

量子电路是由一系列量子门按特定顺序排列而成,用于实现复杂的量子计算任务。通过设计量子电路,可以实现各种量子算法。

3.2 量子计算机的架构和挑战

量子计算机的硬件架构与经典计算机不同,主要包括以下几个部分:

①量子处理器:由量子比特组成,执行量子计算。量子处理器通常在极低温环境下工作,以减少热噪声和环境干扰。

②量子比特控制系统:用于产生和控制量子比特状态的信号,通常通过微波脉冲或光脉冲进行控制。

③量子态测量系统:用于读取量子比特的状态,测量结果是概率性的,需多次测量取平均值。

④纠错和校准系统:量子计算机容易受到噪声和误差的影响,纠错和校准系统用于确保计算的准确性。

尽管量子计算具有巨大的潜力,但在实际实现中仍面临许多挑战:

①量子比特的稳定性:量子比特非常脆弱,容易受到环境噪声和干扰,需要极低温度和真空环境来保持其稳定性。

②量子态的操控:精确操控量子比特状态非常困难,需要高精度的控制系统和复杂的量子门操作。

③量子纠错:量子计算过程中的误差累积问题需要通过量子纠错码来解决,但现有的纠错码实现成本高、效率低。

④可扩展性:目前实现的量子比特数量有限,难以满足实际应用需求。构建具有大规模量子比特的量子计算机仍是一个巨大的挑战。

这些基础概念和实现挑战构成了量子计算研究的重要内容,并为未来量子计算技术的发展提供了方向。

4. Shor算法及其实现

4.1 Shor算法的基本原理

4.1.1问题转换——Order Finding问题

给定两个互质的数N和a,求使得 ar=1modN的最小整数r,这就是所谓的Order Finding问题。如果 ar=1modN,那么很显然 a2r,a3r......也对N取模为1。a的幂取任意整数 x=kr+j进一步推论,ax= akr+j=akraj=ajmodN。定义函数 f(x)=axmodN ,那么这个函数的值其实是以r为周期的,即 f(x)=f(x+r)。因此Order Finding问题就相当于找到这个函数f(x)的周期。

例如N=15,a=7,那么 f(x)=7xmod15函数的值:

x

0

1

2

3

4

5

6

...

f(x)

1

7

4

13

1

7

4

...

所以,7对15模的order是4,因此这个函数的值是以4为周期不断重复。

那么,求解分解问题和Order Finding问题怎么转化呢?如果N是偶数,那么已经找到了一个因子2,问题解决;如果N不是偶数,那么从1到N-1中随机选一个和它互质的数a,求x对N的order,ar=1modN;然后,如果求到的r是偶数,那么我们有:ar=(ar/2)2=1modN,

因此(ar/2)2−1=0modN,等式左边可以分解为 (ar/2−1)(ar/2+1),而它们的乘积能被N整除。因此, ar/2−1和 ar/2+1这两个数至少有一个含有和N的公约数。所以我们要做的,就是用它们分别与N求最大公约数:gcd(ar/2−1,N),gcd(ar/2+1,N)。两个最大公约数中,必然能找到N的非平凡因子。如果r是奇数,则回到第2步重新选a,不断重复,直到得到一个偶数的r。 因为每次选到的x求出的r为奇偶数的概率是二分之一,这样重复几次,就能以很高的概率得到偶数的r,从而求出N的因子。

下面给出因子分解的算法流程:

·算法名称: 因子分解到求阶的规约

·输入:一个合数N

·输出:N 的一个不平凡因子

·运行时间:O((log N)3)个运算,成功的概率是 O(1)

·过程:

1. 若N是偶数,返回因子2。

2. 确定对a≥1和b≥2是否有N= ab。如果是,返回因子a。

(因为如果N是偶数,或者N是某个质数的幂,那么已经找到了它的因子,问题解决)

3. 随机地在1到N−1范围内选择a,若gcd(a,N)>1,则返回因子gcd(a,N)。

4. 利用求阶子程序,求a模N的阶r。即计算a对N模的order,即满足 armodN=1

的最小正整数r。

5. 若r是偶数且ar/2 ≠ −1(mod N),则计算gcd(ar/2−1,N),gcd(ar/2+1,N),并且测试

出这两个数中哪个是不平凡因子,如果有一个是因子则返回该数。否则,算法失败。返回步骤3重新选择a。

假如要分解的数N=15,我们随机选了一个与它互质的数a=7,在前面的讨论中我们已经知道 74=1mod15,因此7对15模的order是4。然后我们分别计算:gcd(74/2+1,15)=gcd(49+1,15)=5;gcd(74/2−1,15)=gcd(49−1,15)=3。这样我们就成功的得到了15的非平凡因子5和3。

上面这些步骤中,除了Order Finding外,其他步骤都可以在经典计算机上用多项式时间解决。所以,如果我们能高效的解决Order Finding问题,也就能高效的解决大数因式分解问题了。而这关键的一步,需要用到量子计算,因此Shor算法的核心,就是用量子计算机找到a对N模的order。

4.1.2量子傅立叶变换求 f(x)的周期

离散Fourier变换的定义:

·输入:一个复向量 x0,…,xN-1,向量长度N为固定参数

·输出:复向量 y0,…,yN-1

如果我们记 ω=e2πi/N,那么上面的定义可以简写成:

量子Fourier变换:

·输入:基态 |k〉

·输出:

同理:

假如我们的系统有n个量子位,那么计算基态2n个:|0〉,|1〉,…,|2n−1〉。(这里每个基态都是n个量子位组成的n位二进制数,用十进制数来表示。)

例如系统由2个量子位组成,每个量子位有 |0〉,|1〉两个基态,那么我们的系统就有4个基态, |0〉,|1〉,|2〉,|3〉,用二进制数表示的话就是 |00〉,|01〉,|10〉,|11〉。

量子傅里叶变换的作用,就是把原来的基态|x〉变成一组新的基态 |y〉

QFT变换后的基态 |y〉,用矩阵表示的话就是这样的:

假如只有1个量子位,n=1,那么两个计算基态 |0〉,|1〉经过QFT后就会变成

QFT得到的结果是傅里叶变换的近似,而它的精度就取决于使用的量子位的数量。量子位越多,变换的精度就越高。

4.2 Shor算法关键步骤

用量子计算机求解Order Finding问题,实质上是要找到函数 f(x)=ax mod N的周期r。Shor算法的第一步,是构造函数f(x)对应的可逆变换 Uf(这里的 |x〉,|y〉都是多个量子位组成的寄存器):

然后对它测量,得到某个值y,那么这个y值与 q=2n(n个量子位)之间的比值,会非常接近某个整数k与周期r的比值。

再细化的具体步骤如下(涉及寄存器方面)

在Shor算法中,通常需要两个量子寄存器:一个用于存储等权叠加态,另一个用于执行量子傅立叶变换(QFT)。量子寄存器的每个量子比特都可以同时表示0和1的状态,通过量子叠加原理,一个含n个量子比特的寄存器可以同时表示从0到2n−1的所有整数。

首先,第1个寄存器x:初始为 |0〉,然后通过一个多位的H门,把它制备成 |0〉,|1〉,|2〉,…,|2n−1〉的等权叠加态

第2个寄存器y:初始化为 |y〉=|1〉。于是在输出端,第2个寄存器就会变成 |yf(x)〉=|f(x)〉=|axmodN〉

用4.1.1的例子,N=15,a=7,那么 f(x)=7xmod15函数的值:

x

0

1

2

3

4

5

6

...

f(x)

1

7

4

13

1

7

4

...

7对15模的order是4,因此这个函数的值是以4为周期不断重复。

假如在第2个寄存器输出端对它进行测量,得到的是 f(x) 的某个值,也就是上面表中的第2行的某个值,我们称它为 z 。所以这个z的取值只可能是 1, 7, 4, 13 其中之一,假设我们在第2个寄存器上测到了某个 z=4 ,因为第1个寄存器存的是函数 f(x) 的参数x,在输入端,它被制备成 |0〉,|1〉,…|2n−1〉的叠加态,经过对第2个寄存器的测量,f(x) 的值已经坍缩到了 z=4 ,所以这时候如果我们测量第1个寄存器,得到的x值必须是满足 4=7xmod15的某个数,也就是 2, 6, 10, 14, … 之一。换句话说,这时如果我们放着它不测量,它现在的状态就是 |2〉,|6〉,|10〉,…的等权叠加态!即我们在输出端测量第2个寄存器,使它坍缩到某个值z,这样第1个寄存器的状态就会变成 满足 z=axmodN的所有x的叠加态。

如果第2个寄存器的测量坍缩到值z,而l是满足almodN=z的最小整数,那么第1个寄存器的状态就变成了 |l〉,|l+r〉,|l+2r〉,…,|l+Ar〉的叠加态:

A是在 0到2n−1内 总共有多少个周期 (即小于 (2n−1)/r的最大整数)

下一步,就是对Uf的输出做量子傅里叶变换:对 |α〉做量子傅立叶变换,再测量,用连分数算法求得r。

图4-1 求周期图

Fig.4-1 order-finding chart

4.3 Shor算法的实现

4.3.1环境搭建

Cirq[10] 是一个 Python 框架,由 Google Quantum AI 团队发布,用于编写、操作和优化量子电路,然后在量子计算机和量子模拟器上运行它们。Cirq 是主要用于含噪中型量子的计算机开源框架,为处理当今含噪声的中等规模量子计算机提供了有意义的思路。

Cirq 算法框架能够让研究人员为特定的量子处理器编写量子算法,用户可以对量子电路的精确控制,将量子门适当地放置于设备上,并在量子硬件的约束范围内对这些量子门进行调度。为了编写和编译量子电路,Cirq 的数据结构是专门优化过的,能够让开发者更加充分地利用 NISQ 架构。另外,Cirq 支持在本地模拟器上运行这些算法,并可以轻松地与量子硬件或更大的规模的云端模拟器集成起来,为实验成果提供了很好的延续性。

目前量子技术处于高速发展的时代,Cirq 框架能够很好的适应过渡期,为 NISQ 新时代带来许多有参考意义的发展方向,以及对量子生态建设做出贡献。因此本实验使用Cirq 来模拟量子算法实验。

4.3.2模拟实验关键代码解析

量子模幂运算:

这个类表示将基数的指数乘以目标数取模给定模数的酉操作。更准确地说,它表示计算模幂运算 x**e mod n 的酉操作 V:

V|y〉|e〉 = |y * x**e mod n〉 |e〉     0 <= y < n

V|y〉|e〉 = |y〉 |e〉                  n <= y

其中,y是目标寄存器,e是指数寄存器,x是基数,n是模数。因此,

V|y〉|e〉 = (U**e|r〉)|e〉

其中,U是如下定义的酉操作:

U|y〉 = |y * x mod n〉      0 <= y < n

U|y〉 = |y〉                n <= y

量子求阶算法(也就是Shor算法的量子部分)使用量子模幂运算与量子相位估计一起计算 x 对于模数 n 的阶数。

  1. class ModularExp(cirq.ArithmeticGate):  
  2.   
  3.     def __init__(  
  4.         self, target: Sequence[int], exponent: Union[int, Sequence[int]], base: int, modulus: int  
  5.     ) -> None:  
  6.         if len(target) < modulus.bit_length():  
  7.             raise ValueError(  
  8.                 f'Register with {len(target)} qubits is too small for modulus {modulus}'  
  9.             )  
  10.         self.target = target  
  11.         self.exponent = exponent  
  12.         self.base = base  
  13.         self.modulus = modulus  
  14.   
  15.     def registers(self) -> Sequence[Union[int, Sequence[int]]]:  
  16.         return self.target, self.exponent, self.base, self.modulus  
  17.   
  18.     def with_registers(self, *new_registers: Union[int, Sequence[int]]) -> 'ModularExp':  
  19.         if len(new_registers) != 4:  
  20.             raise ValueError(  
  21.                 f'Expected 4 registers (target, exponent, base, '  
  22.                 f'modulus), but got {len(new_registers)}'  
  23.             )  
  24.         target, exponent, base, modulus = new_registers  
  25.         if not isinstance(target, Sequence):  
  26.             raise ValueError(f'Target must be a qubit register, got {type(target)}')  
  27.         if not isinstance(base, int):  
  28.             raise ValueError(f'Base must be a classical constant, got {type(base)}')  
  29.         if not isinstance(modulus, int):  
  30.             raise ValueError(f'Modulus must be a classical constant, got {type(modulus)}')  
  31.         return ModularExp(target, exponent, base, modulus)  
  32.   
  33.     def apply(self, *register_values: int) -> int:  
  34.         assert len(register_values) == 4  
  35.         target, exponent, base, modulus = register_values  
  36.         if target >= modulus:  
  37.             return target  
  38.         return (target * base**exponent) % modulus  
  39.   
  40.     def _circuit_diagram_info_(self, args: cirq.CircuitDiagramInfoArgs) -> cirq.CircuitDiagramInfo:  
  41.         assert args.known_qubits is not None  
  42.         wire_symbols = [f't{i}' for i in range(len(self.target))]  
  43.         e_str = str(self.exponent)  
  44.         if isinstance(self.exponent, Sequence):  
  45.             e_str = 'e'  
  46.             wire_symbols += [f'e{i}' for i in range(len(self.exponent))]  
  47.         wire_symbols[0] = f'ModularExp(t*{self.base}**{e_str} % {self.modulus})'  
  48.         return cirq.CircuitDiagramInfo(wire_symbols=tuple(wire_symbols))

电路由三个步骤组成:

1.将目标寄存器初始化为|0..01〉和指数

寄存器为叠加状态。

2.使用模幂运算。

3.逆量子傅立叶变换,将特征值放到指数寄存器。

  1. def make_order_finding_circuit(x: int, n: int) -> cirq.Circuit:  
  2.      
  3.     L = n.bit_length()  
  4.     target = cirq.LineQubit.range(L)  
  5.     exponent = cirq.LineQubit.range(L, 3 * L + 3)  
  6.     return cirq.Circuit(  
  7.         cirq.X(target[L - 1]),  
  8.         cirq.H.on_each(*exponent),  
  9.         ModularExp([2] * len(target), [2] * len(exponent), x, n).on(*target + exponent),  
  10.         cirq.qft(*exponent, inverse=True),  
  11.         cirq.measure(*exponent, key='exponent'),  
  12.     )  

4.3.3模拟实验结果分析

图4-2 实验结果

Fig.4-2 experimental result

Shor 量子算法虽然是个比较成熟的算法,但是还是存在着一些微小的不足之处。那就是Shor 算法分解成功率的问题在Shor的分解中并不是只要大数N满足了条件就一定能得到想要的结果。Shor 算法是一种随机算法,它不能保证每次运算都能得到正确的结果。只是能使得得到正确结果的概率无限接近于 1。比如结果,分解15,它随机出现了3或5,每次结果不唯一。

普通计算机方法验证结果:

图4-3 实验验证

Fig.4-3 experimental verification

5. Shor算法对RSA的威胁

5.1 理论分析

   Shor算法利用量子计算的优势,可以在多项式时间内完成大整数的因数分解,这是传统算法难以比拟的。这意味着,理论上,一个足够强大的量子计算机能够在实际可操作的时间内破解RSA加密。

经典算法在处理大整数分解问题时,效率通常随着整数大小的增加而急剧下降,特别是在整数达到几百位时。量子算法,尤其是Shor算法,通过利用量子叠加和量子纠缠的原理,能够同时处理多种可能的因数分解路径,大幅提高计算效率。

5.2 实际影响

尽管理论上量子计算机能够破解RSA,但当前的量子技术还未达到实用化的水平。目前的量子计算机还处于“噪音中等规模量子”(NISQ)阶段,只有几十到几百个量子比特,并且受到错误率和相干时间的限制。尽管如此,随着技术的进步,量子计算机的能力在持续增长,未来可能对RSA构成实际威胁。

近年来,多个研究团队和企业已经在量子计算领域取得了显著进展。例如,本源量子团队完成了密码量子破译相关算法与软件研发,成功减少了运行算法所需的量子比特数量,并且这一技术已达到国际先进水平。此外,本源量子云平台推出了全球首款Shor量子算法破解密码的演示应用,展示量子计算将如何影响现代密码体系:

图5 本源量子破解密码演示

Fig.5 Demonstration of Original Quantum Cracking Cryptography

Shor算法主要针对整数分解问题。在现实世界中,该算法有望在以下领域发挥作用:

(1)密码学:Shor算法能够快速分解大整数,从而破解现有的加密体制,如RSA加密算法。这使得量子计算在密码学领域具有重要的应用价值。

(2)数论:Shor算法可以为数论研究提供一种高效的方法,例如在素数检测、循环分解等问题中发挥作用。

(3)计算复杂度:Shor算法的研究有助于深入了解计算复杂度理论,尤其是量子计算与经典计算之间的差异。

5.3 防御措施

随着量子计算的威胁日益增加,研究人员正在开发所谓的后量子密码学(Post-Quantum Cryptography, PQC),这些新算法设计能够抵抗量子计算机的攻击。国际标准化组织如NIST正在进行后量子密码学标准的选择和评估过程,以确保网络通信的安全能够抵抗未来的量子攻击。

目前,后量子密码学的研究集中在几个主要方向,包括格密码学等。这些算法各有优缺点,但共同目标是在量子计算普及前提供足够的安全保障。

对于企业和政府等大型组织,建议逐步过渡到后量子密码体制。这包括评估现有系统的安全性,选择合适的后量子算法,以及更新软件和硬件设施。此外,还需要对关键人员进行培训,确保他们了解后量子技术的重要性和应用方式。

这些措施是为了保障在量子计算时代,敏感数据和通信的安全,防止未来潜在的量子攻击。

6. 结论与展望

6.1 研究总结

Shor算法诞生于量子算法的质变阶段,量子计算的纠缠与叠加特性使量子算法具有重大应用价值。相对成熟的经典算法其算力与效率依然不能媲美量子算法,由此基于经典算法逻辑设计的安全性也因量子计算技术的发展受到威胁。Shor算法就是著名的量子算法之一,它出现代表着量子计算机将能以强大的算力高效破解已被广泛使用的公开密钥加密方法(即RSA算法)。

首先,本文对RSA算法及其安全性进行了详细介绍。RSA算法是目前最为广泛使用的公开密钥加密方法之一,其安全性基于大整数分解问题的困难性。但是,Shor算法的出现使得使用量子计算机可以高效地解决大整数分解问题,从而对RSA算法的安全性构成了潜在威胁。

其次,介绍了量子计算的基本概念、架构和挑战。量子计算机采用量子比特来存储和处理信息,具有纠缠和叠加等特性,因此其运算能力远超经典计算机。然而,量子计算机还面临诸多挑战,例如量子比特的稳定性、量子纠错和量子门操作的实现等。

接着,阐述了Shor算法的基本原理、关键步骤和实现过程。Shor算法是一种高效求解大整数分解问题的量子算法,其核心思想是利用量子算法搜索周期。我们详细介绍了Shor算法的原理和流程,并分析了Shor算法在实际量子计算机上的实现过程。

最后,探讨了Shor算法对RSA算法的威胁。从理论角度上分析了Shor算法对RSA算法的安全性构成的威胁,并讨论了Shor算法对实际RSA加密系统的影响和可能的危害。同时,提出了相应的防御措施和建议。

6.2 未来研究方向

量子计算有着无可比拟的优势,但是实现起来却极其困难。如在常规计算机中,数据的读出和复制是很容易实现的操作,而在量子计算机中,由于量子叠加态在测量时的坍缩和量子态的不可克隆性,使得实现这些操作极其困难,甚至不可实现[11],量子计算距离实际,应用还有很多困难需要克服。不过2001年已经有人实现了15=3x5的Shor量子算法。而在2007年我国中国科技大学淄建伟、杨涛、陆朝阳也在研制量子计算机方面获得关键性突破,可以预计在不久的将来,量子计算机-定会成为现实。

Shor 算法尽管已是一种成熟的算法,并在理论上破解了 RSA,但由于随机性,它破解 RSA 的成功率不高[12]。受现有技术的制约,很多内容只停留在理论上,应该深入研究更高效、更安全的密码算法研究。

首先,需要进一步深入探究量子计算的基本原理和应用,包括量子纠错、量子门操作、量子算法设计和量子网络等方面。只有深入理解量子计算的基本原理和技术,才能够更好地利用和开发量子计算机的能力。

其次,需要解决量子计算中的技术难题,例如量子比特的稳定性和制备、量子纠错和量子门操作的实现等。这些技术难题是限制量子计算机发展的瓶颈,解决这些问题将为量子计算的发展提供更为坚实的基础。

最后,需要开发更为安全的公开密钥加密算法,以应对量子计算带来的安全威胁。当前的公开密钥加密算法基本上都依赖于大整数分解等困难问题,而量子计算机可以高效地解决这些问题。因此,需要开发新的公开密钥加密算法,以应对量子计算带来的安全挑战。

参考文献

  1. 王亚辉,颜松远. 一种新的攻击RSA的量子算法[J]. 计算机科学,2016,43(04):24-27.
  2. 文卉,胡剑波.RSA公钥密码的威胁-Shor量子算法[J].舰船电子工程,2008,(07):137-138+165.
  3. Shor W P . Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer[C]//中国高等科学技术中心.Quantum Entanglement and Quantum Information--Proceedings of CCAST (World Laboratory) Workshop.[出版者不详],1999:28.
  4. Feynman R P. Simulating Physics with Computers. Int. J. Theor, Phys. 21, 467, 1982.
  5. Feynman R P. Quantum Mechanical Computer.Found Phys,1986,16: 507-531.
  6. D Deutsch.Quantum Theory:The Church 一 Furing Principle and Universal Quantum Computer[J].Proc R Soc[c]. 1985.97—117.
  7. 彭卫丰.Shor量子算法的优化及模拟实现[D].江南大学,2008.
  8. 李建平,梁胜松,范友贵.基于量子神经网络的超深层储层评价[J].计算机与数字工程,2018,46(12):2499-2505.
  9.  EKERTA K. Quantum cryptography based on Bell’s theorem[J ].Physical Review Letters,1991,67 (6):6612663.
  10. 张娟."谷歌开源量子算法框架Cirq." 科研信息化技术与应用 9.04(2018):96.
  11. 文卉,胡剑波.RSA公钥密码的威胁-Shor量子算法[J].舰船电子工程,2008,(07):137-138+165.
  12. 凃玲英,胡一凡,张洪涛,等.对Shor算法破解RSA的探讨[J].华侨大学学报(自然科学版),2015,36(06):640-644.
  13. 吉丽丽,叶季青.分解大数质因子的量子算法——Shor算法[J].信息安全与通信保密,2006,(02):88-89+92.
  14. 张兴兰,张丰.量子求解欧拉函数破解RSA算法[J].信息网络安全,2023,23(07):1-8.

标签:Shor,计算机,RSA,算法,计算,量子
From: https://blog.csdn.net/weixin_62697873/article/details/143897651

相关文章

  • [C#] Bgr24彩色位图转为Gray8灰度位图的跨平台SIMD硬件加速向量算法
    将彩色位图转为灰度位图,是图像处理的常用算法。本文将介绍Bgr24彩色位图转为Gray8灰度位图的算法,除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在X86及Arm架构上运行,且均享有SIMD硬件加速。一、标量算法1.1算法实现对于彩色转灰度,由于人眼对红......
  • 【算法】(简单题)1.数字字符串相乘
    #include<stdio.h>#include<stdlib.h>//包含malloc和free的头文件#include<string.h>//包含字符串相关操作的头文件//定义字符串乘法函数char*multiply(constchar*num1,constchar*num2){//定义结果字符串指针char*ans=NULL;longres......
  • 深入理解 LMS 算法:自适应滤波与回声消除
    深入理解LMS算法:自适应滤波与回声消除在信号处理领域,自适应滤波是一种重要的技术,广泛应用于噪声消除、回声消除和信号恢复等任务。LMS(LeastMeanSquares)算法是实现自适应滤波的经典方法之一。本文将详细介绍LMS算法的原理,包括公式推导,并通过Python代码示例展示其在......
  • 【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味
    文章目录C++模拟题详解:基础题解与细致分析前言第一章:基础练习1.1替换所有的问号(easy)解法(模拟)C++代码实现易错点提示时间复杂度和空间复杂度1.2提莫攻击(easy)解法(模拟+分情况讨论)C++代码实现易错点提示时间复杂度和空间复杂度1.3N字形变换(medium)解法(模拟+找......
  • 代码随想录算法训练营day51| 卡码网99.岛屿数量 卡码网100.岛屿的最大面积
    学习资料:https://www.programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#思路深度优先搜索和广度优先搜索今天用的邻接矩阵学习记录:卡码网99.岛屿数量(深搜or广搜;用一个自己设计的二维矩阵来控制节点的移动方向:上下左右)点击查看代码fromcollectionsimportdequedi......
  • 【算法】AC 自动机
    1.算法简介AC自动机,是用来多模式匹配串的算法。最好可以做到\(O(\sum|t_i|\times|\sigma|+|s|)\)。(预处理\(O(\sum|t_i|\times|\sigma|)\),查询时间复杂度为\(O(|s|)\))。2.算法流程AC自动机可以处理这样的问题:给定\(n\)个匹配串和一个模式串,求出模式串中出现了......
  • 2024年11月一区SCI-逃离优化算法Escape Algorithm-附Matlab免费代码
    引言本期介绍了一种受人群疏散行为的启发的元启发式优化算法,称为逃离优化算法EscapeAlgorithm,ESC。该算法于2024年11月最新发表在JCR1区,中科院2区TopSCI期刊 ArtificialIntelligenceReview。ESC的灵感来自于人们在紧急疏散期间的行为。本节解释人群疏散系统的背景,以及......
  • QOJ #8232. Yet Another Shortest Path Query
    题面传送门我感觉这个题很牛逼!提供了一种全新的视角!首先考虑这个平面图怎么用。因为平面图的边数满足\(m\leq3n-6\),所以一个平面图一定存在一个点度数\(\leq5\)。我们每次删掉这样的一个点,并删掉所有以这个点为端点的边,则剩下的图还是一个平面图,这样不断删除下去就可以得到......
  • 海马优化算法(SHO)优化BP神经网络原理及MATLAB代码复现
    目录0引言1数学模型2优化方式3MATLAB代码3.1伪代码3.2SHO主函数代码3.3SHO-BP0引言海马优化算法(Sea-horseoptimizer,SHO)是ShijieZhao等人于2023年提出群智能算法,该算法模拟了海马的运动、捕食和繁殖行为。在前两个阶段,SHO分别模拟了海马的不同运动模式和概......
  • 海马优化算法(SHO)优化支持向量机网络原理及MATLAB代码复现
    目录0引言1数学模型2优化方式3MATLAB代码3.1伪代码3.2SHO主函数代码3.3SHO-SVR、SHO-SVM0引言海马优化算法(Sea-horseoptimizer,SHO)是ShijieZhao等人于2023年提出群智能算法,该算法模拟了海马的运动、捕食和繁殖行为。在前两个阶段,SHO分别模拟了海马的不同运......