首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GPG智能卡和gpg代理保护多个SSH密钥。

使用GPG智能卡和gpg代理保护多个SSH密钥。
EN

Security用户
提问于 2019-01-20 12:23:19
回答 1查看 1.4K关注 0票数 4

我有一个Yubikey扮演一个GPG智能卡。SSH配置为使用智能卡套接字进行身份验证,使用带有身份验证功能的GPG密钥进行身份验证工作良好。

代码语言:javascript
复制
ssh-add -l
2048 SHA256:ey5VPl70RKvXSdaon6ugxiO1ZrzqxJwz7VWZM7zvN/c cardno:000607329647 (RSA)

我有一些额外的SSH密钥,用于对各种服务器的SSH身份验证。我可以使用ssh-add somekey将它们添加到ssh代理中,但随后需要提供每个密钥的密码。有没有办法用智能卡来保护这些钥匙呢?

所需的结束状态是将多个SSH密钥存储在磁盘上,并使用智能卡和gpg-agent来解锁和缓存它们。

EN

回答 1

Security用户

发布于 2019-01-20 18:28:11

我今天早上想出的最简单的解决方案是使用密钥加密密钥原则来执行。在云中的服务器上使用多个SSH密钥时,这种情况相当常见。您可以使用基于云的HSM加密/解密您需要使用的密钥,而不必将其存储在本地。这是当您的加密密钥留在磁盘上时,攻击者无法访问主密钥。

要在您的环境中实现这一点,您需要以下内容:

  1. 配置了gpg的Yubikey (或其他GPG密钥系统)
  2. 要加密/解密的目标文件
  3. 稍微修改过的配置文件

为了本文的目的,我将假设读者已经配置了他们的Yubikey。如果您没有这样做(我知道OP有),您可以使用以下说明向gpg注册您的密钥:

https://support.yubico.com/support/solutions/articles/15000006420-using-your-yubikey-with-openpgp

您要做的第一件事是确定要执行本地加密和解密的密钥。试着跑:

代码语言:javascript
复制
gpg --list-keys

这将输出几行。我们需要与yubikey关联的键的PUB行的内容:

代码语言:javascript
复制
pub   2048R/E48EFBC7 2019-01-20

具体来说,我们需要8个字符"E48EFBC7“。一旦我们有了这些字符,我们就可以将它们复制到我们的配置文件中,以确保默认使用yubikey。为此,更新gpg.conf文件中的以下行(~/..gnupg/gpg.conf):

代码语言:javascript
复制
default-key E48EFBC7

默认情况下,这一行将被注释掉,您将需要取消注释它。作为一个附带说明,这不是必需的,但它是有帮助的。在默认情况下,您可以使应用程序利用您的Yubikey,而不是试图指定用于加密的密钥。

下一个配置将更改收件人。同样,这是可选的,但绝对有帮助。在gpg.conf文件中向下滚动并取消注释以下行:

代码语言:javascript
复制
default-recipient-self

现在,您的gpg代理被设置为自动使用yubikey进行加密/解密,并使目标收件人成为您的加密密钥。

这样,您现在就可以开始加密和解密证书了。要加密,只需运行以下命令:

代码语言:javascript
复制
gpg -o <output.gpg> -e <ssh.key>

解密;

代码语言:javascript
复制
gpg -o <ssh.key> -d <output.gpg>

解密将要求您的Yubikey PIN。

一些更精细的注释:

  • 当ssh密钥未加密时,在ssh密钥上运行chmod 600,以确保只有直接所有者有读取密钥的权限。
  • 当不再需要解密密钥时,移除它们。
  • 您仍然可以在ssh密钥中添加密钥以保护它们,即使它们已被解密。
票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/201832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档