秀爾算法:破解RSA加密的“不滅神話”
RSA加密曾被視為最可靠的加密算法,直到秀爾算法出現(xiàn),打破了RSA的不滅神話。
RSA加密 VS 秀爾算法
作為RSA加密技術(shù)的終結(jié)者——“太多運算,無法讀取”的秀爾算法(Shor’s algorithm)不是通過暴力破解的方式找到最終密碼的,而是利用量子計算的并行性,可以快速分解出公約數(shù),從而打破了RSA算法的基礎(chǔ)(即假設(shè)我們不能很有效的分解一個已知的整數(shù))。同時,秀爾算法展示了因數(shù)分解這問題在量子計算機上可以很有效率的解決,所以一個足夠大的量子計算機可以破解RSA。
RSA加密“曾經(jīng)”之所以強大,是因為它對極大整數(shù)做因數(shù)分解的難度決定了RSA算法的可靠性。將兩個質(zhì)數(shù)相乘是件很容易的事情,但要找到一個龐大數(shù)字的質(zhì)因子卻非常困難。這便是大量現(xiàn)代科技的依靠之處,RSA加密就是憑借其簡潔性迅速風靡。
然而,有一種技術(shù)可以讓RSA加密無用武之地。秀爾算法可以破解RSA,但是怎樣才能讓它真正見效呢?
我們這里并非建議你同時嘗試所有可能的質(zhì)因子。
而是使用(相對)簡潔的語句:
如果我們快速找到下面這個周期函數(shù)的周期,
f(x) = m^x (mod N)
我們便可以破解RSA加密。
秀爾五步走
那么,秀爾算法究竟是怎樣工作的呢?在秀爾五步法中,只有一步需要是需要用到量子計算機的,其他的步驟則都可以采用傳統(tǒng)方法解決。
***步:
使用傳統(tǒng)***公約數(shù)分解(gcd)算法,也就是輾轉(zhuǎn)相除法。N是你需要嘗試的因子,m則是一個小于N的隨機正整數(shù)。
如果gcd(m,N)=1,則繼續(xù)。一旦你使用gcd找到一個因子,你便能獲得一個非凡因子,然后結(jié)束。
第二步:
找到周期 P
m mod N, m^2 mod N, m^3 mod N
這是使用量子計算的一步。
第三步:
如果周期P是奇數(shù),回到***步,選擇另一個隨機整數(shù)。如果不是,繼續(xù)下一步。
第四步:
檢驗
如果成立,則繼續(xù)第五步;反之,回到***步。
第五步:
解
解得一個非凡素因數(shù)N的值,然后你便能破解RSA加密了。
第二步是怎樣實現(xiàn)的?
然而,量子計算機是如何找到函數(shù)周期的?這又為什么如此重要?
我們來看一下周期 P :
m mod N, m^2 mod N, m^3 mod N
(由于這是一個指數(shù)函數(shù),我們可以將一個復(fù)雜的質(zhì)數(shù)轉(zhuǎn)換成雙曲正弦、余弦然后得到周期)
這個發(fā)現(xiàn)周期的過程需要依賴量子計算機同時計算許多狀態(tài)的能力,也就是狀態(tài)的“疊加”,因此我們能找到方程的周期。
我們需要這么做:
1、應(yīng)用Hadamard gate來創(chuàng)建一個量子疊加態(tài)
2、量子轉(zhuǎn)換使方程生效
3、執(zhí)行量子傅立葉變換
與傳統(tǒng)情況類似,在這些轉(zhuǎn)化之后,一個測量值將會產(chǎn)生一個近似方程周期的值(你可以獲得“波峰”,就像傅立葉變換中的,而準確性會更高一點)。使用量子傅立葉變換,我們能夠解決排序和因數(shù)問題,這二者相同。量子傅立葉變換可以讓一臺量子計算機進行相位估計(酉算子特征值的近似值)。
當你完成量子部分(第二步)的時候,你可以檢查一下周期的有效性,然后使用另一個傳統(tǒng)的***公約數(shù)算法得到密鑰的質(zhì)因素。
有趣的是,由于這項技術(shù)并不是在于找到所有潛在質(zhì)因數(shù),而是找到潛在周期,你就不必嘗試很多隨機數(shù)直到找到一個成功的質(zhì)因數(shù)N。如果P是奇數(shù),那你不得不回到***步,這里
K是一個不同于N的質(zhì)因素。因此,即使你加倍密鑰長度(N),尋找質(zhì)因數(shù)也不會出現(xiàn)放緩的情況。RSA是不安全的,同樣加倍密鑰長度也不能幫你抵御量子計算的洶涌來襲,而保障安全。
“破解RSA-2048(2048-bit)的密鑰可能需要耗費傳統(tǒng)電腦10億年的時間,而量子計算機只需要100秒就可以完成。”
——Dr. Krysta Svore, 微軟研究院
量子傅立葉變換被用于建立量子線路,使得秀爾算法的物理實現(xiàn)成了量子計算機最為輕松的任務(wù)之一。
量子傅立葉變換:青出于藍
秀爾算法的核心是發(fā)現(xiàn)順序,這樣便可以減少阿貝爾的隱子群問題,使用量子傅立葉變換便可以解決。——NIST 量子世界
量子傅立葉變換是許多量子算法的關(guān)鍵所在。它并不加速尋找傳統(tǒng)傅立葉轉(zhuǎn)變,但是能夠在一個量子振幅內(nèi)執(zhí)行一個傅立葉變換。在一臺量子計算機上可以指數(shù)增長般快速處理量子傅立葉變換。雖然超過了直接映射經(jīng)典傅立葉變換的范疇,量子計算機也可以做其他的事。例如,解決隱子群問題(也就是解決離散對數(shù)問題),或是計數(shù)問題(解決了這個問題就可以解決現(xiàn)代密碼學(xué)中很多其他形式的密碼)。更重要的是,量子傅立葉變換可以應(yīng)用到機器學(xué)習(xí)、化學(xué)、材料科學(xué)或者模擬量子系統(tǒng)。
秀爾算法中只有一個步驟是需要在量子計算機上完成的,其他的都可以在普通的超級計算機上完成。量子計算機運行完子程序后就會將結(jié)果返回給超級計算機讓它繼續(xù)完成計算過程。量子計算機可能永遠不會是單獨存在的,而是一直和超級計算機配合執(zhí)行任務(wù),經(jīng)過這樣的配合它們就可以破解RSA密鑰。
因為篇幅有限,很多數(shù)學(xué)細節(jié)和證明過程就不再贅述了,如果你對這些數(shù)學(xué)解釋感興趣,如果你具備線性代數(shù)、群論、高等數(shù)學(xué)的知識,你可以看看這些:
Quantum Computer Science
Quantum Information and Quantum Computation
NIST Quantum Zoo — 一個所有量子算法的列表