GPG

本頁使用了標題或全文手工轉換
維基教科書,自由的教學讀本

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

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

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

生成金鑰對[編輯]


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

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
不儲存; 保存=>zh-mo:儲存退出
save
儲存; 保存=>zh-mo:儲存並退出
help
顯示幫助。
sign
為這些 UID 簽章。
tsign
簽章時簽入信任等級。
adduid
添加一個 UID 資訊——這樣你就可以一對金鑰對應多個 UID 的郵箱資訊了。

吊銷金鑰[編輯]

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

簽章和驗證[編輯]

簽章是 GPG 的一個常用例子,可以理解為將一段資訊的雜湊值用私鑰加密儲存; 保存=>zh-mo:儲存以便他人用公鑰驗證身份。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 介面; 界面=>zh-mo:介面。
  • Linux 或其他 UNIX:使用包管理器搜尋並安裝,或者編譯原始碼。

圖形化操作[編輯]

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

站點[編輯]

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

參考資料[編輯]