GPG
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 # 或者 gpg2
,info gnupg
或者訪問官方文檔。要獲得命令行幫助,請使用 gpg --help
。本文所使用的指紋等敏感十六進制值均來自隨機生成器。
生成密鑰對
編輯在 GPG 2.1 或以上的版本中,可以使用較新的 ECDSA+ECDH 算法,用更短的密鑰長度換取和 RSA 相近的安全性。在 --gen-key 前加上 --expert 即可看到選項。要注意支持這種算法的 OpenPGP 程序暫時較少。 |
GPG 一般使用諸如 RSA 和 ECC 一類的不對稱加密算法。在這一類算法中,一對密鑰被生成使用,其中公鑰公開發布,私鑰則由所有者自行保存。公鑰所加密的內容可以用私鑰解密,但公鑰不能解開公鑰加密的數據,反之亦然。
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 密鑰交換驗證網站。