PKI 小檔案

看完了秘鑰, 再來看一種公開鑰匙的加密方法 – PKI (Public key infrastructure). PKI 和 public key algorithm 加密並不一樣, 主要的差別在於 CA (certification authority) 的有無.

先來看一般的公開金鑰加密方法 (個人一直不懂的是, 為何沒事要把鑰匙取名叫金鑰, 純金又不能做鑰匙?).

如果仍然用 A 和 B 來舉例, 此時還需要其他的人或物介入其中. 一個是公正的第三人 C, 另外一個是數位憑證.

當 A 想要在 B 證券公司網路下單,  此時 A、B 不但要彼此檢查對方的身分, 也要防止下單資料被駭客修改了.

為了辨識資料是否被修改, 需要用到雜湊 (hash) 的技術. 首先把文件經過雜湊演算法計算, 產生一組固定長度的指紋 (fringer print) 或是數位摘要 (digital digest), 比方說 128 或 160 bits. 此時, 只要文件的內容經過修改, 就很難得到一模一樣的指紋.

當然, 這個指紋的傳送, 也不適合適明文, 它也是要加密的. 經過 A 的 private key 以 RSA 之類的演算法加密之後, digital digest 就變成了 digital signature (數位簽章).此時 A 已經準備好要傳送的明文文件, 以及數位簽章, 接著就可以透過 share private key (所謂共同金鑰) 加密 (如 DES 演算法).

不過, 此時 B 公司並不一定會保管與 A 共有的 share private key . 畢竟 B 公司可能有很多很多的客戶, 要是幫每個客戶、每筆交易都存一隻鑰匙的話, 那也挺麻煩的. 鑰匙可以重複使用的話, 感覺又太不保險了.

所以 B 公司希望 A 乾脆即時產生一隻share private key , 然後一起送給 B, 這樣就省事了. 當然, 鑰匙不能就這樣大剌剌地傳過來, 順便加個密吧! 因此 A 要用 B 公司指定的 B public key 來加密 share private key (如 RSA 演算法)

當 B 公司收到資料之後, 首先用 B 的 private key 來解 B 的 public key 加密的 share private key. 得到 share private key之後, 再用它來解 DES, 得到 A 的明文和 A 的數位簽章.

接著 B 公司再用 A 的 public key 來解數位簽章, 得到數位摘要. 這個數位摘要就可以用來判斷 A 的文件, 是否遭到竄改.

到這裡為止, A、B 雙方已經可以互相溝通了. 只要 A 和 B 都有 private key、public key 就行.

然而, 身為 A 的角色, 我怎麼不知道我有 B 的 public key, 或是自己的 public key 放在別人那邊呢? 我只知道我需要下載憑證啊? 它和以上的東西有關嗎?

事實上, 我們的憑證裡面就放了我們的 A public key. 當下單程式跑起來, 就會需要它. 相對地, B 公司也有它的憑證, 透過網路程式 (比方說 IE) 我們就可以取得 B 公司的憑證, 其中包括 B 公司的 B public key.

此時 CA (certification authority, 憑證管理) 的作用就出來了, 大家的 public key、數位簽章、憑證有效日期都歸它管. 它甚至可以回收憑證. CA 由一個公正的第三人 C 掌管,  C 專門發憑證給大家.

那麼 CA 不就神通廣大, 甚麼秘密都可以知道了嗎? 嗯,…這個我不太懂. 我們只知道我們還需要 RA (Registeration Authoruty) 這個角色. 大家需要的憑證是透過 RA 去申請, 而由 CA 所發給. 這樣或許可以變安全一點. 再研究!

 [參考資料]

中華民國政府 PKI 小百科

發表留言