公鑰加密或說非對稱加密其作用已經不言而喻,在實際中已經得到大量應用,比如https證書,其中便包含了**的公鑰資訊。非對稱加密與對稱加密最大的區別是,加密與解密使用不同的金鑰,通過公鑰加密的內容只有通過私鑰才能解密,反之亦然。因此,發布者完全可以把公鑰公布於眾,使傳送者便於查詢。與此相反,對稱加密需要參與雙方妥善保管金鑰。
非對稱加密非常類似數學裡面沒有反函式的一類函式,rsa選取的函式便是數論裡面的同餘理論,依賴的是大整數因數分解的困難性,下面我們不僅希望給出rsa演算法的構造過程,更希望能證明該過程的正確性。
rsa演算法可以通過數論和群論來描述,演算法導論中使用群論來描述,而我們著重使用數論。
隨機選取2個大素數p,q,p≠q,計算n=p*q
選取乙個整數e,e<(p-1)*(q-1),並且e與(p-1)*(q-1)互質
選擇整數d,使得de≡1(mod (p-1)*(q-1)),根據歐幾里德公式,d一定存在且唯一
銷毀p、q,把(n,e)公開作為公鑰,(n,d)妥善保管作為私鑰。
假如使用者a想通過公鑰(n,e)加密整數n(n使用者a計算c = (ne mod n),作為加密結果傳送給a,換種表達方式是: c≡ne(mod n),並且cb接收到加密資訊c後,計算cd(mod n)
因為c≡ne(mod n),所以cd≡ned(mod n)
因為ed≡1(mode (p-1)*(q-1)),所以ed=1+k*(p-1)*(q-1)
所以,cd≡ned(mod n) => cd ≡ n1+k*(p-1)*(q-1) (mod n) = n * n(p-1)*k*(q-1) (mod n)
因為p為素數,根據費馬小定理:n(p-1) ≡1(mod p)
因此,根據同餘性質2,n * n(p-1)*k*(q-1) ≡n(mod p) =>cd ≡n( mod p) -----(1)
同里可得,cd≡n( mod q) -----(2)
因為q、q為素數,n即為p、q的最小公倍數,因此根據同餘性質3及式(1)、(2),cd ≡n( mod n)
也就是說cd 對n取餘,則得到加密源資料n
使用者b用私鑰加密訊息傳送給a後,解密過程與上同。
上面過程像變戲法一樣完成了非對稱加解密的過程,但卻留下了很多疑問:
為什麼要選擇(p-1)*(q-1)作為計算的基礎?
直觀地說,是為了使用費馬小定理,從ap-1 ≡ 1(mod p)可以看出,費馬小定理可以把乙個基於指數的大數的模轉換為乙個小數,這也是要求p、q必須為素數的原因。其實,費馬小定理是尤拉定理的特例,尤拉定理:
對任意的整數(a,m)=1,存在公式:
aφ(m)≡1(mod m)
其中φ(m)稱為m的既約剩餘系的大小,即那些與m互質的餘數的個數,當m為素數p時,φ(p)=p-1(除0外其他餘數都與p互質),則得到費馬小定理。
同樣,應用尤拉素數公式可以得到:φ(n)=φ(p*q)=(p-1)*(q-1),這就是選擇(p-1)*(q-1)作為計算基礎的根本原因。
為什麼加密元資料n需要滿足nd ≡n( mod n) 結果的唯一性。如果加密源大於n,則可以分割為多個小於n的資料進行加密。
如果使用者b用私鑰(n,d)加密資料發給使用者a,豈不容易被任意乙個擁有公鑰(n,e)的竊聽者破解?
在設計上之保證a到b的通道是加密的,b到a之間的通道資訊是公開的,更多是用來簽名,用以證明訊息的確是b發出的。
但b也可以使用a的公鑰來傳送資料已做到加密雙端通訊,這樣a、b同時為公鑰發布源。
4. 加密基礎
rsa演算法的加密基礎在於,雖然公開(n,e),但卻無法從(n,e)推斷出(n,d),要想能推斷出(n,d),則必須知道p,q,問題就轉化為能否把n分解為兩個大素數p、q乘積的問題。如果n能被容易的分解為p、q,則rsa演算法將很容易被破解。
這個問題看起來貌似很簡單,但事實證明當n足夠大時(比如1024位),大數的因子分解非常困難:
20多年的使用經驗表明,即使採用其他更為先進的素數測試法,比如隨機素數測試,因數分解的困難程度也超出想象。但在雲計算如火如荼的今天,這似乎又變得有希望起來:
因此,為了保證rsa的安全性只有提高n的位數,一般認為提高到2048位才相對比較安全。
5. 效能
rsa效能是非常低的,原因在於尋找大素數、大數計算、資料分割需要耗費很多的cpu週期,所以一般的https連線只在第一次握手時使用非對稱加密,通過握手交換對稱加密金鑰,在之後的通訊走對稱加密。
6. 補充理論
7. 參考資料
演算法導論
初等數論(潘承洞、潘承彪)
wiki:
RSA公鑰加密演算法
rsa 離散對數 橢圓曲線是目前三大公鑰加密演算法,rsa是其中應用最多的一種。下面將介紹rsa演算法的理論基礎。公鑰加密或說非對稱加密其作用已經不言而喻,在實際中已經得到大量應用,比如https證書,其中便包含了 的公鑰資訊。非對稱加密與對稱加密最大的區別是,加密與解密使用不同的金鑰,通過公鑰加密...
公鑰加密演算法
中文名稱 數字簽名 英文名稱 digital signature 定義 以電子形式存在於資料資訊之中的,或作為其附件的或邏輯上與之有聯絡的資料,可用於辨別資料簽署人的身份,並表明簽署人對資料資訊中包含的資訊的認可。應用學科 通訊科技 一級學科 網路安全 二級學科 數字簽名 又稱公鑰數字簽名 電子簽章...
加密演算法 公鑰密碼 摘要演算法
des 資料加密標準,是一種使用金鑰加密的塊演算法。des中的金鑰key為8個位元組64位,但每第8個為校驗位不參與運算,所以有效金鑰只有56位,data為8個位元組64位,是要被加密或解密的資料,des採用16輪運算,每輪產生乙個輪金鑰參與到運算中,金鑰與明文運算時採用按位異或的方法 不僅僅是與金...