不安全網路中的資料安全傳輸利器——GnuPG(上)

技術小甜發表於2017-11-16
不安全網路中的資料安全傳輸利器——GnuPG

李洋

1  GnuPG簡介

隨著網路與計算機技術的發展,資料儲存與資料交換的安全性、完整性和一致性已經變得越來越重要。如何保證在不安全的網路上傳輸資料的安全性成為網路資訊保安界研究的熱點和經典問題。本文將通過具體的加解密例項向使用者來介紹一種Linux下的基於PGP(Pretty Good Privacy)機制的加密及簽名軟體——GnuPG,包括金鑰生成、公鑰匯出、加密檔案、解密檔案、對檔案進行數字簽名等重要步驟,通過它可以極大地保證網路使用者傳輸及使用資料的安全性。並且,使用者可以通過靈活運用本文的技術來對網路傳送的文件、電子郵件等進行安全傳輸。

PGP(Pretty Good Privacy),是一個基於RSA公鑰加密體系的郵件加密軟體。它不但可以對使用者的資料保密以防止非授權者閱讀,還能對你的郵件加上數字簽名從而使收信人確信郵件是由你發出。讓人們可以安全地和從未見過的人們通訊,而事先不需要任何保密的渠道用來傳遞金鑰。PGP採用了審慎的金鑰管理,一種RSA和傳統加密的雜合演算法,用於數字簽名的郵件文摘演算法,加密前壓縮等。它功能強大,速度很快。

PGP的創始人是美國的PhilZimmermann。他創造性地把RSA公鑰體系的方便和傳統加密體系的高速度結合起來,並且在數字簽名和金鑰認證管理機制上有非常巧妙的設計。因此PGP成為幾乎最流行的公鑰加密軟體包。其中,RSA(Rivest-Shamir-Adleman)演算法是一種基於“大數不可能質因數分解假設”的公鑰體系。簡單地說就是找兩個很大的質數,一個公開給世界,一個不告訴任何人。一個稱為“公鑰”,另一個叫“私鑰”。這兩個金鑰是互補的,就是說用公鑰加密的密文可以用私鑰解密,反過來也一樣。

具體地說,GnuPG是實現安全通訊和資料儲存的一系列工具集,可以做加密資料和做數字簽名之用。在功能上,它和PGP是一樣的。由於PGP使用了IDEA專利演算法,所以使用PGP會有許可證的麻煩。但是GnuPG並沒有使用這個演算法,所以對使用者來說使用GnuPG沒有任何限制。GnuPG使用非對稱加密演算法,安全程度比較高。所謂非對稱加密演算法,就是每一個使用者都擁有一對金鑰:公鑰和私鑰。其中,金鑰由使用者儲存,公鑰則由使用者儘可能地散發給其他人,以便使用者之間的通訊。該軟體可以從網站http://www.gnupg.org/上進行下載安裝。

GnuPG支援的演算法有如下:

 公鑰:RSA, RSA-E, RSA-S, ELG-E, DSA

 對稱加密:3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH

 雜湊:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512

 壓縮:不壓縮, ZIP, ZLIB, BZIP2

其使用的基本語法為:gpg [選項] [檔名]

其實現的功能包括簽名、檢查、加密或解密,預設的操作依輸入資料而定。

2  詳細使用方法

1.生成金鑰對

使用GnuPG之前必須生成金鑰對(公鑰和私鑰),引數選項”–gen-key”可以生成金鑰對。可按如下步驟操作,如圖1、圖2所示。在圖1中,首先使用者需要注意有如下幾個關鍵的步驟:

(1)GnuPG要求輸入要生成的金鑰的演算法:GnuPG可以生成多種金鑰對,這裡有三種選擇。DSA金鑰是生成證書的最基本的金鑰格式。ElGamal金鑰對可以用來加密。第二種選擇與第一種相似,但是僅僅生成DSA金鑰對,第三種選擇可以生成供簽證和加密使用的ElGamal金鑰對。對大多數使用者來說,使用預設的選擇是非常方便的。

(2)選擇金鑰的長度,DSA金鑰的長度在512位~1024位之間,Elmagal金鑰的長度則沒有限制。生成一個很長的金鑰既有優點也有缺點,長的金鑰無疑安全性非常高,但是會導致加密的過程變得緩慢,另外,金鑰過長,也會使證書的長度變大。預設的金鑰長度1024位已經夠用了,確定了金鑰的長度之後,就不能再改變它。

(3)需要指定這個金鑰對的有效日期,如果選擇了生成ElGamal或者 DSA金鑰對,它們需要指定金鑰對的失效日期。對於大多數使用者來說,金鑰對沒有失效期限是可以的。雖然在金鑰對產生以後,可以改變它的有效日期,但是仍要謹慎選擇這個引數。因為公鑰傳送出去以後,很難再改變其他使用者擁有的您的公鑰。

 

圖1  生成金鑰對的前3個關鍵步驟

完成上述步驟後,使用者還需要注意如圖5所示的後續幾個關鍵步驟:

(4)使用者需要指定一個使用者ID來標識選擇的金鑰,GnuPG可以根據使用者的真實姓名、註釋和E-mail地址產生一個使用者ID。在圖2中,我們使用姓名(liyang),電子郵件地址(liyang@tsinghua.com)和註釋(liyang@tsinghua),並設定了金鑰的密碼,來完成了該步驟。這個口令的目的是用來加密使用者的私鑰,這樣,即使有人偷走了使用者的私鑰,沒有這個口令,也無法使用,這個口令的長度沒有限制,但是,正如我們所知道的,一個短的口令是很容易被破解的。同樣,如果使用者的口令是一個單詞,也很容易被破解。

(5)在產生金鑰的過程中,GnuPG需要得到一些隨機的數字。這些隨機的數字可以從使用者的系統當前狀態中得到,所以這時候,使用者可以隨機敲一下鍵盤或者移動滑鼠,來產生高質量的隨機數。圖2中系統就明顯地要求筆者儘量多產生一些隨機數字來生成金鑰,以保證質量。

 

圖2  生成金鑰的後續2個關鍵步驟示意
完成了上述5個關鍵步驟後,如果系統顯示如圖3所示的成功介面,則生成金鑰成功,否則使用者需要再重複如上5個步驟。

 

圖3  生成金鑰成功

2.為金鑰建立吊銷證書

當使用者的金鑰對生成之後,使用者應該立即做一個公鑰回收證書,如果忘記了私鑰的口令或者私鑰丟失或者被盜竊,使用者可以釋出這個證書來宣告以前的公鑰不再有效。生成回收證書的選項是”–gen-revoke”。具體使用的命令是:

# gpg –output revoke.asc –gen-revoke mykey 

其中mykey 引數是可以表示的金鑰標識,產生的回收證書放在revoke.asc檔案裡,一旦回收證書被髮放,以前的證書就不能再被其他使用者訪問,因此以前的公鑰也就失效了。具體的過程如圖4至6所示。在該過程中我們為使用者liyang的金鑰建立了一份吊銷證書,在建立過程中需要依次輸入吊銷理由和為金鑰設定的密碼才能成功建立:

 

圖4  輸入吊銷理由

 

圖5  輸入為金鑰建立的密碼
 

圖6  成功建立吊銷證書

3.顯示金鑰列表

完成上述操作後可以使用 –list-keys 選項列出我們生成的金鑰,如圖7所示:

 

圖7  金鑰列表

4.輸出公鑰

使用者可以輸出您的公鑰供您的主頁使用,也可以把它放在金鑰伺服器上,當然,還可以使用於其他的途徑。在使用此公鑰之前使用者首先要匯出它。選項–export可以實現這個功能,在使用這個選項時,還必須使用附加的選項指明使用者要輸出的公鑰。

下面的命令表示以二進位制格式輸出公鑰:

# gpg –output pubring.gpg –export samsunglinux@minigui.org

如下命令表示以ASCII字元格式輸出:

#gpg –output pubring.gpg –export–armor> liyang_public-key.asc

5.匯入公鑰

使用者可以把從第三方的公鑰資料庫中得到的公鑰匯入自己的私有資料庫,在與他人進行通訊時使用。命令如下:

#gpg –import < filename >

其中,引數filename為公鑰檔案。

圖8給出了將使用者liyang的公鑰匯入到使用者samsunglinux自己的私有資料庫的例子:

 

圖8  匯入公鑰示例

6.確認金鑰

匯入金鑰以後,使用數字簽名來驗證此證書是否合法。檢視數字簽名使用 –fingerprint 選項。其命令如下所示:

#gpg –fingerprint < UID > 

其中,UID為使用者要驗證的公鑰。圖9給出了驗證證書的例子:

 

圖9  確認金鑰示意
7.金鑰簽名

匯入金鑰之後,可以使用 –sign-key 選項進行簽名,簽名的目的是證明使用者完全信任這個證書的合法性。其命令格式為:

# gpg –sign-key < UID > 

其中,UID 是要簽名的公鑰。圖10為使用該命令的結果示意:

 

圖10  確認金鑰示意

8.檢查簽名

使用者可以使用 –check-sigs選項來檢查在上面對金鑰所作的簽名。其命令格式為:

# gpg –check-sigs < UID >

這個選項可以列出此金鑰檔案的所有的簽名。圖11給出了相應的示意:

 

圖11  檢查簽名示意

9.加密和解密

使用GnuPGP加密和解密一個檔案非常容易,如果使用者要給對方使用者傳送一個加密檔案,可以使用對方使用者的公鑰加密這個檔案,並且這個檔案也只有對方使用者使用自己的金鑰才可以解密檢視。

加密一個檔案可以使用下面的指令

#gpg –r < UID > –encrypt < file > 

其中,UID是對方的公鑰,file為要加密的檔案。

對應地,如果使用者要解開一個其他使用者發給您的檔案可以使用下面的指令:

#gpg -d < file >

其中,file是要解密的檔案。解密過程中,GnuPG會提示使用者輸入使用金鑰所需要的口令,也就是在產生私鑰時使用者所輸入的口令,否則,該檔案將無法正常解密和為使用者進行使用。圖12和圖13分別顯示了使用者samsung對檔案gpg.conf進行加密傳輸,使用者liyang對該加密檔案gpg.conf.gpg進行解密的過程。

 

圖12  使用者samsunglinux對檔案gpg.conf進行加密
 

圖13  使用者liyang對檔案進行解密並瀏覽(白色部分)

本文轉自samsunglinuxl51CTO部落格,原文連結: http://blog.51cto.com/patterson/237646,如需轉載請自行聯絡原作者


相關文章