密碼管理需要在安全性、可存取性、可用性與操作複雜度之間取捨。
我使用以標準 Linux 工具組成的自主管理系統:pass、GnuPG、YubiKey、Git 與 LUKS。此處的自架表示密碼檔案及解密鑰匙由我控制,存取不需要密碼管理服務。
並非所有秘密都需要相同保護。憑證越敏感,存取程序就越需要明確授權。
三個存取層級
我將憑證分為三層,各自採用不同的便利性與安全性平衡。
| 層級 | 保護 | 儲存 | 常見用途 |
|---|---|---|---|
| 1 — 便利 | 裝置本機 GPG 鑰匙 | 本機密碼儲存庫 | 低影響憑證 |
| 2 — 個人 | YubiKey 上的 GPG 鑰匙 | 跨裝置複寫的密碼儲存庫 | 日常敏感帳號 |
| 3 — 離線保管庫 | LUKS + YubiKey 上的 GPG 鑰匙 | 加密卸除式 USB 儲存裝置 | 銀行、政府與關鍵憑證 |
差異除了儲存位置,也包括解密密碼的必要條件。
使用 pass 加密與控制存取
pass 將每項秘密存為獨立的 GnuPG 加密檔案,通常位於 ~/.password-store。目錄可設定一個或多個 GPG 收件者,不同目錄可使用不同收件者集合。pass 手冊。
低影響秘密可使用裝置本機鑰匙加密。較敏感憑證可使用私密解密子鑰保存在 YubiKey 的鑰匙。收件者政策由 GnuPG 執行。
增加收件者會增加解密同一秘密的另一條路徑,不是要求所有收件者共同參與。若日常存取必須使用硬體權杖,敏感目錄就只能加密給指定硬體鑰匙身分。本機收件者會提供繞過權杖的替代路徑。
使用 YubiKey 的硬體存取
對敏感憑證,我使用私密解密資料保存在 YubiKey 的 GPG 鑰匙。裝置執行私鑰操作,而不將私密資料匯出至主機檔案系統。
這讓加密密碼檔案與解密所需鑰匙分開。複寫檔案不需要將私鑰複製到每台工作站。
配合相容軟體與適當權杖,可在 Linux 與 Android 透過 NFC 或 USB 使用此方法。相容性取決於用戶端、權杖及鑰匙演算法,應測試預定組合。OpenKeychain 硬體權杖文件。
將鑰匙移至權杖前,先保存並測試密碼學復原。把秘密留在機器之外說明鑰匙分離,權杖不是秘密說明權杖復原。
關鍵憑證的離線保管庫
對關鍵憑證,我在 LUKS 加密 USB 裝置保存獨立的 pass 儲存庫。裝置預設不連接。
存取順序如下:
- 將 USB 裝置連接到可信任電腦。
- 用通行片語解鎖 LUKS 卷宗。
- 掛載解密後的檔案系統。
- 將保管庫 bind mount 到預期的密碼儲存庫位置。
- 透過 YubiKey 執行 GnuPG 解密,正常使用
pass。 - 卸載 bind mount 與檔案系統、關閉 LUKS 對映,再拔除裝置。
我用指令碼自動掛載與卸載。解鎖儲存裝置與授權使用鑰匙仍是明確步驟。
LUKS 在鎖定時保護儲存裝置,GnuPG 保護其中各項秘密。即使檔案系統已解鎖,秘密仍維持加密,直到明確解密。
密碼在遭入侵主機解密後,兩層都無法保護它。因此我只允許指定可信任裝置存取保管庫。硬體權杖保護私鑰,不會讓提出請求的電腦變得可信任。
複寫、同步與復原
日常儲存庫使用 Git 提供版本歷史與同步。加密檔案可跨裝置複寫,或保存在私有 Git 平台。只要已提交歷史仍存在,就可能取回誤改或誤刪內容。
離線保管庫使用多個加密 USB 裝置,以專用指令碼傳播更新。可依序更新,不必同時連接所有裝置。
這需要紀律。同步完成前,離線副本可能包含不同版本。傳播前先確認哪份副本包含預期變更。
Git 歷史不是備份政策,也不是存取稽核。它記錄加密檔案的提交變更,不記錄誰讀取或解密密碼。即使內容已加密,檔案與目錄名稱仍可能暴露帳號中繼資料。
儲存復原與密碼學復原是不同需求。多份保管庫副本保護儲存裝置損失,不能取回遺失私鑰或忘記的 LUKS 通行片語。復原程序必須涵蓋遺失權杖、授權私鑰、卷宗解鎖憑證與獨立備份存取。
在日常權杖不可用時測試。確認能解鎖備份卷宗,並依文件記錄的方法解密不含敏感資料的測試項目。
操作取捨
此設定需要管理收件者、硬體權杖、加密卷宗、同步與復原。它提供我重視的特性:
- **資料控制:**密碼檔案由我掌控。
- **可攜性:**使用成熟工具與有文件的格式。
- **選擇性保護:**存取條件依憑證敏感程度設定。
- **可復原性:**獨立副本與經測試的鑰匙復原減少對單一裝置的依賴。
- **離線隔離:**不需要關鍵憑證時,實體斷開儲存裝置。
- **服務獨立:**本機解密不需要 Git 平台或其他密碼管理供應商可用。
目標是比例適當的保護。一般憑證維持容易存取,敏感憑證需要權杖,關鍵憑證另外需要連接並解鎖離線保管庫。
持續維護收件者政策、有計畫地同步,並在鑰匙、裝置或卷宗憑證變更後重新測試復原。




