PKI (Public Key Infrastructure)
PKI 是一種新的安全技術,它由公開密鑰密碼技術,數位證書,證書發放機構 (CA:Certification Authority) 和公開密鑰的安全策略等基本成分共同組成的.我們先對密鑰密碼技術,數位證書,證書發放機構 (CA) 等來說明.
Random Number
為了產生 Key 系統必須要能隨機的產生亂碼,才能讓每次產生的 Key 值皆不同, Linux 會依據當時 mouse 的移動 keyboard 鍵值 disk I/O 運作,來決定 Random Number,而這值會存放在 /dev/random 或 /dev/urandom.
[root@localhost ~]# cat /dev/random | od -x 0000000 1cf4 93a8 95a2 f255 711f dff6 f8ba d1b0 0000020 2ff1 cecf 87e7 fb1f 1691 1708 4607 790e 0000040 31dc 6ade 021a 35a6 fecc e1ee 890d b35f 0000060 429f 7481 a46c 2202 1f4a 9098 cb22 4fea 0000100 9363 9304 59d5 6265 9b38 f145 1a64 43e0 0000120 029e 1008 70a9 339e 7ae3 a1d3 659f bc64 0000140 f07e d384 a58a 05e0 b4f2 929d ef61 65e5 0000160 a4d5 b292 728f 49c4 5a14 9411 c33b 643d 0000200 90f0 76a0 353f ab32 6f87 2e2a 1ab4 43de 0000220 fbbb 089f 910b e613 cc5b 4fa1 2789 939d 0000240 48be 1250 f376 aa64 242e 45f0 94d4 6b6c
od -x – dump files in octal(八進制) and other formats (-x : 16 進制)
[root@localhost ~]# cat /dev/urandom | od -x 1512500 d8bf 66d6 ba13 470a aa3d 8977 9aa2 3dcf 1512520 52e0 7c9d d81a afed 0dde 93b1 2e0e 251b 1512540 f128 1381 b993 515d b7f8 19d8 1af1 07b6 1512560 bd4d 1d53 66fa 255c dc9b 4d56 e6bf 9b2b
One Way Hashes
One Way Hashes 主要會產生一組固定長度字串 (Fingerprint or Message Digests),這組字串用來比對原資料是否遭到修改,它的特性如下.
- 原資料輸入長度為可變.
- 輸出的 Fingerprint 為固定長度.
- 當資料任何 Byte 改變時, Fingerprint 也會變的完全不同.
- 我們無法依據 fingerprint 來回推成原資料,這也是為什麼稱為 One Way hash(單方向的資料運算,函數多對一的特性).
既然無法回推成原資料,那怎知資料是否正確, One Way hash 會再將資料再做一次 One Way hash 然後直接比對 Fingerprint 是否一樣. md2, md5, mdc2, rmd160, sha, sha1, haval, crc-32 皆是採用 One Way hash
Linux 提供 passwd (md5),md5sum [ –check] , openssl , gpg , tripwire ,rpm -V 等工具來產生 Fingerprint
[root@localhost ~]# echo "test" | md5sum d8e8fca2dc0f896fd7cb4cb0031ba249 - [root@localhost ~]# echo "test1" | md5sum 3e7705498e8be60520841409ebc69bc1 -
Symmetric Algorithms (對稱式)
所謂的對稱式加密就是加密以及解密都是使用同一支鑰匙 (Single Key),其中最典型的為 DES (Data Encryption Standard) 演算法.它使用的祕鑰長度為 56 bits (但每 8 bits 加上一個奇同位檢查,最後會形成 64 bits 的祕鑰),但這種方式鑰匙必須妥善保存,鑰匙的傳送無法透過網路,因為很容易遭有心人的擷取.
DES, 3DES, Blowfish, RC2, RC4, RC5, IDEA, CAST5 皆是採用對稱式加密來運作
Linux 提供 gpg (3DES,CAST5,Blowfish),openssl 等工具來產生鑰匙 (Single Key)
Asymmetric (Public Key) Algorithms (非對稱式)或稱公鑰密碼演算法
非對偁式加密會使用兩把公與私鑰 (Public / Private Key), Public key 會當成加密用, Private key 就會當解密用. RSA (以 RSA 的創始人Rivest,Shamir,Adelman 為命名 ),就是用 Asymmetric Encryption (非對稱式),RSA 既能用加密 (Asymmetric Encryption I )又能用在數位簽名 (Asymmetric Encryption II ),是目前提出的公鑰演算法中最容易理解和實現的.它的運作方式可分為下面幾種:
- Asymmetric Encryption 非對稱式加密
- 接收端 – 會產生兩把鑰匙 (Public/Private Key), Public Key (P) 會發佈給其他人來使用,而 Private Key (S) 則自己保存.
- 傳送端 – 傳送端會使用 (P) 將資訊 M 來加密, 並將經過加密的資料 P(M) 傳送出去.
- 接收端 – 接收端就可以用私鑰來解密 M=S(P(M)) ;這種方式傳送者無法確定接收者的真假
- Asymmetric Encryption 非對稱式加密 ( 用於數位簽證 Digital Signatures )
主要用在身份的確認,方法類似 Asymmetric Encryption 一樣會使用兩把鑰匙 (公與私 Public / Private Key), 但運作方式是由 傳送端 產生兩把鑰匙 (Public / Private Key),一樣 Private key 會當成加密用而 Public key 就會當解密用,方法如下.- 傳送端 – 產生兩把鑰匙 (Public / Private Key), Public Key(P) 會發佈給其他人來使用,而 Private Key (S) 則自己保存.傳送端使用自己產生的 Private key (S) 將資訊 M 來加密, 並將經過加密的資料 S(M) 傳送出去.
- 接收端 – 接收端就可以用傳送者的公鑰來解密 M=P(S(M)) ;這種方式的接收者可以確定傳送者,但傳送者無法得知接收者是否由其他人冒充.所以產生下面這兩種方法.
- Combined Signature and Encryption
運作方式結合 Asymmetric Encryption 與 Asymmetric Encryption ( 數位簽證 Digital Signatures )- 傳送端 – 傳送端/接收端都會產生兩把鑰匙 (Public / Private Key), Public Key (P) ,Public Key (P) 會發佈給其他人來使用,而 Private Key (S);則自己保存.傳送端會先用自己產生 Private key 加密,然後再用接收端的 Public key 加密.並將經過加密兩次的資料傳送出去
- 接收端 – 接收端會先用產生的 Private key 解密,然後再用傳送端的 Public key 解密,就能得到資料.這樣雙方就可以確認彼此,但資料的真實性還是無法獲得保障所以產生下面的方式.
- Detached Signatures
方法同 Asymmetric Encryption + 數位簽證 Digital Signatures ,但傳送者會先用 One Way Hash 將資料產生 Fingerprint 並傳送給接收者,接收者就可以依據此一信息摘要 (Fingerprint) 來判斷資料是否遭到修改.Asymmetric Encryption + 數位簽證 Digital Signatures 的方式如下
傳送端:- 傳送端先將要傳送的資料做對 One Way Hash 並產生信息摘要 (Fingerprint).
- 傳送端使用自己的私鑰 (Private Key) 對 Fingerprint 進行加密.
- 傳送端隨機產生一組對稱加密密鑰 (DES密鑰),並使用這密鑰對要發送的資料進行加密.
- 傳送端使用接收端的公鑰 (Public Key) 將剛才 對稱加密密鑰 (DES密鑰) + 已加密的資料 + 信息摘要 (Fingerprint) 加密並傳送給接收端.
接收端:
- 接收端使用自己的私鑰(Private Key)對 對稱加密密鑰 (DES密鑰) + 已加密的資料 + 信息摘要 (Fingerprint) 進行解密.
- 接收端使用對稱加密密鑰 (DES 密鑰) 將 已加密的資料 進行解密.
- 接收端使用 傳送端的公鑰 (Public Key) 信息摘要 (Fingerprint) 進行解密.
- 接收端 針對收到的資料 進行用相同的 one way hash ,並比較 獲得的 信息摘要 (fingerprint).
- 接收端運算出來的 信息摘要 (fingerprint) 與 獲得的 信息摘要 (Fingerprint) 進行比較,如果一樣則表示說收到的資料沒有被修改過.
在 DSA (Digital Signature Algorithm) 使用 Detached Signatures (數字簽證演算法),用作數字簽證標準的一部分,這種方式只能用於數字簽證,無法用在加密中,DSA 採用的 One Way Hash 為 SHA.
但這種方式缺少公正性,很容易被第三者在中間假冒,所以需要公正的第三者來處理,這就是下面要說的 CA.
CA(Certification Authority)
討論 CA 前,先來了解一下 SSL ,所謂的 SSL 就是伺服器端和使用者端的資料都經過加密的方式來傳送,而這之鑰匙就是 RC4 (對稱式加密),而這隻鑰匙是無法透過網路來傳送.因為當別人擷取這把鑰匙時,他也可以用這把鑰匙對你們的資訊加解密.
所以會使用 RSA (公私鑰,非對稱式加解密)方式來傳送這把鑰匙.
伺服器端會給使用者端 RSA 公鑰(用來加密使用者端的對稱式加密鑰匙),使用者端產生一支對稱式加密的鑰匙,並使用伺服器端的公鑰加密並回傳給伺服器端,伺服器端使用自己的私鑰解開還原使用者端給的對稱式加密鑰匙,等到伺服器端使用者端都有對稱式加密的鑰匙後,就使用這對稱式加密的鑰匙來進行接下來的資料傳送與交易.
看到這你或許會覺得奇怪,為何不用非對稱式的公鑰來做全程的加解密.因為非對稱加密的演算法很消耗 CPU 的資源所以不適合大量的資料的加解密,但是對稱式的鑰匙卻很適合大量的資料的加解密,但是他無法直接使用網路上來傳送,因為有可能被擷取,所以對稱式鑰匙被非對稱式的公鑰包在一起,傳送到伺服器端,只有伺服器有非對稱式的私鑰能解開.所以能很安全的傳給伺服器.之後的 SSL 連線中都會使用這對稱式的鑰匙加解密.
這樣看似安全其實不然,因為使用者無法確定伺服器端的真假 (經過假的 DNS Server 使用者可能被導向假的伺服器端),所以使用 CA (Certification Authority) 來進行伺服器端的身份確認.因此伺服器端不只會單給 Public key 還會加上數位簽名的憑證.
完整的 HTPS (SSL) 的交易方式.
- 伺服器端會給使用者端 公鑰(用來加密使用者端的對稱式加密鑰匙) 與 數位簽名的憑證(身份確認).
- 使用者端接到數位簽名的憑證,會先去 Root CA 詢問資料是否真的由該網站所核發.
- 使用者端產生一支對稱式加密的鑰匙,並使用伺服器端的公鑰加密並回傳給伺服器端,伺服器端使用自己的私鑰解開還原使用者端給的對稱式加密鑰匙.
- 等到伺服器端使用者端都有對稱式加密的鑰匙後,就使用這對稱式加密的鑰匙來進行接下來的資料傳送與交易.
關於 CA (Certificate Authority) 請參考 https://benjr.tw/312
6 thoughts on “PKI – Public Key Infrastructure”