Kde

我可以使用 kwallet 來管理 PGP 密鑰嗎?

  • May 5, 2022

我有兩個 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

引用自:https://unix.stackexchange.com/questions/451153