GnuPG(GNU Privacy Guard,GPG)是一種加密軟件,它是PGP加密軟件的滿足GPL協議的替代物。GnuPG依照由IETF制定的en:OpenPGP技術標準設計。GnuPG是用於加密、數字簽章及產生非對稱匙對的軟件。GPG 兼容 PGP(Pretty Good Privacy)的功能。

本手冊提供對 GPG 的使用方法入門指引,可能與其他 en:OpenPGP 系統存在少量出入。若您沒有 GPG 軟件,請參考#獲取 GnuPG#圖形化操作也許比本文敘述的命令行方式更易懂。

本文並不是 GPG 的完整文檔,並且為方便入門而改變了編排方式。要獲得一份完整文檔,請嘗試 man gpg # 或者 gpg2info gnupg 或者訪問官方文檔。要獲得命令行幫助,請使用 gpg --help本文所使用的指紋等敏感十六進制值均來自隨機生成器。

生成密鑰對

編輯


GPG 一般使用諸如 RSAECC 一類的不對稱加密算法。在這一類算法中,一對密鑰被生成使用,其中公鑰公開發布,私鑰則由所有者自行保存。公鑰所加密的內容可以用私鑰解密,但公鑰不能解開公鑰加密的數據,反之亦然。

gpg --gen-key

運行這個命令來生成一對密鑰。一旦您完成了這個嚮導,您就獲得了一對用於加密和簽名的密鑰。接下來查看公鑰和私鑰:

haoqiang@tanux:~$ gpg -k # 公钥 (Public Key)
/home/haoqiang/.gnupg/pubring.gpg
-------------------------------
pub   4096R/D1101D36 2014-10-09 [有效至:2016-10-08]
uid                  Haoqiang Tan (LearnC) <haoqiang@tancc.org>
sub   4096R/3976FF14 2014-10-09 [有效至:2016-10-08]

haoqiang@tanux:~$ gpg -K # 私钥 (Secret Key)
/home/haoqiang/.gnupg/secring.gpg
-------------------------------
sec   4096R/D1101D36 2014-10-09 [有效至:2016-10-08]
uid                  Haoqiang Tan (LearnC) <haoqiang@tancc.org>
ssb   4096R/3976FF14 2014-10-09

不出意外的話,您將會看到類似這樣的輸出。為了好記,這兩個參數也有 --list-public-keys--list-secret-keys 的別名可以選用。

為了方便互相識別,PGP 密鑰具有指紋功能,一種鑑別位置不同的兩個密鑰是否相同的常用密碼學技術,用於不可能逐位 對比兩個密鑰的情況。指紋是利用 PGP 公鑰計算得到的長度較短方便比對的字串。有些人會選擇把指紋印在自己的名片上, 方便區分驗證。

haoqiang@tanux:~$ gpg --fingerprint # [UID],可选项
/home/haoqiang/.gnupg/pubring.gpg
-------------------------------
pub   4096R/D1101D36 2014-10-09 [有效至:2016-10-08]
密钥指纹 = 1A9E 5E2B 73E9 DDC7 D5AC  8119 D56A 80AF D110 1D36
uid                  Haoqiang Tan (LearnC) <haoqiang@tancc.org>
sub   4096R/3976FF14 2014-10-09 [有效至:2016-10-08]

UID 可以是 uid 中任意可以唯一確認密鑰組的信息,例如 Haoqiang, LearnC, D11101D36, 1a9e5e2b73e9ddc7d5ac8119d56a80afd1101d36

密鑰管理

編輯

導入導出

編輯

使用 gpg --import 即可令 gpg 開始讀取標準輸入來導入密鑰。如前文所述,你可以使用管道。

gpg --export [UID] 可令 gpg 導出某個公鑰。可以使用 -o filename 來指定輸出目標。

密鑰服務器

編輯

編輯密鑰

編輯

使用 gpg --edit-key [UID] 編輯密鑰。以下為部分常用命令:

quit
不保存退出
save
保存並退出
help
顯示幫助。
sign
為這些 UID 簽名。
tsign
簽名時簽入信任等級。
adduid
添加一個 UID 信息——這樣你就可以一對密鑰對應多個 UID 的郵箱信息了。

吊銷密鑰

編輯

經由上傳吊銷證書至PKI可以宣告此公鑰不再被使用。

簽名和驗證

編輯

簽名是 GPG 的一個常用例子,可以理解為將一段信息的散列值用私鑰加密保存以便他人用公鑰驗證身份。GPG 幫助里這麼寫道:

-s, --sign [文件名]        生成一份签名
    --clearsign [文件名]   生成一份明文签名
……
-o, --output 文件名        指定输出文件(不指定则输出到标准输出

當你使用 -s,數據會被壓縮從而顯得不可讀。[文件名]表示指定文件是可選的。 如果你不指定文件名,GPG 會嘗試從 標準輸入 中讀取數據。如果你沒有管道, 那麼標準輸入就是你的鍵盤,而你應該在換行後按下 Ctrl-d (= EOF, Windows 上為 C-z) 結束。這樣的簽名的最主要作用就是 防止他人冒充。要驗證他人的簽名,使用 gpg --verify [文件名],用法基本 一致。

加密和解密

編輯

加密

編輯

gpg --recipient user_id --output file_name --encrypt file_name

--recipient參數後跟對方的用戶ID;--output參數後面跟導出的文件名;--encrypt參數後跟要加密的文件。 這裡應該注意一個問題,就是你要確定你使用的公鑰的可靠性。

附錄

編輯

獲取 GnuPG

編輯

GnuPG 的官方網站為 gnupg.org

  • Windows:使用 gpg4win 套件,或安裝 Cygwin 內的軟件包 GnuPG
  • OS X:GPGTools 提供較好的支持版本和友好的 GUI 界面。
  • Linux 或其他 UNIX:使用包管理器搜索並安裝,或者編譯源代碼。

圖形化操作

編輯

GnuPG 存在多種圖形化前端,一般以證書管理器和電子郵件客戶端插件組成,有的也包含文件管理器菜單拓展。這些工具的基本原理和命令行上的相類,但使用起來更加簡便清晰。

站點

編輯
  • Keybase 是一個與社交網絡較深融合的 PGP 密鑰交換驗證網站。

參考資料

編輯