題 如何跨多個系統管理GPG密鑰?


我是新手使用GnuPG並嘗試了解如何最好地使用它。我已經評論過了 對於非技術人員,簡短易懂的GPG / PGP解釋?,但大多數指南都以單機視角解釋PGP。

我想在三種計算設備上使用GnuPG:Linux PC,Linux筆記本電腦和Android手機。

基本用例是加密/解密由IMAP服務管理的電子郵件,因此所有設備都需要相同的私鑰才能進行解密。

我認為我的選擇是:

  1. 只需將我的所有密鑰複製到每台設備上的密鑰環,並主要依靠私鑰密碼進行保護。

  2. 創建一個主密鑰(使用--gen-key)來表示我的身份,然後創建一個單獨的一次性密鑰(再次使用--gen-key)來加密/解密電子郵件並使用主密鑰簽名。前者僅駐留在我的PC上,後者分配給每個設備。只要我的移動設備沒有受到損害,那麼一次性密鑰仍然有效。

我可能過於偏執,讓它變得比以前更加複雜,但請幽默我。我相信不要把所有雞蛋放在一個籃子裡。

主密鑰應該是我的數字身份。我將花費大量的精力來建立對這種身份的信任,我寧願忍受我的偏執的不便,也不願因粗心而失去我的鑰匙而必須圍繞一個新的萬能鑰匙建立信任。 (也許這並不像我想的那麼糟糕,但我是新手)

我比筆記本電腦更容易丟失筆記本電腦或手機。如果損失==妥協,那麼我寧願丟失一個一次性密鑰對(我可以撤銷)而不是我的主密鑰對。我總是可以將我的萬能鑰匙放在新的一次性鑰匙上。

對不起這個很長的問題。 :-)

TL; DR

密碼是否足以保護我的存儲  多個設備上的私鑰?

我對選項#2的計劃是否可行?我弄錯了還是可以改進?

如果選項#2是個壞主意,那麼在跨多個設備的單個用戶使用GnuPG時,最佳做法是什麼?


85
2017-08-25 23:55


起源




答案:


嗯,這有點尷尬。我花了幾個小時在一周的時間內試圖解決這個問題,答案似乎在於子鍵 - 這是GnuPG手冊和常見問題解答的主題。

在研究子鍵是什麼以及為什麼使用它們而不是--gen-key時,我偶然發現了這個gem: http://wiki.debian.org/subkeys

Debian的wiki解釋瞭如何實現選項#2 (見OP) 使用帶有子鍵的主密鑰,並進一步說明如何在將主密鑰存儲在備份介質(例如閃存驅動器)上之後從任何系統中刪除主密鑰。然後可以在每個設備上的密鑰環之間分配子密鑰。

優點:

  1. 主要不依靠密碼來保護主密鑰,

  2. 如果任何系統受到破壞,主密鑰不會立即可用(除非我愚蠢地插入我的閃存驅動器,或將所述驅動器連接到受損系統),

  3. 這是Debian開發團隊實施的一種做法。

  4. 使用GnuPG的子項功能。這似乎比你的密鑰環上有一堆鬆散的鍵更有條理,是嗎?

來自Debian Subkey Wiki的相關部分

  1. 備份現有的GnuPG文件($ HOME / .gnupg)。保證他們的安全。如果在以下步驟中出現問題,您可能需要將其返回到已知的好地方。 (注意:umask 077將導致備份的限制權限。)

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
  2. 創建一個用於簽名的新子項。

    • 找到您的密鑰ID: gpg --list-keys yourname
    • gpg --edit-key YOURMASTERKEYID
    • gpg> 提示: addkey
    • 這會要求您輸入密碼,請輸入密碼。
    • 選擇“RSA(僅限簽名)”鍵類型。
    • 選擇4096(或2048)位密鑰大小是明智的。
    • 選擇一個到期日期(您可以比主密鑰更頻繁地旋轉子密鑰,或者在主密鑰的生命週期內保留它們,不會過期)。
    • GnuPG將(最終)創建一個密鑰,但您可能必須等待它才能獲得足夠的熵。
    • 保存密鑰: save
  3. 如果您願意,可以重複此操作,並創建“RSA(僅加密)”子鍵。

  4. 現在復制 $HOME/.gnupg 到您的USB驅動器。

  5. 這是棘手的部分。您需要刪除私有主密鑰,遺憾的是GnuPG沒有提供方便的方法。我們需要導出子項,刪除私鑰,然後重新導入子項。

    • 導出子項: gpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys (要選擇要導出的子項,請指定子項ID,每個子項後面都帶有感嘆號: gpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..]
    • 刪除主密鑰: gpg --delete-secret-key YOURMASTERKEYID
    • 導回子項: gpg --import secret-subkeys
    • 驗證 gpg -K 顯示一個 sec# 而不僅僅是 sec 為您的私鑰。這意味著秘密密鑰並不存在。 (另請參閱輸出中存在虛擬OpenPGP數據包 gpg --export-secret-key YOURMASTERKEYID | gpg --list-packets)。
    • (可選)更改保護子項的密碼: gpg --edit-key YOURMASTERKEYID passwd。 (請注意,備份上的私鑰材料,包括私有主密鑰,將保留舊密碼短語的保護。)

您的計算機現在可以正常使用了。

當您需要使用主密鑰時,安裝加密的USB驅動器,並設置GNUPGHOME環境變量:

export GNUPGHOME=/media/something
gpg -K

或使用--home命令行參數:

gpg --home=/media/something -K

後一個命令現在應該列出您的私鑰 sec 並不是 sec#

每台機器有多個子鍵,所有機器都有一個單子鍵

摘自Debian子項wiki。最初在評論中提到。 [釋義]和 重點 礦。

有人可能想要在每台機器上安裝一個子密鑰,這樣您只需要交換該機器的潛在受損子密鑰。如果在所有機器上使用單個子密鑰,則需要在所有機器上進行交換[當該單個子密鑰被懷疑或被懷疑時)。

但這僅適用於簽名子項。如果您有多個加密子項, 據說gpg僅對最新的加密子密鑰進行加密 而不是所有已知和未撤銷的加密子密鑰。


49
2017-08-26 01:28



很好的問答,但是AFAIK這個設置還有一個問題......如果您不想在不同的設備之間共享相同的enc密鑰,那麼它非常適合簽名,但不適用於加密,因為當有人讓您加密時消息,gpg默認使用生成的最新未撤銷的enc密鑰。根據UID(家庭或工作等)強制發件人不能使用特定的enc子項。 - KurzedMetal
也許這是一個問題。我最擔心的是失去了我建立在我的主密鑰(只有標誌)的信任網。當然,加密子密鑰必須存在於我用於讀取加密消息的所有設備上。如果我的加密密鑰遭到破壞,那麼恢復過程只涉及我自己;而不是丟失我的主簽名密鑰而不必詢問/說服我的信任網簽署新密鑰。我不打算在我的保險庫中重新定位加密子項。 - Justin C


作為一個也不喜歡單點故障的人(包括主密鑰和密鑰) 特別 密碼),這就是我的方式。它允許設備通過信任網絡運行,同時仍然允許分散的身份。

我不知道是否已有一個現有的系統,但我認為它可能與一個cron工作和幾行Bash一起被抄襲。

在此系統中,您有兩類密鑰對: 設備密鑰對 和 時間表密鑰對。一 設備密鑰對 在每個設備上為用戶生成,並在該設備上保留其生命週期。一個 時間密鑰對 由中央服務器按常規間隔生成(每月,每天,每小時 - 取決於您想要的偏執程度)。公鑰是公開發布的(服務器本身俱有自己的設備密鑰對以進行簽名),並且私鑰使用每個設備的公鑰加密分發,該公鑰可以訪問該密鑰。 (此分發應盡可能保密,例如讓設備直接連接到服務器。)

對於簽名消息,您將使用您發送消息的任何設備的設備密鑰。如果有人想給您發送消息,他們可以使用您當前的公共時間幀密鑰對其進行簽名。 (他們應該有一個自動系統來跟上公告。)然後,您可以從任何設備上閱讀他們的消息。

為了讀取較舊的加密消息,根據適當的策略(包括時間幀 - 密鑰對生成服務器,如果您願意 - 再次,取決於您的偏執程度),在每台設備上備份較舊的時間幀密鑰對,​​其中您有另一組密碼保護的密鑰對保護舊密鑰(隨著時間的推移,隨著時間的推移,您可以記住很多密碼)。

如果設備被盜或以其他方式受到損害,您可以使用另一個公開信任的設備創建一個公開簽名的消息來驗證您的身份(通過任何方式,例如,注意您將參加公開聚會和/或或讓一位值得信賴的朋友親自核實您並撤銷受感染的設備密鑰及其有權訪問的任何時間範圍密鑰。撤銷密鑰時,還會從服務器的可信設備列表中刪除被盜設備(使用密碼和可信設備密鑰)。

信任新發布的設備密鑰的策略應該遵循當前的信任策略 - 我認為適當的策略是信任生成服務器,移動設備和大而重的設備,因為它很難竊取/滲透在用戶注意到之前,用戶的電話,桌面PC和VPS在協同搶劫中。

如果您的服務器遭到入侵,您只需通過針對任何其他受感染設備所描述的相同過程撤銷它(可能具有類似於添加新設備的更強策略),並使用重新安全或全新服務器(具有新設備密鑰對)繼續前進。


8
2017-08-02 00:33



撤銷部分有點混淆 - 寫入設備應該可以通過任何其他設備發布通知(如果有人竊取您的筆記本電腦並且您的手機無法直接與服務器聯繫,則不會失敗),但不可能由小偷完成(所以設備應該有一個密碼保護密鑰用於撤銷)。如果報告存在衝突,則所有密鑰都應暫時不信任,直到可以執行第三方的手動驗證為止。 - Stuart P. Bentley
事實上,建議使用另一種機制來撤銷密鑰,使用強大的公共密碼定期手動更新(替換) - 這樣,您可以撤銷密鑰而不依賴於 任何 只要您保密密碼,設備(假設您只使用手機而有人偷了它)。 - Stuart P. Bentley