第二章、 密碼學介紹
2.1 密碼學-公開金鑰
在對稱金鑰演算法中,加密與解密使用相同的金鑰,每對通訊方都必須使用 異於他組的金鑰,當成員增加使用金鑰數量成二次方增加,金鑰的管理就成為問 題,更尷尬的問題是當安全通道不存在於雙方時,如何建立一個共用的金鑰?如 果有安全通道可以建立共用金鑰,何不使用安全通道傳送資料?這個「雞生蛋、
蛋生雞」的矛盾成為密碼學在真實世界應用的阻礙。1976 年,Whitfield Diffie 與 Martin Hellman 提出公開金鑰的概念:一對值不同但數學相關的金鑰,公開金鑰 (public key) 與私密金鑰 (private key) [1]。這個概念就是基於單向暗門函數 (trap door one way function) ,下面給了單向暗門函數的定義。非對稱金鑰演算法因為擁 有私鑰與公鑰的特性解決了對稱金鑰演算法中金鑰交換的問題,此外對稱金鑰演 算法中跟每個通訊方都需要一把唯一的金鑰,也是十分麻煩且不被希望的方式,
非對稱金鑰演算法不需要如此。每個人只要保留自己的私密金鑰,需要加密時再 去存放大家公開金鑰的地方,尋找對方的公開金鑰即可,少了保管金鑰的麻煩。
單向暗門函數定義
若知道 k、X,容易得 Y
若知道 Y 但不知道 k,X 是無法求得的 若知道 k、Y,容易得 X
2.1.1 RSA
1977 年美國麻省理工學院三位學者 R.L. Rivest、A. Shamir 和 L. Adleman 發明 單向函數
暗門函數
5
了一個使用指數運算式的公開金鑰加密演算法,並在 1978 年發表,以三位作者姓 名的第一個字命名為 RSA[2],為目前最廣泛也最被廣為接受的公開金鑰演算法。
RSA 為非對稱金鑰演算法,加密解密是利用兩把不同的金鑰,加密時是利用 公開金鑰,所有人都需要公布自己的公開金鑰。所有的公開金鑰都被儲存在一個 資料庫中,也就是大家都可以取得公開金鑰進行加密,但是只有對應的私密金鑰 才可以進行解密,取出明文,私密金鑰跟公開金鑰相反。私密金鑰只保留在接收 端的部分,所以保管金鑰的部分不像對稱金鑰需要保管加密及解密的同一把金鑰,
如此一來少了金鑰傳送的困難,也少了金鑰保管的問題,公開金鑰跟私密金鑰能 夠成立這都是歸功於單向暗門函數。
RSA 演算法的安全性是基於數學難題:找出兩個大質數相乘是簡單的,但是 要從他們的乘積進行因數分解是非常困難的 (當這個乘積達到幾百位數) 。用這難 解特性來達到資料安全防護的效果,演算法本身並不困難,真正的挑戰是選擇和 產生公開和私密金鑰。
RSA 運算為區塊加密,明文被切成多個區塊,依序加密,解密也是將密文切 成跟明文一樣的區塊,依序解密。以下是 RSA 金鑰產生的方式、加解密運算以及 區塊加密流程。
RSA 演算法
產生金鑰(1) 選擇兩個大質數 P 和 Q,令 N = P×Q
(2) 選擇公開金鑰 E,使它不是(N) = (P-1)×(Q-1)的因數,即 gcd(E, (N)) = 1 (3) 選擇私密金鑰 D,使恆等式成真:(E×D) ≡ 1(mod (N)) (模乘法反元素) (4) 加密金鑰 (E, N) 為公開金鑰 (Public) ,解密金鑰 (D, N) 為私密金鑰 (Private)
6
加解密運算
M為明文、X 為密文
加密運算,明文計算密文:X ≡ ME mod N 解密運算,密文計算明文:M ≡ XD mod N
E (E, N)
D X
(D, N) M
A B
M
A拿B的公開金 鑰加密成密文
B拿B保管的私密 金鑰解密成明文 圖 2-1 RSA 加解密運算
RSA 區域加密流程
明文:M = {M1, M2, ...Mn} 0 ≦ Mi < N
加密:
密文:X = {X1, X2, ...Xn} 0 ≦ Xi < N
解密:
RSA 加解密範例
(1) P = 47、Q = 59
(2) N = P×Q = 2773,(N) = 46×58 = 2668 (3) 選擇公開金鑰 E = 17,使 gcd(17, 2668) = 1 (4) 選擇私密金鑰 D = 157,17×157 ≡ 1 mod 2668 (5) 明文 920,加密運算:948 ≡ 92017 mod 2773 (6) 密文 948,解密運算:920 ≡ 948157 mod 2773
7
RSA 的安全性
有幾種方法可以針對 RSA 進行攻擊,當中有暴力法、數學攻擊法,計時攻擊 法等等...,RSA 對抗暴力法的防禦方式就是使用很大的金鑰,因此 D 的位元數越 大就越不容易被破解。數學攻擊法為大部分破解 RSA 的討論焦點,破解 RSA 的關 鍵在於將 N 做質因數分解,就可以找到相對應的私密金鑰,但就目前為止還沒有 人找到一個有效率的時間多項式演算法或是速度夠快的電腦可以在短時間分解一 個大的整數的因數,因此一般認為只要 N 足夠大,RSA 是無法被破解的。只是根 據摩爾定律和未來的量子電腦,RSA 的安全性備受挑戰。目前 RSA 的使用者應使 用 1024-bit 以上,才足以確保資料的安全性。
2.1.2 RSA 數位簽章
公開金鑰演算法,因為有公開金鑰跟私密金鑰及下列特性:完整性、認證、
不可否認性。除了資料加密以外,還有數位簽章的功能,RSA 進行數位簽章[3]的 步驟跟加密正好相反,簽章是使用私密金鑰加密成密文,拿到密文的人再拿公開 金鑰解密回來,就可以確認是誰傳送密文。下列是數位簽章運算的流程。
簽章運算
S:簽章、M:明文 簽章運算:S ≡ MD mod N 驗證簽章運算:M ≡ SE mod N
D
(d, N)
E S
(e, N)
A B
M M
圖 2-2 RSA 數位簽章和驗證
8
根據圖 2-2, A 用 A 的私密金鑰將明文加密成簽章,當 B 收到密文的時候用 A 的公開金鑰解密簽章。圖中的 D 跟 E 並沒有畫錯,D 表示使用私密金鑰做加密,
E 表示使用公開金鑰做解密。簽章的步驟可以確認三件事:
1.完整性:這個密文在傳送過程中沒有丟失,沒有竄改 2.認證:確認這是 A 發送的
3.不可否認性:確認 A 確實發布過
以上的三件事是建立在 A 的私密金鑰保存良好,沒有被他人得知的情況下,
再確認過確實是 A 的簽章後,就可以用 B 的私密金鑰將密文解碼成明文,完成整 個訊息的傳遞。
9