當前位置:律師網大全 - 專利申請 - 公鑰密碼→RSA詳解

公鑰密碼→RSA詳解

在對稱密碼中,由於加密和解密的密鑰是相同的,因此必須向接收者配送密鑰。用於解密的密鑰必須被配送給接收者,這壹問題稱為 密鑰配送問題 ,如果使用公鑰密碼,則無需向接收者配送用於解密的密鑰,這樣就解決了密鑰配送問題。可以說公鑰密碼是密碼學歷史上最偉大的發明。

解決密鑰配送問題的方法

在人數很多的情況下,通信所需要的密鑰數量會增大,例如:1000名員工中每壹個人都可以和另外999個進行通信,則每個人需要999個通信密鑰,整個密鑰數量:

1000 x 999 ÷ 2 = 499500

很不現實,因此此方法有壹定的局限性

在Diffic-Hellman密鑰交換中,進行加密通信的雙方需要交換壹些信息,而這些信息即便被竊聽者竊聽到也沒有問題(後續文章會進行詳解)。

在對稱密碼中,加密密鑰和解密密鑰是相同的,但公鑰密碼中,加密密鑰和解密密鑰卻是不同的。只要擁有加密密鑰,任何人都可以加密,但沒有解密密鑰是無法解密的。

公鑰密碼中,密鑰分為加密密鑰(公鑰)和解密密鑰(私鑰)兩種。

公鑰和私鑰是壹壹對應的,壹對公鑰和私鑰統稱為密鑰對,由公鑰進行加密的密文,必須使用與該公鑰配對的私鑰才能夠解密。密鑰對中的兩個密鑰之間具有非常密切的關系——數學上的關系——因此公鑰和私鑰是不能分別單獨生成的。

發送者:Alice 接收者:Bob 竊聽者:Eve

通信過程是由接收者Bob來啟動的

公鑰密碼解決了密鑰配送的問題,但依然面臨著下面的問題

RSA是目前使用最廣泛的公鑰密碼算法,名字是由它的三位開發者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母組成的(Rivest-Shamir-Adleman)。RSA可以被使用公鑰密碼和數字簽名(此文只針對公鑰密碼進行探討,數字簽名後續文章敬請期待)1983年在美國取得了專利,但現在該專利已經過期。

在RSA中,明文、密鑰和密文都是數字,RSA加密過程可以用下列公式來表達

密文 = 明文 E mod N

簡單的來說,RSA的密文是對代表明文的數字的 E 次方求mod N 的結果,換句話說:將明文和自己做 E 次乘法,然後將結果除以 N 求余數,這個余數就是密文。

RSA解密過程可以用下列公式來表達

明文 = 密文 D mod N

對表示密文的數字的 D 次方求mod N 就可以得到明文,換句話說:將密文和自己做 D 次乘法,在對其結果除以 N 求余數,就可以得到明文

此時使用的數字 N 和加密時使用的數字 N 是相同的,數 D 和數 N 組合起來就是RSA的解密密鑰,因此 D 和 N 的組合就是私鑰 。只要知道 D 和 N 兩個數的人才能夠完成解密的運算

根據加密和解密的公式可以看出,需要用到三個數—— E 、 D 和 N 求這三個數就是 生成密鑰對 ,RSA密鑰對的生成步驟如下:

準備兩個很大的質數 p 和 q ,將這兩個數相乘,結果就是 N

N = p x q

L 是 p-1 和 q-1 的最小公倍數,如果用lcm( X , Y )來表示 “ X 和 Y 的最小公倍數” 則L可以寫成下列形式

L = lcm ( p - 1, q - 1)

E 是壹個比1大、比 L 小的數。 E 和 L 的最大公約數必須為1,如果用gcd( X , Y )來表示 X 和 Y 的最大公約數,則 E 和 L 之間存在下列關系:

1 < E < L

gcd( E , L ) = 1 (是為了保證壹定存在解密時需要使用的數 D )

1 < D < L

E x D mod L = 1

p = 17

q = 19

N = p x q = 17 x 19 = 323

L = lcm ( p - 1, q - 1) = lcm (16,18) = 144

gcd( E , L ) = 1

滿足條件的 E 有很多:5,7,11,13,17,19,23,25,29,31...

這裏選擇5來作為 E ,到這裏我們已經知道 E = 5 ? N = 323 這就是公鑰

E x D mod L = 1

D = 29 可以滿足上面的條件,因此:

公鑰: E = 5 N = 323

私鑰: D = 29 ? N = 323

要加密的明文必須是小於 N 的數,這是因為在加密運算中需要求 mod N 假設加密的明文是123

明文 E mod N = 123 5 mod 323 = 225(密文)

對密文225進行解密

密文 D mod N = 225 29 mod 323 = 225 10 x 225 10 x 225 9 mod 323 = (225 10 mod 323) x (225 10 mod 323) x (225 9 mod 323) = 16 x 16 x 191 mod 323 = 48896 mod 323 = 123(明文)

如果沒有mod N 的話,即:

明文 = 密文 D mod N

通過密文求明文的難度不大,因為這可以看作是壹個求對數的問題。

但是,加上mod N 之後,求明文就變成了求離散對數的問題,這是非常困難的,因為人類還沒有發現求離散對數的高效算法。

只要知道 D ,就能夠對密文進行解密,逐壹嘗試 D 來暴力破譯RSA,暴力破解的難度會隨著D的長度增加而加大,當 D 足夠長時,就不能再現實的時間內通過暴力破解找出數 D

目前,RSA中所使用的 p 和 q 的長度都是1024比特以上, N 的長度為2048比特以上,由於 E 和 D 的長度可以和N差不多,因此要找出 D ,就需要進行2048比特以上的暴力破解。這樣的長度下暴力破解找出 D 是極其困難的

E x D mod L = 1 L = lcm ( p - 1, q - 1)

由 E 計算 D 需要使用 p 和 q ,但是密碼破譯者並不知道 p 和 q

對於RSA來說,有壹點非常重要,那就是 質數 p 和 q 不能被密碼破譯這知道 。把 p 和 q 交給密碼破譯者與把私鑰交給密碼破譯者是等價的。

p 和 q 不能被密碼破譯者知道,但是 N = p x q 而且 N 是公開的, p 和 q 都是質數,因此由 N 求 p 和 q 只能通過 將 N 進行質因數分解 ,所以說:

壹旦發現了對大整數進行質因數分解的高效算法,RSA就能夠被破譯

這種方法雖然不能破譯RSA,但卻是壹種針對機密性的有效攻擊。

所謂中間人攻擊,就是主動攻擊者Mallory混入發送者和接收者的中間,對發送者偽裝成接收者,對接收者偽裝成發送者的攻擊,在這裏,Mallory就是“中間人”

這種攻擊不僅針對RSA,而是可以針對任何公鑰密碼。在這個過程中,公鑰密碼並沒有被破譯,所有的密碼算法也都正常工作並確保了機密性。然而,所謂的機密性並非在Alice和Bob之間,而是在Alice和Mallory之間,以及Mallory和Bob之間成立的。 僅靠公鑰密碼本身,是無法防禦中間人攻擊的。

要防禦中間人攻擊,還需要壹種手段來確認所收到的公鑰是否真的屬於Bob,這種手段稱為認證。在這種情況下,我們可以使用公鑰的 證書 (後面會陸續更新文章來進行探討)

網絡上很多服務器在收到格式不正確的數據時都會向通信對象返回錯誤消息,並提示“這裏的數據有問題”,然而,這種看似很貼心的設計卻會讓攻擊者有機可乘。 攻擊者可以向服務器反復發送自己生成的偽造密文,然後分析返回的錯誤消息和響應時間獲得壹些關於密鑰和明文的信息。

為了抵禦這種攻擊,可以對密文進行“認證”,RSA-OAEP(最優非對稱加密填充)正是基於這種思路設計的壹種RSA改良算法。

RSA-OAEP在加密時會在明文前面填充壹些認證信息,包括明文的散列值以及壹定數量的0,然後用RSA進行加密,在解密的過程中,如果解密後的數據的開頭沒有找到正確的認證信息,則可以判定有問題,並返回固定的錯誤消息(重點是,不能將具體的錯誤內容告知開發者)

RSA-OAEP在實際應用中,還會通過隨機數使得每次生成的密文呈現不同的排列方式,從而進壹步提高安全性。

隨著計算機技術的進步等,以前被認為是安全的密碼會被破譯,這壹現象稱為 密碼劣化 ,針對這壹點:

  • 上一篇:“鍵盤俠”的存在對社會產生的影響是正面,還是負面的?
  • 下一篇:2019年南通啟東市特色學校體育藝術科技特長生實施辦法
  • copyright 2024律師網大全