本文將先說明資料傳輸機制,因為不想被第三者得知,所以必須搭配密碼加以保護,因此將講解對稱式與非對稱式密碼。最後,再簡單介紹開放原始碼界的訊息加密、驗證程式GPG,然後依據前面所講的理論來進行加密解密的實際操作。
gpg-agent
此為管理gpg金鑰的管理程式,在使用gpg功能時,通常都需要啟動此程式來管理及應用相關的金鑰。
可使用「gpg-agent --daemon」指令,以常駐程式的方式啟動gpg-agent。
在簡單說明GPG主要程式的功能後,接下來即以實作的方式來說明如何使用GPG來完成資訊安全傳遞的功能。
GPG實務運用
假設使用者A要接收使用者B利用A的公開金鑰所加密的檔案(檔名為test.txt,內容為「hello world」),A在接收到B的密文之後,即可利用相對應A的私有金鑰來進行解密。
在使用GPG進行加解密資料之前,必須先產生相關的公開金鑰和私有金鑰,可利用「gpg --gen-key」指令來產生相對應的金鑰。在產生過程中會詢問相關的資訊,如圖5~6所示,執行過程說明如下:
|
▲圖5 在產生過程中將詢問相關資訊。 |
|
▲圖6 詢問相關資訊以便確認。 |
(1) 選擇加解密所使用的密碼演算法,在此使用RSA演算法。
(2) 設定金鑰的大小,可設定1024至4098位元,當然金鑰選擇越多位元,越不容易破解。
(3) 設定金鑰的過期時間。可設定此金鑰的有效期間,在本例中為永久有效。
(4) 設定使用者的名稱、電子郵件以及註解等相關資訊,GPG會利用此資訊組合成使用者ID(User ID)。
在產生過程中,GPG建議使用者利用隨意移動滑鼠或在鍵盤上輸入亂數的方式,來增強金鑰的複雜度。
成功執行之後,在家(home)目錄的「.gnupg」目錄下便會產生公開金鑰(檔名為pubring.gpg)以及私有金鑰(檔名為secring.gpg),在成功產生金鑰之後,可利用「gpg -k」指令來顯示金鑰的相關資訊,顯示結果會有四行,執行後的結果如圖7所示。
|
▲圖7 利用「gpg -k」指令顯示金鑰的相關資訊。 |
(1) 第一行為金鑰所在的檔案。
(2) 第二行為公開金鑰的相關資訊,包含金鑰的長度及雜湊值(Hash),此雜湊值可當作金鑰ID(以下均稱Key ID)和產生的時間。
(3) 第三行是使用者ID的資訊。
(4) 最後一行為私有金鑰的相關資訊,包含金鑰的長度與雜湊值,以及產生的時間。
產生金鑰之後,由於有可能發生金鑰被盜或遺失等等異常狀況,所以建議先針對此金鑰製造一份作廢憑證。在金鑰發生異常問題的時候,可利用此憑證來作廢相關的金鑰。執行下列指令來製作作廢憑證:
? klgpg --output revoke.asc --gen -revoke [Key ID]
在執行成功後,就會產生一個名稱為「revoke.asc」的作廢憑證檔。接著,將所產生的公開金鑰上傳至金鑰伺服器上,可依如下指令上傳至PGP的金鑰伺服器上,讓其他人可搜尋:
? gpg --keyserver pgp.mit.edu --send -keys [Key ID]
在上傳成功後,可利用「gpg --keyserver pgp.mit.edu --search-key [Key ID]」指令來確認金鑰是否已上傳成功,如果回覆如圖8所示的資訊,即表示該公開金鑰已正常地上傳至金鑰伺服器。
|
▲圖8 公開金鑰已正常上傳至金鑰伺服器。 |
在B要傳遞檔案給A之前,首先B要先去下載A的公開金鑰,使用如下指令:
? gpg --keyserver pgp.mit.edu --recv -keys [Key ID]
成功執行後,可以再利用「gpg -k」指令檢查是否已取得相關金鑰,執行結果如圖9所示。
|
▲圖9 檢查是否已取得相關金鑰。 |
確認取得A的公開金鑰後,利用此金鑰加密test.txt,加密指令如下:
? gpg -e -r "USER ID" test.txt #指定利用User ID(為A的User ID)的公鑰來加密