導入公鑰
作為用戶,也會收到別人的GPG公鑰,它們可能來自網站、電子郵件、FTP和目錄服務等,只要信任其來源,就可以將其導入自己的GPG環境,之後才可以與相應的人員進行基於GPG的各種應用。導入公鑰的過程可以分為以下三步:
1.導入
比如,Terry收到朋友Brian的公鑰文件brian.gpg,可以使用以下命令導入文件:
#gpg --import terry.gpg
2.核對“指紋”
公鑰是可以偽造的。James可以偽造一個Brian的公鑰,然後想辦法讓Terry得到。如果Terry對收到的公鑰不加驗證,那麼他發給Brian的加密郵件就可能被James解密。GPG的架構中並沒有一個PKI這樣的證書管理系統,GPG的公鑰信任是通過“Truth Web”實現的。
生成Terry公鑰的“指紋”:
#gpg --fingerprint
[email protected] pub 1024D/7234E374 2004-09-10 Terry
Yu (for test) <
[email protected]>
Key fingerprint = A58F D71A 28BA
499D 805B 588E 82FB CD0F 7234 E374
sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]
這個“指紋”是惟一的。可以通過與對方核對“指紋”是否一致,來確定這個公鑰是否可信和合法。
3.簽名
在成功導入,並確定這個公鑰是可以相任之後,要立即對這個公鑰進行簽名。這樣,就可以驗證來自對方郵件的真實性了。
對公鑰進行簽名可以使用如下命令:
#gpg --sing-key
[email protected] 或者
#gpg --edit-key name
#command > sign
檢查對方郵件,比如Brian的簽名:
#gpg --check-sigs
[email protected] 現在,有了Brian簽名的公鑰,通過這個公鑰就可以和Brain進行非對稱加密通信了。
應用GPG
GPG使用的是非對稱的密鑰體系,用戶擁有一對密鑰,包括一個公鑰和一個私鑰。公鑰對外公布,私鑰則由自己保存。使用公鑰加密的數據可以用私鑰解密,同樣,使用私鑰加密的數據可以用公鑰解密。
非對稱的密鑰可以用來加密和做數字簽名。當用戶關心信息保密性時,使用加密功能;當用戶關注信息完整性及不可抵賴性時,使用數字簽名功能;當用戶需要同時關注信息的機密性、完整性及不可抵賴性時,可以將加密和數學簽名混合使用。
簡單了解這些密碼學概念後,就可以開始真正的應用實踐了。
對文件進行加密和數字簽名
KDE中提供了圖形化的加密操作方法。比如,在KDE中對一個文件加密,只需在KDE文件管理器Konqueror中選中該文件,單擊右鍵選擇“Actions”中的“Encrypt File”就可以加密文件。加密後的文件以.asc結尾。
對於圖形方式的加密操作不多做介紹,下面將重點放在命令行操作方式上,介紹命令行下的各種文件加密和簽名的操作方法。
1.對文件進行數字簽名
#gpg --clearsign policy.txt
You need a passphrase to unlock the secret key for
user: "test (test) <
[email protected]>"
1024-bit DSA key, ID ADD93830, created 2004-07-01
運行以上命令,生成一個名為report.txt.asc的文件,該文件中除了原文件信息外還包含數字簽名信息。
2.驗證文件的數字簽名
#gpg --verify policy.txt.asc
gpg: Signature made 2004年11月04日 星期四 15時58分07秒 UTC using DSA key ID ADD93830
gpg: Good signature from "test (test) <
[email protected]>"
以上命令運行的結果顯示該簽名是正確的。
3.用指定的公鑰對文件加密
#gpg --encrypt -r
[email protected] report.txt
gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: next trustdb check due at 2005-09-10
運行以上命令,使用自己的公鑰加密report.txt文件,生成加密文件report.txt.gpg。如果使用編輯軟件打開該加密文件,會發現它包含的是一些不可理解的字符和亂碼。
4.用私鑰對加密文件解密
#gpg --decrypt report.txt.gpg >report.txt
You need a passphrase to unlock the secret key for
user: "test1 (unclassfication) <
[email protected]>"
2048-bit ELG-E key, ID 33735683, created 2004-09-29
(main key ID 79EB3D97)
gpg: encrypted with 2048-bit ELG-E key, ID 33735683,
created 2004-09-29
"test1 (unclassfication) <
[email protected]>"
以上命令要求輸入對應私鑰的保護口令才能成功解密,解密後的文件內容被輸出到report.txt文件中。
5.用公鑰同時進行文件簽名和加密
#gpg -se -r
[email protected] report.txt
You need a passphrase to unlock the secret key for
user: "test (test) <
[email protected]>"
1024-bit DSA key, ID ADD93830, created 2004-07-01
以上命令要求輸入對應私鑰的保護口令,輸入正確的口令後,簽名和加密成功完成。
這些都是應用GPG簽名和加密文件的一些常用命令,更詳細的用法可以參考GPG的幫助文件。
對電子郵件進行加密和數字簽名
實際上,GPG應用最多的地方是在電子郵件的加密和數字簽名上。許多電子郵件客戶端軟件都支持PGP/GPG方式的加密及數字簽名。這裡以Kmail為例,介紹如何設置Kmail,並利用Kmail發送加密及數字簽名的電子郵件。
Kmail是KDE環境中的電子郵件客戶端,類似於Windows下的Outlook Express。在選單中選擇“Settings→Configure-Kmail→Identites”,選定一個身份,單擊“Modify”進行編輯。選擇其中的“Advanced”標簽頁,可以看到類似圖2的界面。
圖2 Kmail的設置界面 其中,“OpenPGP Key”項是該身份所對應的PGP或GPG密鑰,可以單擊“Change”按鈕從GPG環境中選擇對應的密鑰對。
保存後,GPG的設置完成。試寫一封郵件,如圖3所示。圖中工具欄中凹下去的“鋼筆尖”圖標表示此郵件使用了數字簽名,緊靠旁邊的鎖形圖標表示加密,如果兩個圖標都凹下去則表示同時使用了加密和數字簽名。
圖3 使用數字簽名的電子郵件 發送郵件時,Kmail會要求給出對應密鑰的保護口令,如圖4所示。
圖4 要求輸入密鑰保護口令 正確輸入保護口令後,會彈出一個確認窗口,如圖5。
圖5 確認窗口 確認內容無誤後,單擊“OK”按鈕,一封帶有數字簽名的電子郵件就成功發出。發送加密郵件,以及發送同時加密和數字簽名的郵件,方法都是類似的。
軟件包簽名驗證 對於Red Hat等Linux發行商來說,他們常常會利用GPG對發布的軟件包進行簽名。用戶可以通過驗證軟件包的簽名來確保得到的軟件包沒有損壞,或者是被他人動過手腳。
驗證一個下載軟件包的GPG簽名可以按照以下步驟來進行:
1.從網上下載或其它方式得到軟件發行商的公鑰,並將其導入自己的GPG環境中。
2.通過對比“電子指紋”來確認公鑰,並對此公鑰進行簽名。
3.使用以下命令來驗證軟件包的GPG簽名:
#gpg --verify singaturefile.tar.gz taballpackage.gz
如果該軟件是RPM格式的,還可以使用如下命令來驗證:
#rpm -Kv your.rpm
密鑰管理
前面介紹了GPG在加密和簽名兩方面的應用,在應用過程中用戶要認真地對待密鑰管理問題。GPG的密鑰采用的是信任機制,並沒有一個中心的PKI可以幫助發布和驗證GPG用戶的公鑰。為了防止公鑰欺騙,保證公鑰的不可否認性(Non-repudiation),需要有一種機制來進行管理。下面是一些有益的建議,可供參考。
◆ 備份好私鑰
一旦私鑰丟失或損壞,則無法打開以前加密的文件。並且,即使知道私鑰被他人濫用,也無法使自己的公鑰過期。有了私鑰的備份,就能有效地回避此類風險。
◆ 建立有過期保護的公鑰機制
萬一私鑰丟失不能人工收回公鑰時,公鑰也可以在預定時間後自動過期。
◆ 為私鑰加上強口令保護
這樣,即使私鑰文件洩漏,還有口令保護。保護口令一定要有足夠的復雜度,才能有效地對抗暴力破解。
◆ 多重機制
在緊急情況下恢復密鑰要有多重控制。
◆ 使用版本控制軟件
使用版本控制軟件來收集和維護自己的公鑰庫。版本控制軟件可以有效地記錄歷史變更情況,保證公鑰庫的有條不紊。
小結
GPG作為一個開源並且免費的加密和數字簽名軟件已經存在多年。它不但可以為企業、個人之間的重要信息提供加密保護,還可以為出版的軟件、內核等電子產品進行數字簽名