將此篇文章跟 Facebook 上的朋友分享將此篇文章跟 Plurk 上的朋友分享將此篇文章跟 Twitter 上的朋友分享列印轉寄
2019/2/19

資料傳輸過程風險多 金鑰管理實踐身分驗證

善用信任網路機制 開源GPG輕鬆加解密

吳惠麟
本文將先說明資料傳輸機制,因為不想被第三者得知,所以必須搭配密碼加以保護,因此將講解對稱式與非對稱式密碼。最後,再簡單介紹開放原始碼界的訊息加密、驗證程式GPG,然後依據前面所講的理論來進行加密解密的實際操作。


公開金鑰(Public Key)

此把金鑰通常會上傳至公開金鑰伺服器上供人下載,或公開在網路上分享給相關人員。由於對稱式密碼系統密碼系統會面臨到安全傳送金鑰的問題,因此可利用公開金鑰的方式來解決此類問題,而每把公開金鑰均會有一把相對應的私有金鑰來完成密碼系統加解密的問題。

私有金鑰(Private Key)

私有金鑰並不會公開,而須由當事人妥善保管,因為在網路世界中,私有金鑰往往代表某個人的身分,其角色有點類似現實生活中的個人私章。

非對稱式密碼系統最常應用的情境是,傳送方在傳輸資料之前會先下載接收方的公開金鑰,並利用此公開金鑰來加密欲傳送的資料,再傳遞給接收方。而接收方在取得加密的資料後,再利用相對應的私有金鑰來解開加密的資料,相關的應用流程圖如圖2所示。


▲圖2 非對稱式密碼運用流程。


非對稱式密碼系統雖然可解決對稱式密碼系統所面臨的安全交付金鑰及管理金鑰的困境,但其最大的問題在於運算非常緩慢,所以在實務上通常會與對稱式密碼系統交互使用,目前最常用的非對稱式密碼系統演算法是RSA。

由上述的說明可得知,若利用金鑰來完成密碼系統的功能,在應用上還需要一個機制來核發及管理相關的公開金鑰。最常見的應用即是利用公開金鑰基礎建設(Public Key Infrastructure,PKI)來管理。但本文所簡介的GPG並不是採用公共金鑰基礎建設的方式來管理金鑰,而是利用信任網路(Web of Trust)的方式來管理。

公開金鑰基礎建設與信任網路

在網路世界中,金鑰往往表示代表某個人的身分,因此需要有一個機制來驗證金鑰擁有者在現實社會中的身分,在驗證真實身分之後,才能藉此簽發金鑰,用來代表在網路世界中的身分,也因而有公開金鑰基礎建設的架構的出現,其架構如圖3所示。


▲圖3 公開金鑰基礎建設架構示意圖。


首先,使用者可向RA(註冊中心)提出申請數位憑證的要求,在此階段中,使用者須先準備好憑證請求檔(Certificate Signing Request file,CSR),並藉此向RA申請數位憑證,在RA確認使用者的真實身分後,便會向CA(憑證管理中心)提出要申請數位憑證的要求。

最後,CA將負責產生並管理數位憑證(例如註銷或展延)等相關事項,基本上,所有的公開金鑰都被集中保管於CA,並提供驗證所需要的公開金鑰查詢的服務。

上述中的數位憑證內容採用X.509標準,公開金鑰的資訊會內嵌於憑證中,如圖4所示為一數位憑證的部分內容。


▲圖4 數位憑證內容。


公共金鑰基礎建設是採用集中式的管理,由信任的公正第三方機構來管理公開金鑰。

相對於公共金鑰基礎建設的架構,GPG所採用的金鑰管理架構為信任網路(Web Trust Model),簡單來說,這是一種交友圈的概念,透過朋友來信任陌生人的金鑰,而不像公共金鑰基礎建設,是因為信任公正的第三方機構而信任該機構所簽發的金鑰。

例如,我有個朋友叫Frank,另外一個朋友為Debby,但Debby與Frank並不認識。如果Debby想要信任Frank,即可透過我的背書來讓Debby信任Frank。在信任網路的架構上,即是利用我在Frank的公開金鑰上簽名(Signed)來證明Frank是我的朋友,進而讓Debby因為信任我而信任Frank。

什麼是GPG

PGP(Pretty Good Privacy)是一套用於訊息加密及驗證的應用程式,有點像是OpenSSL的功能。嚴格來說,PGP本身為商業應用程式,並不是可無償使用。但在開源碼社群中,也有提供類似的工具,名稱為GPG,意謂GNU Privacy Guard,在本文即是使用GPG來實作相關加解密的功能。安裝GPG軟體很簡單,在CentOS的環境下,只要使用yum指令即可辦到:

 
yum install gpg


在安裝成功後,GPG主要提供以下兩個主程式:

gpg

這是主程式,可利用這個程式來達到下列主要功能:產生相對應的金鑰對,在本文中將使用最常見的RSA公開金鑰系統來實作;回收金鑰,當金鑰出現問題時,可用來作廢已公開的金鑰;可將金鑰的內容匯出及上傳至公開的金鑰伺服器,讓其他人可下載;可將金鑰匯入至本機來提供相關功能,例如加解密資料;提供加╱解密資訊和數位簽章功能。

這篇文章讓你覺得滿意不滿意
送出
留言
顯示暱稱:
留言內容:
送出