GPG/SSH:事后将密钥设为子密钥

GPG/SSH:事后将密钥设为子密钥

我对 GPG、SSH 等等还不熟悉,并且不确定最佳实践是什么。

我有一个 USB 设备,能够生成并保存 GPG||SSH 密钥而无需离开设备。它还允许签名,并在本地计算机上输出。

我希望此设备上的密钥作为我的主密钥M,但日常使用此设备不方便。因此,我希望有另一把A由主密钥签名的密钥,我可以将其保存在本地并用于正常任务。(可能使用 Yubikey 来锁定它阿拉)。

由于我认为以“正常方式”生成的子密钥仍然不会离开设备,是否存在一种标准方式可以在A我的本地机器上生成一个新密钥,然后将其签名为的子密钥M

编辑

需要澄清的是,该设备不是 Yubikey,无法将密钥传输给它。它在功能上更类似于Trezor,其中密钥只能在设备上生成,并且不能复制到设备上或从设备上复制出来。

Yubikey 方法不错,但我认为如果 Yubikey 被盗,这种方法很容易受到攻击。类似 Trezor 的方法是设备附加身份验证层,因此即使被盗也无法使用。只需 5 美元即可进行扳手攻击!

编辑2 (尽管我猜想对设备制造商也存在着隐性的信任)

答案1

使用 YubiKey 的一个极好的资源是 YubiKey 使用指南,其自我描述为:

这是使用 YubiKey 作为智能卡存储 GPG 加密和签名密钥的实用指南。

还可以为 SSH 创建身份验证密钥并与 gpg-agent 一起使用。

存储在 YubiKey 等智能卡上的密钥似乎比存储在磁盘上的密钥更难被窃取,并且方便日常使用。

使用 YubiKey 4 为 Debian GNU/Linux 8 (jessie) 编写的说明 - 支持 4096 位 RSA 密钥 - 在 OTP+CCID 模式下,已更新至 GPG 版本 2.2.1。其中还包含一些适用于 macOS 的说明。

这里感兴趣的部分是 转移密钥 其中包含以下警告:

将密钥传输到 YubiKey 硬件只是单向操作,因此请确保在继续操作之前已进行备份。

程序如下:

  • 列出密钥

    gpg --edit-key $KEYID
    
  • 选择并移动签名密钥

    key 1
    keytocard
    
  • 取消选择、选择并移动加密密钥

    key 1
    key 2
    keytocard
    
  • 取消选择、选择并移动身份验证密钥

    key 2
    key 3
    keytocard
    
  • 检查你的工作

    gpg --list-secret-keys
    
  • 导出公钥

    gpg --armor --export $KEYID > /mnt/public-usb-key/pubkey.txt
    
  • 或者,可以将其上传到公钥服务器

      gpg --send-key $KEYID
    

更多信息请参阅文章。

相关内容