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 金鑰交換驗證網站。