我可以使用 kwallet 來管理 PGP 密鑰嗎?
我有兩個 PGP 密鑰,用於對 kmail 中的電子郵件進行簽名和解密。這樣做時,我必須輸入密鑰的密碼(目前儲存在 KeePass 中)。
是否可以根據需要以自動解鎖密鑰的方式將密碼保存在我的 kwallet 中?如果是這樣,如何實現?
編輯:我在這裡找到了類似的東西,但是對於 SSH 密鑰而不是 PGP 密鑰。也許可以適應?
解鎖
是否可以根據需要以自動解鎖密鑰的方式將密碼保存在我的 kwallet 中?如果是這樣,如何實現?
據我所知,這不能在 kWallet 中完成。改為使用
gpg-agent
。您可以隨心所欲地進行設置,在安全性和易用性之間取得平衡。根據您執行的發行版,代理應該開箱即用。也許它甚至已經在後台執行?其他密鑰管理
我從未使用過KeePass,所以我不知道它的功能。但是,kGPG可能值得一看。它是系統 GnuPG 的 GUI 前端。具體來說,它還允許 GPG 的低級別設置,包括 GPG 代理。
GnuPG 設置
在這裡您可以配置使用哪個 gpg 二進製文件以及
configuration file
使用哪個主文件夾。這些值在第一次啟動時會自動檢測到,並且應該已經起作用。使用GnuPG 代理使使用 GnuPG 更加舒適,因為您不需要為每個操作輸入密碼。它會在記憶體中記憶體一段時間,因此任何需要密碼的操作都可以立即完成。請注意,如果您讓其他人可以訪問您的會話,這可能會允許其他人使用您的私鑰。
郵件
該問題還包含 kmail 標記,因此我還將對此進行詳細說明。您可能需要閱讀PGP 配置部分和kmail 常見問題解答,GnuPG 部分。如果您已經使用上面的 kGPG 設置了密鑰,則不必非常擔心頁面頂部的所有胖警告和步驟。只是被告知他們。
一體化
集成實際上是隱式發生的。kGPG 只是告訴 GnuPG 創建、修改、打開和更多操作的鍵。它在其界面中列出了系統上的密鑰及其信任級別等。但在後台,所有內容都
~/.gnupg
以 GnuPG 格式儲存在目錄中。(我不確定kGPG是呼叫GPG還是連結到GPG庫,但效果是一樣的)kMail 只是另一種前端。它呼叫
gpg
命令來訪問儲存在同一目錄中的密鑰。例如用於簽名、加密和解密。這
gpg-agent
是會話範圍的。這意味著,如果您在 kGPG 中解鎖了私鑰,那麼 kMail 中的私鑰也會被解鎖,反之亦然。編輯
我剛剛找到了kwalletcli,它為 pinentry 提供了 kwallet 綁定。我的發行版不提供軟體包,所以目前我無法試用。
如果您的發行版也不支持它,您可能必須手動安裝該軟體包。
再一次,arch wiki出現並挽救了局面:
提示:要使用 /usr/bin/pinentry-kwallet,您必須安裝 kwalletcli 包。
~/.gnupg/gpg-agent.conf: #pinentry interface with kdewallet pinentry-program /usr/bin/pinentry-kwallet
選擇
如果您不想或無法安裝kwalletcli,您可以使用該
kwallet-query
命令編寫一些腳本。您必須知道要打開哪個錢包才能獲取密碼。有關man kwallet-query
更多資訊,請參閱。但是,gpg 預設情況下不允許從 STDIN 輸入密碼,因此您需要為其配置 gpg。
關於 ssh-agent 的注意事項
如果您讓 gpg-agent 正常工作,您也可以將它用作ssh-agent。
Kubuntu 22.04 (Jellyfish) 上的範例如何在 Git (auth & sign) 中使用 Keybase PGP 密鑰
# setup Keybase where you're storing PGP keys in cloud https://keybase.io/docs/the_app/install_linux # Import the public key keybase pgp export | gpg --import # Import the private key keybase pgp export -s | gpg --allow-secret-key-import --import # show all keys gpg --list-keys --with-keygrip gpg --list-secret-keys --with-keygrip # There should be 3 keys: one main [SC]==PUBKEY_USAGE_SIG&PUBKEY_USAGE_CERT and two subkeys [A]==PUBKEY_USAGE_AUTH && [E]==PUBKEY_USAGE_ENC # Now you have to edit main one ([SC] ID) of them to "trust" it gpg --edit-key PUT_[SC]_ID_HERE key 0 trust 5 y key 1 trust 5 y key 2 trust 5 y quit echo 'enable-ssh-support' >> ~/.gnupg/gpg-agent.conf echo 'pinentry-program /usr/bin/pinentry-kwallet' >> ~/.gnupg/gpg-agent.conf gpg -K --with-keygrip echo 'PUT_[A]_keygrip_ID_HERE' >> ~/.gnupg/sshcontrol echo 'export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)' >> ~/.bashrc echo 'gpgconf --launch gpg-agent' >> ~/.bashrc # setup git configs & set your favorite editor echo 'export VISUAL="vim"' >> ~/.bashrc git config --global commit.gpgsign true gpg --list-secret-keys --keyid-format=long git config --global user.signingkey [SC]_sec_id git config --global user.name "stackexchange" git config --global user.email copy@paste.com # reload terminal env & gpg-agent and check everything works source ~/.bashrc gpgconf --kill gpg-agent ssh-add -L ssh -T git@github.com