當問題是「能否認證、簽署、加密、驗證,而不把私密材料交給供應商」時,我仍伸手拿 GnuPG。上手以難著稱。那不是跳過的理由,而是把主密鑰當成稀有離線物件、日常工作用子鑰的理由。
這是專家路徑。若要較小的現代預設,檔案用 age、登入用 SSH,能走很遠。需要認證之網、郵件、git 簽名、以及能放抽屜的金鑰時,OpenPGP 才賺到它的鬍子。
基礎 · 金鑰在這裡做什麼
公鑰可公開。私鑰必須在你控制下。認證說「這身分配這把鑰」。簽署、加密、驗證(例如經 gpg-agent 的 SSH)可分到子鑰,讓最危險的秘密——能鑄造其他鑰的那把——不活在你帶上火車的筆電上。
一把僅認證的主鑰,然後三份工作
我使用、並寫在 GnuPG Keys Management 的安排:僅 certify 的主鑰;簽署、加密、驗證三把子鑰;主密鑰在加密可攜媒介上再從日常電腦刪除;子鑰可選放到 OpenPGP 智慧卡。GnuPG 目前預設偏 ECC。合理。當我要保守、廣為理解的主鑰時,仍產生大型 RSA 認證鑰。不要把密語貼進批次範本。用完整指紋,絕不用短 ID。
gpg --list-secret-keys --fingerprint --with-keygrip
匯出,證明匯出,然後刪
匯出指令不是備份。刪任何東西前,還原進 RAM 裡的拋棄式 home。你要 sec(不是 sec#)以及真正的 ssb。gpg --list-packets 會顯示 gnu-dummy 或 gnu-divert-to-card 若你匯出了 stub。
umask 077
TEST_GNUPGHOME="$(mktemp -d /dev/shm/gnupg-test.XXXXXX)"
gpg --homedir "$TEST_GNUPGHOME" --import ./primary.private-key.sec
gpg --homedir "$TEST_GNUPGHOME" --list-secret-keys --fingerprint
引號裡的 ! 只選主鑰。之後日常鑰匙圈顯示 sec#。子鑰在 YubiKey 上時期待 ssb>。
使用離線主鑰
認證——加 uid、簽別人的鑰、做新子鑰——表示掛上加密磁碟,最好用乾淨的 GNUPGHOME。然後卸載。簽署 git 提交的筆電不該能鑄造新身分。
中階 · 若你還沒準備好離線主鑰
那就不要假裝。產生有到期日的 Ed25519/Cv25519,把撤銷憑證放在磁碟死後找得到的地方,把 ~/.gnupg 備份到真的還原過的加密媒介。不需要 OpenPGP 信任網時,age 加密檔案更乾淨。稍後可以升級到離線認證鑰。你無法「取消洩漏」在筆電包裡坐了三年的主鑰。
這不是什麼
不是在郵務清單上加密笑話的教學。不是人人必須 RSA-8192 的論證。它是一把金鑰的形狀:最危險的部分能放抽屜,日常部分能替換,復原在需要之前已在 /dev/shm 看過能動。
gpg --delete-secret-keys "${FINGERPRINT}!"
gpg --list-secret-keys "$FINGERPRINT"
gpgconf --list-dirs homedir
實務上,請把命令、摺疊段落與英文原稿對齊;翻譯負責說明,證據仍以可執行的指令為準。若某一層對你來說太深,先停在中階,把演練做完再往下。




