更多安全資訊和分析文章請關注啟明星辰ADLab微信公眾號及官方網站(adlab.venustech.com.cn)
為了更通俗易懂,本文涉及的公式推導都儘量詳細,力求高中水平就能看懂,你既不需要懂密碼學,也不需要懂量子力學也能明白算法的精髓。本文將詳細分析Shor算法的實現過程,整數周期數及非整數周期數下Shor算法分析,Shor算法概率評估,實例分析。不得不說,量子計算以及量子計算機是一個很龐大的知識體系,個人水平有限,此處我們僅僅就單純地圍繞Shor算法本身進行探討分析,不考慮退相干對算法的影響,也不考慮物理實現。
一個量子可以同時處於兩種狀態的疊加(比如自旋向上和自旋向下),這種疊加態測量的瞬間就會隨機變為一個確定的態(測量得到自旋向上),這個過程叫波函數的坍塌。我們如果將這兩個態表示為0,1,而每種態觀測後出現的概率幅(注意不是概率,概率幅的平方為概率)為,那麼這個量子可以表示為:
這裡叫狄拉克符號,表示量子態,為基態,+表示疊加,兩種態的概率幅平方和為1,即。而我們通常說的量子計算就是通過量子邏輯門來操作處於疊加態的量子。比如Hadamard門,簡稱H門(在量子計算中非常重要),他的一個主要功能就是通過計算基態產生等概率的疊加態。通過H門變換後的單量子疊加態為:
兩種基態的坍塌概率都為 ,兩個量子的H門得到的結果如下:
每個態坍塌的概率 ,對於n個量子的H門變換後:
其他量子門這裡就不做介紹了,本文暫時不會涉及,想更深入了解可以到維基上看。
https://en.wikipedia.org/wiki/Quantum_logic_gate
量子門及其對應的門矩陣如下圖:
還有一個比較重要的複合門是受控U(a,x)門,想深入了解的看這篇文章:一隻冰牙喵:4.2 受控操作。
不過這裡看不懂沒關係,我們只需要知道受控U門可以用於計算以a為基底的冪,其一般用於生成指數函數值。

量子並行運算(Quantum Parallelism)是基於量子疊加態(Quantum Superposition)和幺正變換實現的。量子計算正是有了數據的可疊加性和幺正變換,從而決定了一次操作即可改變全部數據。比如有量子寄存器,存了10個處於疊加態的量子,在通過運算時只需要一次性操作這10個量子,但是由於可疊加性,這10個量子疊加態可以表示2^10個基矢,一次操作10個量子,相當於一次對2^10個基矢進行了操作,這就大大提高了運算的速度。
在經典計算中,並行性的核心思想是將一個計算任務分配給多個處理器同時運行,要快於使用一個處理器來運行。在理想的情況下,將工作分配給K 個處理器就應該使計算時間縮短為原來的1/K。但是現實肯定不是這樣的,真實的任務往往具有串聯性,只有部分具有並聯性的子任務才能夠做並行運算。由於量子計算的特點是數據的可疊加性質和操作的幺正變換本質,從而就決定了量子計算的語義特徵是完全意義上的通過一次操作即可改變全部數據的並行計算。將一個N 位量子寄存器中的 個數據同時通過一次幺正變換(即進行一次運算)所需的時間定義為 ,而經典計算中對一個數據進行運算的時間為 ,因為一次量子計算就對所有的數據做了並行處理,所以量子計算加速能力可以表示為
如果 ,那麼加速能力 ,也就是說對量子計算機做一次運算,相當於對經典計算機做 次運算。
量子計算機是嚴重依賴於優秀的量子算法的實現,雖然通用量子計算機能做經典計算機的所有事情,但是只有在處理特定問題上量子計算才具有決定性的優勢,目前已經有很多優秀的量子算法,其中對大數因子分解,離散對數問題以及更一般的隱含子群問題的解決有着開創性和重大影響的量子算法便是本文要詳細分析的Shor算法。
本文將非常詳細的分析Shor算法來讓各位明白量子計算在解決特定問題上的巨大優勢。
二、Shor算法分析
在費曼提出量子計算機概念不到15年的時間,shor通過研究出的量子算法給世人了一劑強心針,自從shor算法出來後,人類開始加速了量子計算機的研製,各大頭部企業也紛紛加入了量子計算機的量子競賽行列。
shor算法最令人振奮的是直接將質因子分解以及離散對數問題以指數級速度提升,這給人們的啟示是可以利用同樣算法思想來解決更為廣泛的隱含子群問題。
我們知道RSA是基於經典計算機大數質因式分解的指數複雜度的困難而設計的一種非對稱加密算法,目前最優的因子分解算法為指數複雜度 。而通過shor量子算法可以以多項式複雜度完成大數因式分解,從而可以快速破解RSA算法。那麼Shor算法是如何發揮如此威力的,簡單來說,Shor算法的核心依賴於三個變換即H變換,U變換,QFT(量子傅立葉),接下來我們一步一步的分析。
Shor算法量子實現線路簡圖:

我們設RSA的公鑰為 (e,N) ,私鑰為 (d,N) ,那麼生成公私鑰的過程如下:
首先我們需要將大數因子分解問題轉化為以求待分解的合數N為模的函數 的周期問題。
設周期函數 的周期為r(這裡a為小於N,且與N互質的整數),則有:f(x)=f(x+r) , 那麼:
設整數 ,則
例如:設 N=15,a=7 ,則:
設量子比特長度為 L, 則總共可以表示的 個基態, 設N為要分解的合數,為了確保 長度內有足夠的周期數,我們需要滿足
兩個寄存器展開形式如下:
由於 f(x) 為周期函數,設周期為r,A為總長中存在的周期數,則
設l為小於一個周期內的x的值, x=l+Ar, 則整個系統的態實際為:
因此,x可以表示為
然後對reg2進行計算基上的測量,設測量結果設為 Z ,測量Z在reg1中的投影變化為:
經過投影后
上式可以變換為:
A.整數周期
在(2)式的[ ]中,在 是 的整數倍情況下變成,出現相長干涉,求和後為 ,如果不為整數,則為相消干涉,其值趨於0. 所以
當 時,我們通過等比數列轉化得到:
帶入(0)式得:
由於 ,也就是說,當 ,也即不為整數,則為相消干涉,其值為0。
通過量子傅里葉變換後得到如下疊加態
測量 的值, 等概率 地選擇出一個態。由 得:
如果有 , r 就可以從 的不可約分數求出。
B. 非整數周期
不能整除 r 的情況下,那麼在x值範圍內的周期數A便不是整數,此時我們加入微調參數 稍作調整,使得 為整數,設
因此(2)式的[ ]為:
這裡 的值極小,該值用於逼近函數的峰值,我們再令
因此(3)式的平方表示為
由於
因此
所以得到 的概率為
這裡,為了嚴謹討論,我們設 小於等於1/2(如果大於1/2,可以認為是下一個整數 ),所以這是適用於所有情況的
由(4)(5)得:
當
,必位於原點與點 連線的上方,所以
而對於任意 , 為凸函數,有:
又因 ,因此:
所以,測量 的概率為
最後,我們來討論測量值 ,有
所以
這裡 已測得,這裡嚴格存在一個分數 ,可由 的連分數展開求出(下一個節將通過實例說明),通過約分滿足 就可得到 r 的值,gcd算法的成功率為
三、實例分析
雖然上面已經分析得很透徹了,但是估計還是有人覺得會太抽象,所以下面我以一個例子來進行實例分析,以幫助理解。
對於 ,N=91,a=4,那麼
f(1)=4,f(2)=16,f(3)=64,f(4)=74,f(5)=23,f(6)=1
所以周期為 r=6, ,,然後根據2,3式我們計算得到:
這裡, 是我們測量得到值,如果這個值為0,那麼對於我們求周期r是沒有意義的,所以除開這種情況下,測得其他值的概率和為0.623。如果測量的值為13653,那麼我們來計算0.833312的連分數。
1/0.833312=1.200031,
1/0.200031=4.999225,
1/0.999225=1.000775,
1/0.000775=1290.322580
這裡遇到大數1290,我們就終止,最後我們得到連分數為
那麼我們就可以確定 k=5,r=6 了嗎,那有沒可能 k=10,r=12 呢,所以,我們不能單純的通過一次測量來確定周期,我們來考察其他幾項,我這裡不再一一去展開了,懶人可以在這裡去計算(連分數計算 -連分數計算器-分數計算器)。
因此,如果我們將shor算法多執行幾次,最後求出各個分母的最小公倍數,那麼這個最小公倍數就是我們要找的周期r,有了周期r,我們就不難求出合數N的質數因子了,進而也能夠比較容易破解RSA算法了。
四、離散對數問題簡析(不感興趣可以略過,有時間補充)
通過對shor算法原理的剖析,我們可以知道,對於任何具備轉化為求周期函數的周期為目標的問題都可以用同樣算法以指數加速來快速解決,比如離散對數(ElGamal), ECC之類的非對稱加密算法都可以用同樣的思想來解決。
離散對數多說兩句,Shor在其原始論文中對於素域上的離散對數問題,給出了一個基於整數求階量子計算算法求解算法,成功率為1/480。Shor指出在解決素域上的離散對數問題時,其實並沒有利用到素域的特性,因而對有限域上的離散對數問題也同樣成立。後來Eicher和Opku給出了一個在多 項式時間內以1/480的成功率攻擊橢圓曲線離散對數問題的量子計算算法。
設一個階為 p ,且生成器 為g 的群(),如果,那麼對於部分 ,我們希望得到 r ,那麼 r 就是離散對數 .
比如EIGamal加密,對於隨機大大素數P,以及隨機數x,滿足
這裡 (y,g,P) 為公鑰, x 為私鑰。我們將長度為我們將長度為, 的消息分組為
那麼計算密文
這裡c1,c2為加密後的密文,那麼解密過程如下:
簡單推一下
考慮abelian 群(每一個因子對應於值的模加)。那麼函數
這給我們呈現了一個abelian 隱含子群問題,同時可以看出映射 f 是一個群同態。kernel為 (r,1) 的倍數,所以如果我們能找到kernel,我們就能夠找 r。
對於函數,設周期為 和 ,那麼
因此,我們只要通過量子算法求得周期 就可以得到 r 。使用量子算法處理離散子群問題,和我們前面講解的方法非常類似,後續有時間再分析吧。
參考文章:
Shor, P.W. (1994). "Algorithms for quantum computation: discrete logarithms and factoring". Proceedings 35th Annual Symposium on Foundations of Computer Science. IEEE Comput. Soc. Press: 124–134
https://authors.library.caltech.edu/2179/1/BECpra96.pdf
https://en.wikipedia.org/wiki/Quantum_logic_gate
https://en.wikipedia.org/wiki/Shor%27s_algorithm
https://en.wikipedia.org/wiki/Discrete_logarithm
https://zhuanlan.zhihu.com/p/106923175
啟明星辰積極防禦實驗室(ADLab)
ADLab成立於1999年,是中國安全行業最早成立的攻防技術研究實驗室之一,微軟MAPP計劃核心成員,「黑雀攻擊」概念首推者。截止目前,ADLab已通過CVE累計發布安全漏洞近1100個,通過 CNVD/CNNVD累計發布安全漏洞2000餘個,持續保持國際網絡安全領域一流水準。實驗室研究方向涵蓋操作系統與應用系統安全研究、移動智能終端安全研究、物聯網智能設備安全研究、Web安全研究、工控系統安全研究、雲安全研究。研究成果應用於產品核心技術研究、國家重點科技項目攻關、專業安全服務等。