rsa是在diffe-hellman演算法問世兩年之後,由rivest、shamir和adelman在mit研究出的,並於2023年公布。rsa系統利用這樣的事實:模運算中冥的自乘數是容易解的。rsa的加密方程為: c=
memo
dn這裡,密文c是資訊m自乘指數冪e並除以模數n後的餘數。這可以由任何乙個知道資訊m、模數n和加密指數e的計算機迅速完成。另一方面,將這乙個過程反過來,根據em
根求膜n。對任何乙個不知道n因子的人來說,這是很困難的。
rsa系統非常適合用於製作用於製作數學特徵和某些加密應用。但是,常常要求製作保密金鑰,以便直接用於儲存金鑰保密系統,這需要使用另外乙個單向函式。 y=
gxmo
dp(在g自乘冪x後,然後除以p,x為餘數)
金鑰配發十分方便,使用者的公用金鑰可以像**號碼一樣公開,使用方便。這對網路環境眾多使用者的系統,金鑰管理更加便捷。每個使用者只需要只有一對金鑰即可實現與網路中任何乙個使用者的保密通訊。
rsa加密原理基於單向函式,非法接受者利用公用金鑰不可能在有限的時間內推算出秘密金鑰,這種演算法的保密性好。
rsa在使用者確認和實現陣列簽名方面優於現有的其他加密機制。
rsa的加密速度是乙個缺陷。由於進行的都是大數運算,使得rsa最快的情況也比des慢上好幾倍。由於這些限制,rsa目前主要用於網路環境中少量的資料加密。
rsa數字簽名是一種強有力的認證鑑別方式,他可以確保接收方能夠判斷傳送方的真實身份。
是不是有點一頭霧水?別急,前面的都不重要,到這裡我們只需要腦子裡有一點概念,rsa實現原理是於乙個單向函式就ok了。下面我們將以例子的形式來進行分析說明。
首先我們先梳理rsa的使用機制。
rsa要求每乙個使用者擁有自己的一種金鑰。
* 公開的加密金鑰,用來加密明文
* 保密的解密金鑰,用來解密密文
這是一對非對稱金鑰,又稱為公用金鑰體制(public key cryptosystem )。
在rsa金鑰體制執行中,當a使用者傳送檔案給b使用者時,a使用者用b使用者公開的金鑰加密明文,b使用者則用解密金鑰解讀密文。
下面將用乙個簡單的例子來說明rsa公開金鑰密碼系統的工作原理。
隨機取兩個質數。
例如p=11,q=13.(實際應用中,著兩個質數越大,越難破解)
計算p和q的乘積n。
n = p*q = 11*13 = 143
(此時n的長度就是金鑰的長度,此時n=143,轉化成二進位制為1000 1111 ,一共是8位,實際應用中一般用1024-2048位)
計算n的尤拉函式φ(n)。
由公式φ(n) = (p-1)(q-1)
可得出此時φ(n) = 120。
隨機選擇乙個與φ(n)互質的數,取值範圍為1~φ(n)。
例如這裡我們隨機選擇 e = 7。(稱為「公開指數」)
計算e對於φ(n)的摸反元素d。
d的值需要滿足e×
d=1m
od(φ
(n))
這個等式相當於(e
×d)m
od(φ
(n))
=1,可得出d = 103。其實7*103 = 721除以120確實餘1。
到此,我們的公開金鑰和私有金鑰都已經計算完畢。此時最開始取的兩個質數已經沒有作用了,但是不能洩露。
分裝金鑰
其實(n,e)就是公開金鑰(n,d)就是私密金鑰
那麼此時的公開金鑰是(143,7),私密金鑰是(143,103)
利用公開金鑰加密明文
設想需要傳送機密資訊(明文,即未加密的報文)s = 85 ,已經獲得了上面的公鑰(n,e) = (143,7)。於是算出加密值: c=
semo
dn=85
7mod
143=
123
利用解密金鑰解密密文
在收到上面加密後的密文c = 123後,在利用上面的私密金鑰(n,d) = (143,103)來還原本來的資訊。 s=
cdmo
dn=123103
mod143=85
通過上面的私密金鑰的解密,我們就得到了真正的資訊s=85。
私鑰解密的證明
有沒有好奇,為什麼我們通過私密金鑰還原密文就可以得到原來的資訊。下面來我們來進行證明:
就本例而言:其實也就是證明: cd
=s(m
od(n
))根據加密規則: se
=c(m
od(n
)),可以得到: c=
se−k
×n將c代入解密規則,得: (s
e−k×
n)d=
s(mo
d(n)
)
化簡,得: se
d=s(
mod(
n)) 由於e
×d=1
(mod
(φ(n
))) ,有 e×
d=hφ
(n)+
1
將ed代入,得: sh
φ(n)
+1=s
(mod
(n))
接下來,分成兩種情況證明上面的式子:
(1) s與n互質。
根據尤拉定理,此時: sφ
(n)=
1(mo
d(n)
)
得到: (s
φ(n)
)h=s
(mod
(n))
得證。
(1) s與n不互質。
比較複雜,就不做詳細證明。具體請參考部落格
關鍵一點,設s = kp;然後執行尤拉定理。
在上面的例子中,n= 143只是示意的,用來說明rsa的計算過程。從143找出他的質數因子11和13不困難。但對於巨大的指數q和p,計算乘積n=
p×q 非常簡單,但是逆運算卻是非常難的。這是一種「單向性」的預算。相應的函式稱為「單向函式」。任何單向函式都可以作為某一種公開金鑰密碼系統的基礎,而單向函式的安全性也就是這種公開金鑰密碼系統的安全性。
待新增
–資源預計明天上傳,正在編寫中。 RSA密碼體制
公鑰密碼學中大部分引用了數論的成果,所以必要在介紹rsa密碼體制之前,詳細介紹一下所使用的幾個數論的知識點 歐幾里得演算法主要是解決最大公約數問題,記兩個正整數 r 0 和 r 1 的 gcd 表示 gcd r 0,r 1 在公鑰體系中,安全性依賴於大整數的因式分解通常是不可能的。所以人們通常使用一...
RSA公鑰密碼演算法
此演算法的 過程為 開始時選擇兩個素數p和q,計算它們的積n作為加密和解密時的模。接著需要計算n的尤拉函式值 n n 表示小於n且與n互素的正整數的個數。選擇與 n 互素的整數e計算d 圖表圖示如下 模擬實現 include include include int jm int m,int e,in...
密碼學演算法 RSA
rsa演算法安全瓶頸 rsa演算法的乘法同態特性 rsa第一次在r.l.rivest,a.shamir和l.adleman的1978年的 a method for obtaining digital signatures and public key cryptosystems 中,作為一種新的數字...