用 PGP 保護程式碼完整性(四):將主金鑰移到離線儲存中

2019-01-01 00:35:00

如果開發者的 PGP 金鑰被偷了,危害非常大。了解一下如何更安全。

在本系列教學中,我們為使用 PGP 提供了一個實用指南。你可以從下面的連結中檢視前面的文章:

這是本系列教學的第四部分,我們繼續本教學,我們將談一談如何及為什麼要將主金鑰從你的家目錄移到離線儲存中。現在開始我們的教學。

清單

  • 準備一個加密的可移除的儲存(必要)
  • 備份你的 GnuPG 目錄(必要)
  • 從你的家目錄中刪除主金鑰(推薦)
  • 從你的家目錄中刪除吊銷證書(推薦)

考慮事項

為什麼要從你的家目錄中刪除你的主 [C] 金鑰 ?這樣做的主要原因是防止你的主金鑰失竊或意外洩露。對於心懷不軌的人來說,私鑰對他們具有很大的誘惑力 —— 我們知道有幾個惡意軟體成功地實現了掃描使用者的家目錄並將發現的私鑰內容上傳。

對於開發者來說,私鑰失竊是非常危險的事情 —— 在自由軟體的世界中,這無疑是身份證明失竊。從你的家目錄中刪除私鑰將幫你防範這類事件的發生。

備份你的 GnuPG 目錄

!!!絕對不要跳過這一步!!!

備份你的 PGP 金鑰將讓你在需要的時候很容易地恢復它們,這很重要!(這與我們做的使用 paperkey 的災難級備份是不一樣的)。

準備可移除的加密儲存

我們從取得一個(最好是兩個)小型的 USB “拇指“ 驅動器(可加密 U 盤)開始,我們將用它來做備份。你首先需要去加密它們:

加密密碼可以使用與主金鑰相同的密碼。

備份你的 GnuPG 目錄

加密過程結束之後,重新插入 USB 驅動器並確保它能夠正常掛載。你可以通過執行 mount 命令去找到裝置掛載點的完全路徑。(在 Linux 下,外接媒介一般掛載在 /media/disk 下,Mac 一般在它的 /Volumes 下)

你知道了掛載點的全路徑後,將你的整個 GnuPG 的目錄複製進去:

$ cp -rp ~/.gnupg [/media/disk/name]/gnupg-backup

(注意:如果出現任何通訊端不支援的錯誤,沒有關係,直接忽略它們。)

現在,用如下的命令去測試一下,確保它們能夠正常地工作:

$ gpg --homedir=[/media/disk/name]/gnupg-backup --list-key [fpr]

如果沒有出現任何錯誤,說明一切正常。彈出這個 USB 驅動器並給它黏上一個明確的標籤,以便於你下次需要它時能夠很快找到它。接著,將它放到一個安全的 —— 但不要太遠 —— 的地方,因為從現在起,你需要偶爾使用它來做一些像編輯身份資訊、新增或吊銷子證書、或簽署其它人的金鑰這樣的事情。

刪除主金鑰

我們家目錄中的檔案並沒有像我們所想像的那樣受到保護。它們可能會通過許多不同的方式被洩露或失竊:

  • 通過快速複製來設定一個新工作站時的偶爾事故
  • 通過系統管理員的疏忽或惡意操作
  • 通過安全性欠佳的備份
  • 通過桌面應用中的惡意軟體(瀏覽器、pdf 檢視器等等)
  • 通過跨境脅迫

使用一個很好的密碼來保護你的金鑰是降低上述風險的一個很好方法,但是密碼能夠通過鍵盤記錄器、背後窺視、或其它方式被發現。基於以上原因,我們建議去設定一個從你的家目錄上可移除的主金鑰,將它儲存在一個離線儲存中。

刪除你的主金鑰

請檢視前面的節,確保你有完整的你的 GnuPG 目錄的一個備份。如果你沒有一個可用的備份,下面所做的操作將會使你的主金鑰失效!!!

首先,識別你的主金鑰的 keygrip:

$ gpg --with-keygrip --list-key [fpr]

它的輸出應該像下面這樣:

pub   rsa4096 2017-12-06 [C] [expires: 2019-12-06]     111122223333444455556666AAAABBBBCCCCDDDD     Keygrip = AAAA999988887777666655554444333322221111uid           [ultimate] Alice Engineer <[email protected]>uid           [ultimate] Alice Engineer <[email protected]>sub   rsa2048 2017-12-06 [E]     Keygrip = BBBB999988887777666655554444333322221111sub   rsa2048 2017-12-06 [S]     Keygrip = CCCC999988887777666655554444333322221111

找到 pub 行下方的 Keygrip 條目(就在主金鑰指紋的下方)。它與你的家目錄下 .gnupg 目錄下的一個檔案是一致的:

$ cd ~/.gnupg/private-keys-v1.d$ lsAAAA999988887777666655554444333322221111.keyBBBB999988887777666655554444333322221111.keyCCCC999988887777666655554444333322221111.key

現在你做的全部操作就是簡單地刪除與主金鑰 keygrip 一致的 .key 檔案:

$ cd ~/.gnupg/private-keys-v1.d$ rm AAAA999988887777666655554444333322221111.key

現在,如果執行 --list-secret-keys 命令將出現問題,它將顯示主金鑰丟失(# 表示不可用):

$ gpg --list-secret-keyssec# rsa4096 2017-12-06 [C] [expires: 2019-12-06] 111122223333444455556666AAAABBBBCCCCDDDDuid [ultimate] Alice Engineer <[email protected]>uid [ultimate] Alice Engineer <[email protected]>ssb rsa2048 2017-12-06 [E]ssb rsa2048 2017-12-06 [S]

刪除吊銷證書

你應該去刪除的另一個檔案是吊銷證書(刪除之前,確保你的備份中有它),它是使用你的主金鑰自動建立的。吊銷證書允許一些人去永久標記你的證書為吊銷狀態,這意味著它無論在任何用途中將不再被使用或信任。一般是使用它來吊銷由於某些原因不再受控的一個金鑰 —— 比如,你丟失了金鑰密碼。

與使用主金鑰一樣,如果一個吊銷證書洩露到惡意者手中,他們能夠使用它去破壞你的開發者數位身分,因此,最好是從你的家目錄中刪除它。

cd ~/.gnupg/openpgp-revocs.drm [fpr].rev

在下一篇文章中,你將學習如何保護你的子金鑰。敬請期待。

從來自 Linux 基金會和 edX 的免費課程 “Linux 入門” 中學習更多 Linux 知識。