用 PGP 保護代碼完整性(二):生成你的主密鑰
在本系列文章中,我們將深度探討如何使用 PGP 以及為工作於自由軟體項目的開發者提供實用指南。在前一篇文章中,我們介紹了基本工具和概念。在本文中,我們將展示如何生成和保護你的 PGP 主密鑰。
清單
- 生成一個 4096 位的 RSA 主密鑰 (必要)
- 使用 paperkey 備份你的 RSA 主密鑰 (必要)
- 添加所有相關的身份 (必要)
考慮事項
理解「主」(認證)密鑰
在本節和下一節中,我們將討論「主密鑰」和「子密鑰」。理解以下內容很重要:
- 在「主密鑰」和「子密鑰」之間沒有技術上的區別。
- 在創建時,我們賦予每個密鑰特定的能力來分配功能限制。
- 一個 PGP 密鑰有四項能力
- [S] 密鑰可以用於簽名
- [E] 密鑰可以用於加密
- [A] 密鑰可以用於身份認證
- [C] 密鑰可以用於認證其他密鑰
- 一個密鑰可能有多種能力
帶有 [C] (認證)能力的密鑰被認為是「主」密鑰,因為它是唯一可以用來表明與其他密鑰關係的密鑰。只有 [C] 密鑰可以被用於:
- 添加或撤銷其他密鑰(子密鑰)的 S/E/A 能力
- 添加、更改或撤銷密鑰關聯的身份(uid)
- 添加或更改本身或其他子密鑰的到期時間
- 為了網路信任目的為其它密鑰簽名
在自由軟體的世界裡,[C] 密鑰就是你的數字身份。一旦你創建該密鑰,你應該格外小心地保護它並且防止它落入壞人的手中。
在你創建主密鑰前
在你創建的你的主密鑰前,你需要選擇你的主要身份和主密碼。
主要身份
身份使用郵件中發件人一欄相同格式的字元串:
Alice Engineer <alice.engineer@example.org>
你可以在任何時候創建新的身份,取消舊的,並且更改你的「主要」身份。由於主要身份在所有 GnuPG 操作中都展示,你應該選擇正式的和最有可能用於 PGP 保護通信的名字和郵件地址,比如你的工作地址或者用於在項目 提交 時簽名的地址。
密碼
密碼 專用於私鑰存儲在磁碟上時使用對稱加密演算法對其進行加密。如果你的 .gnupg
目錄的內容被泄露,那麼一個好的密碼就是小偷能夠在線假冒你的最後一道防線,這就是為什麼設置一個好的密碼很重要的原因。
一個強密碼最好使用豐富或混合的詞典的 3-4 個詞,而不引用自流行來源(歌曲、書籍、口號)。由於你將相當頻繁地使用該密碼,所以它應當易於輸入和記憶。
演算法和密鑰強度
儘管現在 GnuPG 已經支持橢圓曲線加密一段時間了,但我們仍堅持使用 RSA 密鑰,至少較長一段時間會這樣。雖然現在就可以開始使用 ED25519 密鑰,但你可能會碰到無法正確處理它們的工具和硬體設備。
在後續的指南中我們說 2048 位的密鑰對 RSA 公鑰加密的生命周期已經足夠,你可能也會好奇主密鑰為什麼是 4096 位。 原因很大程度是由於社會因素而非技術上的:主密鑰在密鑰鏈上是最顯眼的,如果你的主密鑰位數比一些和你交互的開發者的少,他們肯定會鄙視你。
生成主密鑰
為了生成你的主密鑰,請使用以下命令,並且將 「Alice Engineer」 替換為正確值。
$ gpg --quick-generate-key 'Alice Engineer <alice@example.org>' rsa4096 cert
這將彈出一個要求輸入密碼的對話框。然後,你可能需要移動滑鼠或隨便按一些鍵才能生成足夠的熵,直到該命令完成。
查看命令輸出,它就像這樣:
pub rsa4096 2017-12-06 [C] [expires: 2019-12-06]
111122223333444455556666AAAABBBBCCCCDDDD
uid Alice Engineer <alice@example.org>
注意第二行的長字元串 —— 它是你新生成的密鑰的完整指紋。密鑰 ID(Key ID)可以用以下三種不同形式表達:
- 指紋 ,一個完整的 40 個字元的密鑰標識符
- 長密鑰 ID ,指紋的最後 16 個字元(AAAABBBBCCCCDDDD)
- 短密鑰 ID ,指紋的最後 8 個字元(CCCCDDDD)
你應該避免使用 8 個字元的短密鑰 ID,因為它們不足夠唯一。
這裡,我建議你打開一個文本編輯器,複製你新密鑰的指紋並粘貼。你需要在接下來幾步中用到它,所以將它放在旁邊會很方便。
備份你的主密鑰
出於災後恢復的目的 —— 同時特別的如果你試圖使用 Web of Trust 並且收集來自其他項目開發者的密鑰簽名 —— 你應該創建你的私鑰的硬拷貝備份。萬一所有其它的備份機制都失敗了,這應當是最後的補救措施。
創建一個你的私鑰的可列印的硬拷貝的最好方法是使用為此而寫的軟體 paperkey
。paperkey
在所有 Linux 發行版上可用,在 Mac 上也可以通過 brew 安裝 paperkey
。
運行以下命令,用你密鑰的完整指紋替換 [fpr]
:
$ gpg --export-secret-key [fpr] | paperkey -o /tmp/key-backup.txt
輸出將採用易於 OCR 或手動輸入的格式,以防如果你需要恢復它的話。列印出該文件,然後拿支筆,並在紙的邊緣寫下密鑰的密碼。這是必要的一步,因為密鑰輸出仍然使用密碼加密,並且如果你更改了密鑰的密碼,你不會記得第一次創建的密鑰是什麼 —— 我保證。
將列印結果和手寫密碼放入信封中,並存放在一個安全且保護好的地方,最好遠離你家,例如銀行保險庫。
印表機注意事項 印表機連接到計算機的並行埠的時代已經過去了。現在他們擁有完整的操作系統,硬碟驅動器和雲集成。由於我們發送給印表機的關鍵內容將使用密碼進行加密,因此這是一項相當安全的操作,但請使用您最好的偏執判斷。
添加相關身份
如果你有多個相關的郵件地址(個人、工作、開源項目等),你應該將其添加到主密鑰中。你不需要為任何你不希望用於 PGP 的地址(例如,可能不是你的校友地址)這樣做。
該命令是(用你完整的密鑰指紋替換 [fpr]
):
$ gpg --quick-add-uid [fpr] 'Alice Engineer <allie@example.net>'
你可以查看你已經使用的 UID:
$ gpg --list-key [fpr] | grep ^uid
選擇主 UID
GnuPG 將會把你最近添加的 UID 作為你的主 UID,如果這與你想的不同,你應該改回來:
$ gpg --quick-set-primary-uid [fpr] 'Alice Engineer <alice@example.org>'
下次,我們將介紹如何生成 PGP 子密鑰,它是你實際用於日常工作的密鑰。
通過 Linux 基金會和 edX 的免費「Introduction to Linux」 課程了解關於 Linux 的更多信息。
作者:KONSTANTIN RYABITSEV 譯者:kimii 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive