我正在努力使用 Duplicity 為我的備份提供有效且可靠的配置,因為我知道我需要基於金鑰對的非對稱 GPG 加密。並且能夠從多個裝置安全地進行備份。
我今天有什麼:
- 遵循本指南,離線產生帶尾部的 GPG 主金鑰:https://wiki.debian.org/GnuPG/AirgappedMasterKey
- 和2 個受密碼保護的子項: 一個用於加密,還有一個用於簽名
- Duplicity 備份命令與 duply 一起運行,將加密備份儲存在遠端 S3 上,例如由 Scaleway 託管的雲端儲存:https://www.scaleway.com/fr/object-storage/ 使用上面產生的加密金鑰。
我已成功將加密資料傳送到遠端儲存並從中還原備份檔案。
現在,我的設定有兩個問題:
- 我必須在每次備份作業中輸入密鑰密碼
我懷疑是這種情況,因為我的簽章金鑰受密碼保護(相同的密碼用於保護所有子金鑰,這是 GPG 限制 AFAIK)我嘗試設定 gpg 代理並將密碼無限量地儲存在快取中的時間。這不起作用,而且可能也不是明智之舉。這種限制使得設定無人值守備份變得非常困難/不可能
-> 我應該使用不受密碼保護的符號子項嗎?這似乎也不是正確的做法......
- 我想從多個裝置進行備份
根據我目前的設置,我需要將同一組密鑰匯入到新設備。顯然我想避免這一點。如果裝置遭到破壞,我不希望攻擊者可以存取我的所有備份,因為攻擊者可以使用被盜金鑰解密所有資料。 ->「不要把雞蛋放在同一個籃子裡」。
首先,「不要把雞蛋放在同一個籃子裡」也可以理解為您不應該在所有事情上都依賴於一個 PGP 金鑰對。例如,您應該建立一個與「電子郵件/Git」金鑰對分開的「備份/儲存」金鑰對。畢竟,它們具有完全不同的用法和要求 - 您的備份完全是內部的,因此無論如何它們都不會從您的“主”PGP 金鑰對簽名中受益。
=> 這是有道理的,謝謝,創建一個新的備份特定金鑰對似乎是合理的。
而且,如果我正確理解系統,口是心非不需要能夠解密您的備份 - 它只需要加密它們。 (當然,除非您需要恢復。)這意味著您實際上不需要在任何有助於備份儲存庫的裝置上使用加密子金鑰的私有部分,它只需要在復原時存在。
=> 我認為你是對的。除了增量備份失敗並需要重新啟動的情況外,因為這種情況不應該經常發生,我想手動幹預是可以接受的。所有這些都表明,是的,用於加密的私有子金鑰可能不在任何裝置上。
-> 這裡推薦的策略是什麼?據我今天的了解,使用相同的 GPG 主金鑰來管理多個加密/簽署子金鑰是不可能的嗎?我應該產生多個主金鑰用於備份嗎?
我會嘗試總結一下:
- 如果我想要每個裝置有不同的加密金鑰(似乎是最安全的選擇),我必須為每個裝置產生新的金鑰對,對嗎?
- 至於簽署金鑰,我仍然對如何繼續感到困惑......
- 是否應該將其作為設備特定密鑰對的子密鑰進行管理?
- 還是一鍵適用於所有設備?
- 多個簽署金鑰作為單獨金鑰對的子金鑰?
這樣有道理嗎?再次感謝您的幫忙!
答案1
我想從多個裝置進行備份
根據我目前的設置,我需要將同一組密鑰匯入到新設備。顯然我想避免這一點。如果裝置遭到破壞,我不希望攻擊者可以存取我的所有備份,因為攻擊者可以使用被盜金鑰解密所有資料。 ->「不要把雞蛋放在同一個籃子裡」。
首先,「不要把雞蛋放在同一個籃子裡」也可以理解為您不應該在所有事情上都依賴於一個 PGP 金鑰對。例如,您應該建立一個與「電子郵件/Git」金鑰對分開的「備份/儲存」金鑰對。畢竟,它們具有完全不同的用法和要求 - 您的備份完全是內部的,因此無論如何它們都不會從您的“主”PGP 金鑰對簽名中受益。
而且,如果我正確地理解了這個系統,口是心非就不需要能夠解密您的備份 – 只需要加密他們。 (當然,除非您需要恢復。)這應該意味著您實際上不需要加密子金鑰的私有部分任何參與備份儲存庫的設備中,它只需要在復原時存在。
據我今天的了解,使用相同的 GPG 主金鑰來管理多個加密/簽署子金鑰是不可能的嗎?
您不能擁有多個加密子金鑰(因為寄件者無法知道您要在哪個裝置上閱讀訊息,因此唯一的可行選擇是加密到全部你的加密子金鑰-這反而違背了擁有多個的意義)。
另一方面,您可以輕鬆地擁有多個簽名每個密鑰有子密鑰,因為它與加密的情況相反。
(使用相同的密碼來保護所有子項,這是 GPG 的限制 AFAIK)
它更有可能是用戶介面選擇。 gpg 代理做支援對每個私鑰進行不同的保護(它實際上並不關心關係),但是如果GnuPG UI 使“更改密碼”操作僅影響特定的子密鑰,則可能會令更多的用戶感到困惑,而不是有幫助。
從 中找到每個私鑰的“keygrip” gpg -K --with-keygrip
,然後使用gpg-connect-agent
直接更改其密碼(繞過 GnuPG):
gpg-connect-agent "passwd KEYGRIP" /bye