密碼學
數位簽章演算法
- RSA
- DSA
- ECDSA
加密(解密)演算法
-
對稱加密(單鑰匙加密),即加密解密的金鑰相同
- DES
- 3DES
- AES
-
非對稱加密(公開金鑰加密),即有兩個金鑰,一個公開金鑰,一個私密金鑰,用公開金鑰加密的內容只能由私密金鑰解密
- RSA
- ECC
加密演算法(雜湊演算法)
- MD5
- SHA-1
- SHA-256
- SHA-512
RSA
- 生成
- 公開金鑰是私密金鑰按照一定的演算法生成的密碼
- 數位簽章運算過程
- 生成數位簽章
- 小明根據RSA加密演算法生成公開金鑰、私密金鑰
- 對檔進行雜湊運算,得出檔雜湊值 H H H
- 使用私密金鑰根據RSA解密公式對檔雜湊值進行簽名運算,得出數位簽章 S S S
- 驗證數位簽章
- 使用公開金鑰根據RSA加密公式對數位簽章 S S S進行驗證計算,得出檔雜湊值 H H H
- 對檔進行雜湊運算,得出檔雜湊值 H ′ H' H′
- 將這兩個檔雜湊值進行對比
- 如果兩者相同,證明簽名成立,不同則簽名不成立
- 如何保證檔不被篡改
- 由於生成數位簽章 S S S的私密金鑰只有小明有
- 故檔被篡改後,用公開金鑰加密 S S S得到的雜湊值不可能和檔的雜湊值相同
- 生成數位簽章
PKI(Public Key Infrastructure)
-
PKI概念
- 所有提供公開金鑰加密和數位簽章服務的系統都可叫做PKI系統
-
PKI定義
- PKI是一種遵循標準的利用公開金鑰理論和技術建立的提供安全服務的基礎設施
-
主要功能
- 保密性
- 完整性
- 真實性
- 抗抵賴
-
PKI組件
- 公開金鑰證書
- 由可信實體簽名的電子記錄,記錄將公私密金鑰對所有者的身份捆綁在一起
- 證書撤銷列表(CRL)
- 通常由同一個發證實體簽名。當公開金鑰的所有者丟失私密金鑰,或者改換姓名時,需要將原有的證書作廢
- 認證機構(CA)
- 一個可信實體,發放和作廢公開金鑰證書,並對各作廢證書列表簽名
- 註冊機構(RA)
- (一個可選PKI實體與CA分開),不對數位憑證或證書撤銷列表CRL簽名,而負責記錄和驗證部分有關資訊特別是主體的身份,這些資訊用於CA發發行證書和CRL以及證書管理中。
- 證書管理機構(CMA)
- 將CA和RA結合起來稱CMA
- 證書存檔庫(Repository)
- 一個電子網站,存放證書和作廢證書列表CRL,CA在用證書和作廢證書
- 署名用戶(Subscriber)
- 作為主體署名證書並依據策略使用證書和相應金鑰的實體
- 依賴方(Replying party)
- 一個接收包括證書和簽名資訊的人或者機構,利用證書提供的公開金鑰驗證其有效性,與持證人建立保密通信,接收處於依賴的地位
- 最終用戶(End User)
- 署名用戶和依賴方的統稱,也稱末端實體,可以是人,也可以是機器,如路由器或電腦中運行程式,如防火牆
- 公開金鑰證書
-
組成要素
- 用戶(使用PKI的人或機構)
- 認證機構(Certification Authority,CA)(頒發證書的人或機構)
- 倉庫(保存證書的資料庫)
ElGamal加密演算法
演算法流程
- 生成金鑰
- 要使用ElGamal加密演算法,首先要生成公開金鑰和私密金鑰
- 先隨機生成一個大模數 p p p,再挑選一個 p p p的原根 g g g
- 接著隨機挑選一個數 x x x作為私密金鑰, x x x的範圍是 0 < x < p 0<x<p 0<x<p
- 使用三個數 ( p , g , g x m o d p ) (p,g,g^x\ mod\ p) (p,g,gx mod p)作為公開金鑰
- 加密過程
- 只有甲持有私密金鑰,現在乙要給甲傳送加密的資訊
- 乙已經持有了公開金鑰 ( p , g , g x m o d p ) (p,g,g^x\ mod\ p) (p,g,gx mod p)
- 現在乙把要傳送的明文 m m m加密, 0 < m < p 0<m<p 0<m<p
- 他先隨機挑選一個數 y y y, 0 < y < p 0<y<p 0<y<p
- 他要計算出兩個數 g y m o d p g^y\ mod\ p gy mod p和 m ∗ g x y m o d p m*g^{xy}\ mod\ p m∗gxy mod p
- 於是他把密文 ( g y m o d p , m ∗ g x y m o d p ) (g^y\ mod\ p, m*g^{xy}\ mod\ p) (gy mod p,m∗gxy mod p)發送給甲
- 解密過程
- 甲收到了乙傳過來的密文 ( c 1 , c 2 ) (c_1,c_2) (c1,c2)
- 要想得到明文 m m m,僅需要計算 m = c 2 c 1 x m= {{c_2} \over {c_1^x}} m=c1xc2即可
實例
- 生成金鑰
- 挑選模數 p p p為150001
- 原根 g g g為7
- 私密金鑰 x x x為113
- g x m o d p = 7 113 m o d 150001 = 66436 g^x\ mod\ p\ =\ 7^{113}\ mod\ 150001\ =\ 66436 gx mod p = 7113 mod 150001 = 66436
- 故公開金鑰為 ( 150001 , 7 , 66436 ) (150001, 7, 66436) (150001,7,66436)
- 加密過程
- 乙想要加密傳輸給甲的密文為 m = 131513 m=131513 m=131513
- 他先挑選一個亂數 y = 1000 y=1000 y=1000
- g y m o d p = 7 1000 m o d 150001 = 90429 g^y\ mod\ p\ =\ 7^{1000}\ mod\ 150001\ =\ 90429 gy mod p = 71000 mod 150001 = 90429
- m ∗ g x y m o d p = 131513 ∗ 66436 1000 m o d 150001 = 57422 m*g^{xy}\ mod\ p\ =\ 131513 * {66436}^{1000}\ mod\ 150001\ =\ 57422 m∗gxy mod p = 131513∗664361000 mod 150001 = 57422
- 故傳送給甲的密文為 ( 90429 , 57422 ) (90429,57422) (90429,57422)
- 解密過程
- 甲接收到了密文 ( 90429 , 57422 ) (90429,57422) (90429,57422),現在要將其解密
- 根據逆元的性質, c 1 − x ≡ c 1 p − 1 − x ( m o d p ) c_1^{-x}\equiv c_1^{p-1-x}\ (mod\ p) c1−x≡c1p−1−x (mod p)
- 故 m = 57422 ∗ 9042 9 150001 − 1 − 113 m o d 150001 = 131513 m=57422*90429^{150001 - 1 - 113}\ mod\ 150001\ =\ 131513 m=57422∗90429150001−1−113 mod 150001 = 131513