量子计算 18 量子算法3 (RSA & Shor)

终于来到了激动人心的Shor’s质数分解算法的环节,这可以说是有史以来最伟大的算法之一了。应该需要几次推送才能看完,其重大意义在于,假如量子计算机可用的情况下,其可以破解当前最流行的RSA加密算法。今天先看看相关数论基础,RSA简介,及Shor’s质数分解简介。

1 数论简单基础

1.1 质数分解

  • 定理:每个正整数都有唯一的质数分解, N = p 1 e 1 … p k e k N=p_1^{e_1}\dots p_k^{e_k} N=p1e1pkek(Euclid, 300BC)
    我们关注一个特殊情况,即 N = p q N=pq N=pq, 其中 p ≠ q p\ne q p=q是很大的质数,另外 n = ⌈ log ⁡ 2 N ⌉ n=\lceil \log_2N \rceil n=log2N是表达 N N N所需的比特数,我们用 n n n来讨论复杂度。

注意,质数有无限多个,且在 N N N以内的质数数目大概是 N ln ⁡ N \frac{N}{\ln N} lnNN个,虽然可以看出数越大出现质数的概率越低,因为其比线性慢点,但是也没慢多少,当数目较大时,大概可以认为1000个里面出一个质数。

如果采用遍历和试错方法,需要花费 ∼ N = ∼ 2 n / 2 \sim\sqrt{N}=\sim2^{n/2} N =∼2n/2,即指数时间,取根号是因为,如果可以分解为两质数之积,那肯定有个是小于 N \sqrt{N} N 的。

目前已知的最快的质数分解算法NFS(Number Field Sieve),使用high-powerd elliptic curve理论,也需要 ∼ exp ⁡ ( n 1 / 3 ) \sim \exp(n^{1/3}) exp(n1/3)时间,这个算法在NSA美国安全局肯定得到了使用。因此,目前,至少没有公开的多项式时间算法来做质数分解

但是,通常认为质数分解问题不是NP完全问题,但是其困难性也是进行RSA公钥加密的基础

1.2 Multiplicative group mod p

Multiplicative group mod p,记为 Z p × = { i ∣ 0 < i < N , gcd ( i , p ) = 1 } \mathbb{Z}^{\times}_p=\{i|0<i<N, \text{gcd}(i,p)=1\} Zp×={i∣0<i<N,gcd(i,p)=1},即小于p,且跟p互质的数的集合;或者由 1 , … , p {1,\dots,p} 1,,p在乘法 × \times ×和取余mod p的操作下产生的集合,如下图 Z 5 × \mathbb{Z}^{\times}_5 Z5×的每个元素,都是自己和自己相乘然后对5取余数,如 4 × 4  mod  5 = 1 4\times 4 \text{ mod } 5=1 4×4 mod 5=1在这里插入图片描述
定义 ∣ Z p × ∣ = ϕ ( N ) |\mathbb{Z}^{\times}_p|=\phi(N) Zp×=ϕ(N)为"Euler totient function"即欧拉函数。

对于质数 p p p,其Multiplicative group mod p的元素个数 ϕ ( N ) = p − 1 \phi(N)=p-1 ϕ(N)=p1,对于合数 N = p q N=pq N=pq ϕ ( N ) = ( p − 1 ) ( q − 1 ) \phi(N)=(p-1)(q-1) ϕ(N)=(p1)(q1)

1.3 费马小定理

对于任意质数 p p p,和整数 x x x,且 x x x不是 p p p的倍数,则 x p − 1 ≡ 1  (mod p) x^{p-1}\equiv 1 \text{ (mod p)} xp11 (mod p)费马小定理从Multiplicative group mod p的角度去理解,即认为对于 p − 1 p-1 p1的集合,我从里面取任意一个数,将指数变成 p − 1 p-1 p1,就变成了1,这个可以用该集合的相关理论去证明。

Euler’s Identity

这个相当于费马小定理的一个拓展,对于整数 N N N及和其互质的 x x x x ϕ ( N ) ≡ 1  mod N  x^{\phi(N)}\equiv 1 \text{ mod N } xϕ(N)1 mod N 

如果 N = p q N=pq N=pq,则 ϕ ( N ) = p q − p − q − 1 \phi(N)=pq-p-q-1 ϕ(N)=pqpq1,则知道 ϕ ( N ) \phi(N) ϕ(N)就能有效率的分解 N N N,即 ϕ ( N ) \phi(N) ϕ(N)包括了对 N N N做质数分解的秘密。

1.4 一些经典数论算法

Primality,质数判断

  • 虽然质数分解是指数复杂度很难,但是判断一个数是不是质数就没这么难了,可以在多项式时间内完成。但是其只能判断是否为质数,对于合数也不会给出其分解的信息。
  • 在RSA的密钥生成时是需要这么判断的。
  • 从1970s就有了多项式复杂度的随机算法,2002年AKS也提出了确定行的多项式复杂度的确定性算法(人家还是个本科生,想想觉得自己是废物)
  • 大概思路是进行费马测试,选一个相对于 N N N互质的 x x x,看看 x N − 1 ≡ 1  mod p  x^{N-1}\equiv1 \text{ mod p } xN11 mod p 是否成立,不成立就说不是质数;当然不成立不能作为充分条件,比如 561 = 3 × 11 × 17 561=3\times 11 \times 17 561=3×11×17就能通过这个测试,但是经过另外一些神奇的已经证明的操作,也是可以证明其可以发展成一个多项式算法来判断是否为质数。

Euclid’s GCD algorithm,最大公约数算法

最大公约数算法我们应该都了解过,就是 gcd(a,b)=gcd(a,b mod a) \text{gcd(a,b)=gcd(a,b mod a)} gcd(a,b)=gcd(a,b mod a),这样可以将数字指数性的减小,因此在 min ⁡ { log ⁡ a , log ⁡ b } \min\{\log a,\log b\} min{loga,logb}迭代次数内就能完成,也是多项式时间。

Repeated squaring,高效指数运算

我们发现需要经常计算 x y mod N x^y \text{mod N} xymod N这种操作,如果 y y y是很大的数如 exp ⁡ ( n ) \exp(n) exp(n)就很难算了。更好的方法是,将 y y y分解为2的指数的和,这个就是计算机里面的表达方式,还是很好分解的,通过不断的平方操作来计算,如图所示:
在这里插入图片描述
可以看出,也是在指数的速度就把这个指数操作算完了,所以其复杂度也是对 log ⁡ N = n \log N=n logN=n呈多项式复杂度的。

2 RSA加密算法

  • 基本场景:张三想给在淘宝上买东西,因此要把自己的账户密码啥的信息发给淘宝;
  • 准备工作:假设淘宝用的是RSA加密算算法,那淘宝会先生成一些大的随机的质数,因为大质数大概1000个里头出一个,且判断是否质数也是多项式时间,所以这个过程可以有效率的完成。假设生成的质数 p ≡ 2  mod 3 p\equiv2 \text{ mod 3} p2 mod 3,即 p − 1 p-1 p1 q − 1 q-1 q1不是3的倍数,这些质数也很多,因为mod 3也就1和2两种情况。
  • 淘宝发给张三一个数 N = p q N=pq N=pq,这个是公开发布的,黑客也可以监听到,这个数就叫做公钥。
  • 张三用 N N N来加密自己的信息 x x x,当然会往 x x x里面放入一些随机的信息,以免有重复的序列被破解。加密后得到 y = x 3  mod N y=x^3 \text{ mod N} y=x3 mod N,然后发送 y y y到淘宝,黑客可以监听到 y y y,也知道 N N N,但是计算离散的立方根是个很难的问题,所以黑客无法有效率的破解到 x x x。当然3也可以换成别的,但是3是第一个发现可以的指数。
  • 淘宝得到了 y y y,淘宝就可以很有效率的破解到 x x x,因为淘宝知道 N = p q N=pq N=pq,那淘宝怎么破解呢?淘宝首先取 k = 2 ϕ ( N ) + 1 3 k=\frac{2\phi(N)+1}{3} k=32ϕ(N)+1,这是个整数,因为 ϕ ( N ) = ( p − 1 ) ( q − 1 ) ≡ 2  mod 3 \phi(N)=(p-1)(q-1)\equiv2 \text{ mod 3} ϕ(N)=(p1)(q1)2 mod 3;然后淘宝计算 y k  mod  N = x 3 k  mod  N = x 2 ϕ ( N ) + 1  mod  N = x y^k\text{ mod }N=x^{3k}\text{ mod }N=x^{2\phi(N)+1}\text{ mod }N=x yk mod N=x3k mod N=x2ϕ(N)+1 mod N=x,这一步由前面的Euler’s identity公式可得
    在这里插入图片描述
    注意
  • 破解RSA是否一定要分解质数,这还是个待解答的问题,但是能分解质数肯定就能破解是毋庸置疑的

3 Shor算法概要

3.1 History

Shor’s algorithm,这个其实和前面的Simon有点关系,这个故事和投稿被拒有关系(相信广大硕博士生们深有同感),Simon想了个新算法想投个会议,结果被拒了,因为人家觉得量子计算机还没谱你搞这些算法,用查询复杂度搞这些东西没啥用(这种否定最痛苦了!)。

但是,有个会议委员叫Peter Shor还挺喜欢这个文章的,于是Shor好心的建议Simon让他把论文改改,改成一个能解决Period finding(周期寻找)的算法;然后,Shor又发现,非常的“Obviously”,这个周期寻找算法可以解决质数分解问题,所以第二年Shor就发明了Shor算法,当然,Shor认为的显然,估计跟北大韦神认为的很简单差不多。。。

3.2 Procedures

  1. 第一步,把质数分解问题,转化为周期寻找问题,这一步Shor认为是显然的,当然我们不会这么认为。。。
  2. 第二步,通过量子傅里叶变换QFT,以 O ( 1 ) O(1) O(1)查询复杂度解决周期寻找问题
  3. 第三步,建立QFT的量子电路,用 n O ( 1 ) = log ⁡ n O ( 1 ) n^{O(1)}=\log n^{O(1)} nO(1)=lognO(1)个量子门
  4. 第四步,把冰箱门关上,用Continued Fraction Algorithm把QFT的输出变成质数分解的结果,然后大象就装冰箱里了

3.3 Notes

  • Shor算法并没有证明一定实现superpolynomial加速,因为质数分解的复杂度也没得到证明
  • Shor算法可以证明实现了周期寻找的superpolynomial加速,而周期寻找问题相当于解决质数分解的一个黑箱,但不一定是唯一黑箱
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值