0. 下載並安裝gnupg 1.2.1或更高的版本,可以從http://www.gnupg.org獲取到完整的源代碼以及相關信息。
1. 運行gnupg,創建默認的~/.gnupg目錄及相關文件。
$ gpg
注意這裡可能提示: "gpg: Warning: using insecure memory!",這個問題詳細的解決方法請參照gnupg的網站FAQ的6.1節
http://www.gnupg.org/(en)/documentation/faqs.html#q6.1
2. 創建一個新的公私鑰匙對(key pair)
$ gpg --gen-key
按提示一步步做到最後,注意*千萬*不要忘記或洩漏我們的私匙(passphrase)!
我們假定最後的用戶信息為:
You selected this USER-ID:
"somebody (sb.) <[email protected]>"
3. 創建一個撤銷證書(revocation certification)並做好備份
$ gpg --output somebody_gpg_revoke.asc --armor --gen-revoke [email protected]
將這份證書(somebody_gpg_revoke.asc)保存/備份到安全的位置。
注意在任何時刻我們都可以使用
$ gpg --list-key
查看當前可用的key
4. 導出公匙
$ gpg --output somebody_gpg_asc.gpg --armor --export [email protected]
注意這個公匙文件(somebody_gpg_asc.gpg)是需要和別人交換發給別人使用的。我們也可以將此證書發送到某些知名的服務器。
請參見相關文檔
5. 現在我們假定需要將文件testfile.txt發送到用戶 [email protected]
這裡簡單的介紹一下PGP的建立過程。
a) 用戶A獲取用戶B的公匙文件,並導入改公匙
b) 用戶A簽名用戶B的公匙文件。
c) 用戶A通過用戶B的公匙加密文件F,並將加密過後的文件F.asc發送給用戶B
d) 用戶c獲取到文件F.asc,並通過自己的私匙解密文件F.asc並還原為文件F
公匙雖然是公開的,但目前理論上絕對是安全的。其基本原理為任意一個合數都可以分解為多個質數的乘積。比如
8 = 2*2*2
14 = 2*7
但一個數很小的時候我們能很快發現這些互質的數(eg: 39 = 13 * 3),但當這個數很大的時候卻很難找到這些互質的數了,如:
995757614766768701903 = 13757413 * 72379713741731
已經基本不可能退出這兩個互質的數(不一定是真正的質數,這裡僅為做一個簡單的演示)了。實際我們采用的數字通常為1024-bit
這樣產生的結果即使在目前最快的計算機上計算,至少也需要幾千年的時間才可能得出最終的結果。
6. 導入[email protected]的公匙。
$ gpg --import anotherone_gpg_asc.gpg
可以通過
$ gpg --list-key
驗證是否導入成功
7. 簽名該公匙文件
$ gpg --edit-key [email protected]
$ # fpr
$ sign
# 按要求輸入相關簽名信息。
$ # check
$ write
8. 通過用戶[email protected]的公匙加密需要傳送的文件testfile.txt
$ gpg --armor --encrypt --recipient [email protected] testfile.txt
得到文件testfile.txt.asc,將此文件發送到用戶[email protected]。
9. 用戶[email protected]收到文件testfile.txt.asc後,利用自己的私匙解密該文件
$ gpg --decrypt testfile.txt.asc
得到文件testfile.txt
注:測試通過的情況多出了兩步,即用戶[email protected]也導入了[email protected]的公匙並做了數字簽名。