RSA非對稱加密演算法詳解

2021-09-10 07:23:05 字數 4684 閱讀 8465

rsa加密演算法是最常用的非對稱加密演算法,由羅納德·李維斯特(ron rivest)、阿迪·薩莫爾(adi shamir)和倫納德·阿德曼(leonard adleman)於2023年一起提出,rsa就是他們三人姓氏開頭字母拼在一起組成的。非對稱加密演算法的特點就是加密秘鑰和解密秘鑰不同,秘鑰分為公鑰和私鑰,用私鑰加密的明文,只能用公鑰解密;用公鑰加密的明文,只能用私鑰解密。

rsa是第乙個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定rsa的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流行的公開金鑰演算法。rsa的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進位制數或更大)的函式。從乙個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積(這是公認的數學難題)。

首先複習一下數學上的幾個基本概念,它們在後面的介紹中要用到:

一、 什麼是「素數」?

素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15=3*5,所以15不是素數;又如,12=6*2=4*3,所以12也不是素數。另一方面,13除了等於13*1以外,不能表示為其它任何兩個整數的乘積,所以13是乙個素數。素數也稱為「質數」。

二、什麼是「互質數」(或「互素數」)?

小學數學教材對互質數是這樣定義的:「公約數只有1的兩個數,叫做互質數。」這裡所說的「兩個數」是指自然數。

判別方法主要有以下幾種(不限於此):

(1)兩個質數一定是互質數。例如,2與7、13與19。

(2)乙個質數如果不能整除另乙個合數,這兩個數為互質數。例如,3與10、5與 26。

(3)1不是質數也不是合數,它和任何乙個自然數在一起都是互質數。如1和9908。

(4)相鄰的兩個自然數是互質數。如 15與 16。

(5)相鄰的兩個奇數是互質數。如 49與 51。

(6)大數是質數的兩個數是互質數。如97與88。

(7)小數是質數,大數不是小數的倍數的兩個數是互質數。如 7和 16。

(8)兩個數都是合數(二數差又較大),小數所有的質因數,都不是大數的約數,這兩個數是互質數。如357與715,357=3×7×17,而3、7和17都不是715的約數,這兩個數為互質數。等等。

三、什麼是模指數運算?

指數運算誰都懂,不必說了,先說說模運算。模運算是整數運算,有乙個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的餘數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。 

模指數運算就是先做指數運算,取其結果再做模運算。如(5^3) mod 7 = (125 mod 7) = 6。

接下來正式講解rsa加密演算法。

四、rsa演算法描述

rsa的公鑰、私鑰的組成,以及加密過程、解密過程的公式可見於下表:

公鑰ku

n:兩素數p和q的乘積(p和q必須保密)(n為模值)

e:與(p-1)*(q-1)互質(e稱為公鑰指數)

私鑰kr

n:兩素數p和q的乘積(p和q必須保密)(n為模值)

d:滿足(d*e) mod ((p-1)*(q-1)) = 1(d稱為私鑰指數)

加密過程

c=m^e mod n  (c為密文)

解密過程

m=c^d mod n  (m為明文)

其中,符號^表示數學上的指數運算;mod表示模運算,即相除取餘數。具體演算法步驟如下:

(1)選擇一對不同的、足夠大的素數p,q。

(2)計算n=p*q。

(3)計算f(n)=(p-1)*(q-1),同時對p, q嚴加保密,不讓任何人知道。

(4)找乙個與f(n)互質的數e作為公鑰指數,且1五、例項描述

本文不對rsa演算法的正確性作嚴格的數學證明,我們通過乙個簡單的例子來理解rsa的工作原理。為了便於計算。在以下例項中只選取小數值的素數p,q,以及e,假設使用者a需要將明文「key」通過rsa加密後傳遞給使用者b,過程如下:

(1)設計公私金鑰(e,n)和(d,n)。

令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3與20互質)則e×d mod f(n) = 1,即3×d mod 20 =1。

d怎樣取值呢?可以用試算的辦法來尋找。試算結果見下表:

通過試算我們找到,當d=7時,e×d mod f(n) = 1等式成立。因此,可令d=7。從而我們可以設計出一對公私金鑰,加密金鑰(公鑰)為:ku =(e,n)=(3,33),解密金鑰(私鑰)為:kr =(d,n)=(7,33)。

(2)英文數位化。

將明文資訊數位化,並將每塊兩個數字分組。假定明文英文本母編碼表為按字母順序排列數值,即:

則得到分組後的key的明文資訊為:11,05,25。

(3)明文加密

使用者加密金鑰(3,33) 將數位化明文分組資訊加密成密文。由c=m^e mod n得:

m1 = c1^e mod n = 11^3 mod 33 = 11

m2 = c2^e mod n = 5^3 mod 33 = 26

m3 = c3^e mod n = 25^3 mod 33 = 16

因此,得到相應的密文資訊為:11,26,16。

4)密文解密

使用者b收到密文,若將其解密,只需要計算m=c^d mod n,即:

c1 = m1^d mod n = 11^7 mod 33 = 11

c2 = m2^d mod n = 26^7 mod 33 = 5

c3 = m3^d mod n = 16^7 mod 33 = 25

使用者b得到明文資訊為:11,05,25。根據上面的編碼表將其轉換為英文,我們又得到了恢復後的原文「key」。 

當然,實際運用要比這複雜得多,由於rsa演算法的公鑰私鑰的長度(模長度)要到1024位甚至2048位才能保證安全,因此,p、q、e的選取、公鑰私鑰的生成,加密解密模指數運算都有一定的計算程式,需要仰仗計算機高速完成。

六、rsa的安全性

首先,我們來**為什麼rsa密碼難於破解? 

在rsa密碼應用中,公鑰ku是被公開的,即e和n的數值可以被第三方竊聽者得到。破解rsa密碼的問題就是從已知的e和n的數值(n等於pq),想法求出d的數值,這樣就可以得到私鑰來破解密文。從上文中的公式:(d*e) mod ((p-1)*(q-1)) = 1,我們可以看出,密碼破解的實質問題是:從p*q的數值,去求出(p-1)和(q-1)。換句話說,只要求出p和q的值,我們就能求出d的值而得到私鑰。

當p和q是乙個大素數的時候,從它們的積p*q去分解因子p和q,這是乙個公認的數學難題。比如當p*q大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。因此,rsa從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。

缺點1:雖然rsa的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯rsa的難度與大數分解難度等價。即rsa的重大缺陷是無法從理論上把握它的保密性能如何。

下表列出了對同一安全級別所對應的金鑰長度。

保密級別

對稱金鑰長度(bit)

rsa金鑰長度(bit)

ecc金鑰長度(bit)

保密年限

缺點2:從上邊可以看出,同樣安全級別的加密演算法,rsa需要更長的金鑰。這就使運算速度較慢,較對稱密碼演算法慢幾個數量級。且隨著大數分解技術的發展,這個長度還在增加,不利於資料格式的標準化。

缺點3:rsa產生金鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。

因此,使用rsa只能加密少量資料,大量的資料加密還要靠對稱密碼演算法。實際應用中一般用來加密對稱演算法的金鑰,而密文多用對稱加密演算法加密傳輸。

七、rsa1024/2048

rsa演算法金鑰長度的選擇是安全性和程式效能平衡的結果,金鑰長度越長,安全性越好,加密解密所需時間越長。實際中常使用1024bit秘鑰和2048bit秘鑰,分別稱為rsa1024和rsa2048。秘鑰包含公鑰和私鑰,即公鑰私鑰長度一樣,都是1024bit或2048bit。rsa幾個特性如下:

1.金鑰長度增長一倍,公鑰操作所需時間增加約4倍,私鑰操作所需時間增加約8倍,公私鑰生成時間約增長16倍。

2. 一次能加密的密文長度與金鑰長度成正比, len_in_byte(raw_data) = len_in_bit(key)/8 -11,如1024bit的金鑰,一次能加密的內容長度為 1024/8 -11 = 117 byte。所以非對稱加密一般都用於加密對稱加密演算法的金鑰,而不是直接加密內容。

3. 加密後密文的長度為金鑰的長度,如金鑰長度為1024bit(128byte),最後生成的密文固定為 1024bit(128byte)。

關於rsa金鑰長度、明文長度和密文長度請參考:rsa金鑰長度、明文長度和密文長度。

[1][2]

[3]

RSA 非對稱加密演算法

1.對稱加密 甲方選擇某一種加密規則,對資訊進行加密 乙方使用同一種規則,對資訊進行解密。非對稱加密 乙方生成兩把金鑰 公鑰和私鑰 公鑰是公開的,任何人都可以獲得,私鑰則是保密的。甲方獲取乙方的公鑰,然後用它對資訊加密。乙方得到加密後的資訊,用私鑰解密。2.尤拉定理 rsa演算法的核心 可以大大簡化...

非對稱加密演算法 RSA

1 非對稱加密過程 國內使用的是雙證書體系 即使用者同時擁有簽名證書 和加密證書 兩張證書。簽名證書 是使用者的身份驗證是和ca協商的結果 加密證書 是用來對資訊進行加密,是使用者和秘鑰管理系統生成 過程是生成公鑰和私鑰的過程,基於rsa演算法實現 過程是ca對使用者的身份進行簽名,目的是驗證a的身...

非對稱加密演算法 RSA

rsa加密演算法於1977年由美國麻省理工學院的ronal rivest,adi shamir和len adleman三位年輕教授提出,並以三人的姓氏rivest,shamir和adleman命名為rsa演算法。這三位科學家榮獲2002年度圖靈獎,以表彰他們在演算法方面的突出貢獻。該演算法利用了數論...