我可以使用 kwallet 来管理 PGP 密钥吗?

Bau*_*gen 5 kde gpg kmail kwallet plasma5

我有两个 PGP 密钥,用于在 kmail 中签名和解密电子邮件。这样做时,我必须输入密钥的密码(当前存储在 KeePass 中)。

是否可以将密码保存在我的 kwallet 中,以便根据需要自动解锁密钥?如果是这样,如何实现这一目标?


编辑:我在这里找到了类似的东西,但针对的是 SSH 密钥而不是 PGP 密钥。也许这可以调整?

Tim*_*Tim 5

解锁

是否可以将密码保存在我的 kwallet 中,以便根据需要自动解锁密钥?如果是这样,如何实现这一目标?

据我所知,这不能在 kWallet 中完成。使用gpg-agent代替您可以根据需要自由设置其设置,在安全性和易于访问之间取得平衡。根据您运行的发行版,代理应该可以开箱即用。也许它甚至已经在后台运行了?

其他密钥管理

我从未使用过KeePass,所以我不知道它的功能。然而,kGPG可能值得关注。它是系统 GnuPG 的 GUI 前端。具体来说,它还允许GPG 的低级别设置,包括 GPG 代理。

GnuPG 设置

在这里您可以配置哪个 gpg 二进制文件以及哪个configuration file 您可以在此处配置使用这些值是在第一次启动时自动检测的,并且应该已经可以工作。

使用GnuPG 代理可以让 GnuPG 的工作更加舒适,因为您不需要为每个操作都输入密码。它会在内存中缓存一段时间,因此任何需要密码的操作都可以立即完成。请注意,如果您让其他人可以访问您的会话,这可能会允许其他人使用您的私钥。

邮件

该问题还包含 kmail 标签,因此我也会对此进行详细说明。您可能需要阅读PGP 配置部分kmail FAQ、GnuPG 部分。如果您已经使用上面的 kGPG 设置了密钥,则不必非常担心所有肥胖警告和页面顶部的步骤。只需了解它们即可。

一体化

整合实际上是隐式发生的。kGPG 只是告诉 GnuPG 哪些键要创建、修改、打开和更多操作。它在其界面中列出了系统上的密钥及其信任级别等。但在后台,所有内容都存储在~/.gnupgGnuPG 格式存储在目录中。(我不确定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
Run Code Online (Sandbox Code Playgroud)

选择

如果您不想或无法安装kwalletcli,您可以使用该kwallet-query命令执行一些脚本编写。您必须了解打开哪个钱包才能获取密码。请参阅man kwallet-query获取更多信息。

但是,gpg 默认不允许从 STDIN 输入密码,因此您需要为其配置 gpg 。

关于 ssh-agent 的注意事项

如果你让 gpg-agent 正常工作,你也可以将它用作ssh-agent

Kubuntu 22.04 (Jellyfish) 上的示例如何在 Git 中使用 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
Run Code Online (Sandbox Code Playgroud)