RSA
RSA是目前最有影響力的公鑰加密算法,公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。
算法原理
RSA公開密鑰密碼體制的原理是:
根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰
算法描述
- 任意選取兩個不同的大素數
p
和q
,這兩個值越大,破解RSA越困難,而執行加密和解密所用時間也越長。
計算乘積n = p*q
、z = (p-1)(q-1)
- 選擇一個小於 n 的數
e
,且 e 和 z 互質(沒有非1的公因數)(此時 e 和 z 互素)。使用字母 e 表示是因為這個值將被用於加密。 - 求一個數
d
,使得 ed -1 可以被 z 整除。使用字母 d 表示是因為這個值將被用於解密。即給定 e ,我們選擇 d ,使得
ed mod z = 1
- 得到公鑰 \(K_B^+=(n,e)\) 和私鑰 \(K_B^-=(n,d)\)
說明:
e
是Encryption
(加密)的首字母,d
是Decryption
(解密)的首字母,n
是Number
(數字)的首字母。
加解密過程
能夠實現加解密這個恆等式(模運算性質)很有用 \((a\;mod\;n)^d\;mod\;n\;=\;a^d\;mod\;n\)
- 加密
假設A向B發送一個由整數m表示的比特組合,且 m < n 。為了進行編碼,A利用公鑰 \(K_B^+=(n,e)\) 執行指數運算 \(m^e\) ,然后計算 \(m^e\) 被 n 除的整數余數c。密文c的比特模式發送給B。
即
- 解密
要求B使用私鑰 \(K_B^-=(n,d)\)計算
工作原理
在RSA加密過程中,一個報文m(唯一地表示為整數)使用模n算術做e次冪運算,即
解密則先對該值執行d次冪運算,再做模n運算。因此先加密再解密的結果就是
下面我們來看看關於這個量能夠得到什么。正如前面提到的,模算術的一個重要性質是對於任意值 a 、n 和 d 都有\((a\;mod\;n)^d\;mod\;n\;=\;a^d\;mod\;n\) 。因此在這個性質中使用\(a=m^e\),則有
因此剩下證明 \(m^{ed}\;mod\;n=m\),為了證明這一點,需要用到數論中一個相當神奇的結論:如果 p 和 q 是素數,且有 n = p * q 和 z = (p-1)(q-1) ,則\(x^y\;mod\;n\)與\(x^{y\;mod\;z}\;mod\;n\)是等同的。應用這個結論,對於 x=m 和 y=ed ,可得
但要記住,我們是這樣選擇e和d的,即ed mod z = 1。這告訴我們
這正是我們希望得到的結果!先對m做e次冪運算(加密)再做d次冪運算(解密),然后做模n的算術運算,就可得到初始明文m。甚至更為奇妙之處是,如果我們先對m做d次冪運算(加密),再做e次冪運算,即顛倒加密和解密的次序,先執行解密操作再執行加密操作,也能得到初始明文m
這個奇妙的結果完全遵循下列模算術:
參考鏈接:
https://baike.baidu.com/item/RSA算法/263310#2
參考書籍:
《計算機網絡 自頂而下方法(原書第7版)》/(美)詹姆斯·F·庫羅斯等;陳鳴譯