到目前為止,世界上還沒有任何可靠的攻擊RSA的方式。只要金鑰的長度足夠長,理論上RSA幾乎無法被破解。
那麼,RSA演算法的原理是什麼呢?下面,就來為你揭開RSA制霸加密演算法界的奧祕。
RSA演算法的原理
隨機選擇一對不相等的、足夠大的質數p和q
什麼是質數呢?
在大於1的自然數中,除了1和本身之外,不能被其他數整除的正整數,稱之為質數。如2、3、5、7、11、13等。
計算p和q的乘積n
計算n的尤拉函式φ(n)= (p-1)(q-1)
這個公式的意義是:在小於等於n的正整數中,有多少個與n構成互質關係?這個數值用φ(n)表示。舉個例子:假如n=10,在1到10之間,與10構成互質關係的有3、5、7、9,所以φ(10)=4
隨機選擇一個與φ(n) 互質的整數e,且1< e < φ(n)
什麼是互質關係?
如果兩個正整數,除了1以外,沒有其他公因子,我們就稱這兩個數是互質關係。例如13和37沒有公因子,所以它們是互質關係。而49和91有公因子7,所以不構成互質關係。
計算e對於φ(n)的模反元素d,使得ed ≡ 1 mod φ(n)
上面公式中“≡”是數論中表示同餘的符號。公式ed ≡ 1 mod φ(n)表示ed和1 mod φ(n)同時做模運算後的餘數相等。
什麼是模運算?
假設有整數m和n,讓m被n整除,取所得餘數作為結果,這個過程就叫做模運算,用公式表示為m mod n。比如10mod3=1,10除以3的餘數是1。
什麼是模反元素?
如果兩個正整數e和n互質,那麼一定可以找到整數d,使得 ed-1 被n整除,或者說ed被n除的餘數是1。那麼d就叫做e的模反元素。
封裝公鑰和私鑰,公鑰KU=(e,n),私鑰KR=(d,n)
解密時,根據A ≡ Bd (mod n),解密出A,最後還原出明文
RSA演算法加解密例項
數學原理太深奧?不用管這些,我們只管用就好了。這裡翼火蛇通過一個例子,來說明RSA加解密的過程。
比如,發一個單詞love給女神小麗。怎麼做呢?
首先,我們利用RSA算法制作公鑰和金鑰。我們選取兩個質數p=3,q=11(為方便計算和理解,我們選擇的數值很小。實際運用中選取的數值則大得多)。那麼,n=p*q=33,φ(n)= (p-1)(q-1)=20。取e=3,公式ed ≡ 1 mod φ(n)等價於ed-1=kφ(n),即3*d-1= k20(K為整數)。我們為k取值1、2、3……通過簡單的試算,當k=1時,可求得d=7。此時,ed=21,被20整除,餘數為1,ed ≡ 1 mod φ(n)成立,因此d=7。由此,我們得到公鑰KU=(e,n)=(3,33),私鑰KR=(d,n)=(7,33)。
下面,我們開始進行加密。我們需要對明文數字化。這個規則可以自定義,比如將love的編碼按照英文字母順序排列數值,即a,b,c,d……x,y,z對應1,2,3……24,25,26。據此規則,love的明文資訊表示為12,15,22,5。
根據公式B ≡ Ae (mod n),對資訊進行加密。
B1 ≡ 123 (mod 33)=12
B2 ≡ 153 (mod 33)=9
B3 ≡ 223 (mod 33)=22
B4 ≡ 53 (mod 33)=26
當小麗接到這串數字後,她會根據公式A ≡ Bd (mod n)進行解密。因為公鑰KU=(e,n)是公開的,所以她得知n=33,同時她掏出任何人都不知道的金鑰d,就完成解密了。
A1 ≡ 127 (mod 33)=12
A2 ≡ 97 (mod 33)=15
A3 ≡ 227 (mod 33)=22
A4 ≡ 267 (mod 33)=5
然後,小麗根據英文字母順序表,對照得到四個字母l,o,v,e。這樣的表白方式是不是很浪漫?而且非常安全,任何人截取了,都不能明白其中含義。
為什麼RSA密碼難以被破解?
從上面的加解密過程,我們可以看出要破解密碼,必須知道d的取值。而要求出d,根據ed ≡ 1 mod φ(n),必須知道e和n。因為公鑰是對所有人公開的,所以e,n的取值是明確的。那麼φ(n)怎麼破解?我們知道φ(n)= (p-1)(q-1),那麼必須算出p和q。所以破解RSA演算法的關鍵就是:根據n=p*q,如何求出p和q。
然而,這幾乎是個不可能完成的任務。當p和q是非常大的質數時,根據pq的乘積去分解因子p和q,這是數學上公認的難題。
通常,p和q都會選的非常大,比如說200位。這導致n也非常大,有400位。尋找一個400位數字的質數分解並不容易,我們要做的除法運算次數大約為10 199,而翼火蛇瞭解世界最強的超級計算機天河2號每秒浮點運算是1016級別。那麼,分解出p和q,大約需要10174年。10174就是1的後面跟上174個0,時間是不是很長?
當pq大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。所以“地球上最有影響力的加密演算法”這個稱號,RSA當之無愧。