第216期 / October 5, 2015

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

檔案加解密利器- Gnu Privacy Guard (GPG)介紹

作者/陳立人

[發表日期:2015/9/30]

前言

在資訊爆炸時代,許多資訊的處理及交換皆是透過網際網路來進行,但是在網際網路上大部分的應用,如FTP、Web、Email等一般都是使用明文傳輸方式(SFTP、https、smtps等例外)。因此,在傳輸重要檔案時,應對檔案進行加密,確保不會有其他人藉機竊取這些敏感性資料。加密檔案的方式又可分成對稱式加密與非對稱式加密,對稱式加密的特色在於加解密所使用到的密鑰(Key)需為同一把鑰匙,舉個簡單的例子來說,當Alice要傳送但給Bob時,Alice與Bob協議使用密碼”qwer”來作為加密的金鑰,但這種加密方式本身存在著一種缺陷,若Bob將此密碼告訴其他人,則Alice加密過後的檔案就不再是安全的了。

因此,後來便出現了非對稱式加密,它的核心概念為使用一對金鑰來做加密的動作,即通訊雙方需各持有一對金鑰,一把為私鑰(private key);一把為公鑰(public key)。顧名思義,私鑰即是產生後要自己保管好的鑰匙,而公鑰則是可以發布出去給其他人使用的。假設Bob產生了一對金鑰,若是Alice想要傳送檔案給Bob,則必須使用Bob所提供的公鑰進行加密,再將加密後的內容傳送給Bob,這個加密後的檔案只能使用Bob的私鑰來解密,即使網路上有其他人擷取了此訊息,也無法去解析,因為只有Bob有這把私鑰。

支援非對稱式加密的軟體有多種,最著名的可能是美國的PGP了,不過它是個商務軟體,價格不便宜。而Gnu Privacy Guard (GPG)則是由Werner Koch 於 1999年發佈用來取代PGP免費且開放原始碼的軟體,且它是基於OpenPGP標準來開發,因此符合IETF標準。因此GPG也可以解密由PGP或OpenPGP所加密的檔案。大略來說,GPG的主要功能可分為下列5大項:
1.產生金鑰對
2.回收金鑰
3.金鑰的匯出及上傳
4.金鑰的匯入
5.加/解密和數位簽章
下面將會說明如何使用GPG來對檔案做加解密。

環境設定

先到 GnuPG 的下載網站:下載軟體gnupg-w32cli-1.4.0a.zip. (ftp://ftp.gnupg.org/GnuPG/binary/gnupg-w32cli-1.4.0a.zip),這裡使用gnupg-w32cli-1.4.0a 版。在 Windows 平台,可以用 7Z 解壓,並將解開的目錄放在 C:\gnupg。

再到 開始(Start) > 控制(Control Panel) > 系統(System),選擇 進階(Advanced tab) 並編輯環境變數中的 Path 參數,增加C:\gnupg。


《圖一》


GPG加解密

一、產生金鑰對

要使用GnuPG加密,首先需要創建金鑰對,下面會依序說明如何建立。

於命令提示字元中執行產生金鑰對指令:


選擇使用的金鑰種類,DSA和RSA只能用在數位簽章,因此這裡選擇預設的即可


選擇ELG-E 金鑰長度的位元數,選擇密碼的位元數,位元數越大,產生的金鑰越安全,但速度越慢,這邊可以依照實際需求來設定。


定義金鑰對的有效期限,這邊請依照實際情況定義有效期限,0則代表永久有效


設定使用者標識,Real name請填寫真實姓名(此值為USER-ID 作加/解密時要指定用的),Email address則是作為標記之一,不可重複,Comment只是註解,可不設定。


確定上述資料輸入正確後,請輸入O並繼續設定Private Key的保護密碼。


等待Key產生後,系統會告知金鑰對產生完成。並列出此組Key的資訊如下:


若想再修改Private Key的保護密碼,可利用Key的User-ID來找到Key後,再修改密碼使用User-ID(這邊也可使用Email來尋找,只要是使用者ID裡的子字串皆可)尋找Key


二、回收金鑰

當金鑰產生完成後,應該立即做一個公鑰回收證書,這個證書可以再忘記私鑰的密碼或者私鑰遺失時,藉著發佈這個證書來聲明以前的公鑰不再有效。以下將會說明產生公鑰回收證書的方法。

輸入下列指令,對剛剛產生的金鑰對,創建一個名為revoke.asc的回收證書


一旦決定撤銷已經上傳的公鑰,就需要將該金鑰的回收證書上傳至金鑰伺服器完成回收工作。

三、金鑰的匯出及上傳

產生金鑰對後,需要匯出公鑰準備給想傳輸機密檔案的其它使用者,或者是直接將公鑰發佈到公用的伺服器中,讓其他使用者可以透過ID來搜尋公鑰。下面將會說明如何匯出公鑰/私鑰與上傳公鑰。

  • 公鑰的匯出:

    於命令提示字元中執行下列指令,此指令表示將第一步驟產生的公鑰匯出至檔名為AndyChen.pubkey.asc的公鑰中,這把公鑰就是讓其他使用者匯入用的。



  • 公鑰上傳:

    除了將匯出的公鑰郵寄給其他使用者之外,也可選擇將公鑰上傳到全球性的金鑰伺服器,其他用戶可以透過公鑰ID來搜尋並獲得公鑰。於命令提示字元輸入下列指令,將公鑰發佈到伺服器上。


  • 另外也可以定義預設的伺服器key server,只要透過修改C:\gnupg\gpg.conf中的keyserver資訊即可變更上傳的key server

  • 私鑰的匯出:

    若想要備份一份私鑰自行保存,也可將私鑰匯出,但切記務必將這把私鑰保存好,否則這組金鑰對就失去效用了。

    於命令提示字元中執行下列指令,此指令表示將私鑰匯出至檔名為AndyChen.prikey.asc的私鑰中



  • 四、金鑰的匯入

    當其他使用者接收到公鑰時,他必須將公鑰匯入至他的機器中,才可開始進行機密檔案的傳輸。

    於命令提示字元輸入下列指令即可匯入公鑰:


    接著確定是否有成功匯入金鑰,可使用下列指令來查看。



    五、加/解密和數位簽章

    透過上述的金鑰對創建以及公鑰發佈後,加密和解密資料變得非常容易,使用者可以透過使用該功能來達到安全地在網路上傳輸自己的隱密資料的目的。如果有個使用者Alice想要傳送機密資料給Andy,Alice可以使用Andy的公鑰來加密這個檔案。而這個檔案也只有Andy可以使用自己的金鑰來解密查看。下面會一一敘述加密與解密的步驟。

  • 加密檔案:

    Alice使用下列指令,將寄送給Andy的檔案(test.txt),使用Andy的公鑰來加密為隱密檔案(test.encryp.txt)。其中,--armor是指以ASCII編碼來輸出test.encryp.txt,可直接用一般的記事本開啟。


    產生出來的test.encryp.txt內容會如下所示,即是一堆不可解的英文、數字與特殊字元混合出現的一串文字,只有持有私鑰的人才可解密此檔案。


  • 解密檔案:

    Andy收到Alice寄來的檔案後,以下列指令將此檔案使用私鑰來解密以查看其內容。


    再輸入加密私鑰的密碼,輸入完成後,就可以將加密test.encryp.txt ,還原成test.txt的原始檔案了。


  • 數位簽章:

    當Andy也想送隱密檔案給Alice時,除了用其公鑰加密外,在加密之前,還需要先對欲傳送的檔案進行簽名的動作,這樣才能讓Alice收到檔案時,100%確定此檔案是由Andy所送出的。以下接著繼續說明如何對檔案進行簽名。
    輸入下列指令,將test.txt以私鑰來簽名為test.sig.txt,其中test.sig.txt包含了原始檔案與簽名。


    將簽名與加密後的檔案寄給Alice,Alice使用其私鑰解密後,接著使用下列指令來驗證此份檔案是由Andy寄出給她的。


    透過上述的動作,在網路上傳送資料時,再也不需恐懼機密資料的外洩,或者是有人偽裝熟識的人來欺騙資料。


  • 實務應用

    在銀行的行動支付系統中,當客戶至銀行申請完行動金融卡後,銀行會將行動金融卡的製卡檔案送與行動支付公司,製卡檔案中會包含申請客戶的個人資訊,因此必須將製卡檔案做加密,確保製卡檔案不會在傳輸過程中被有心人士擷取後竊取申請客戶的個人資料。因此,在這種情況下,非常適合使用GPG將製卡檔使用行動支付公司的公鑰做加密,確保製卡檔在傳輸過程的保密性及安全性。詳細的架構圖如下圖二所示。


    《圖二》


    結論

    在這資訊量越來越大的時代,越來越多傳統人工方式傳送的機密資料交換,漸漸地皆透過電腦以及網路來做處理與傳送,此舉可增進傳送效率,但伴隨而來的風險則是這些機密資料被有心人士擷取,進而以這些資料做非法勾當。除了被擷取機密資料的危險之外,網路上也常充斥著冒充其他人身分來寄送夾帶著植入木馬檔案的郵件,而收件人往往會因寄件者是自己所熟悉的人而不經意地開啟,進而導致電腦被開後門而被竊取資料。GPG可以產生一對金鑰,私用金鑰用來解碼檔案,以及傳出檔案時作簽章( sign ),而當其他人要傳檔案給你時,即可使用公開金鑰來作加密。若是真的私用金鑰被竊或遺失時,也可於第一時間透過撤銷金鑰的方式來將傷害減至最低。透過GPG,在網路上傳輸機密檔案、Email時也可更加安心。