创建具有相同 PGP 密钥的备份 Yubikey

信息安全 pgp gnupg 优比键
2021-08-17 18:34:43

我最近购买了两台 Yubikeys Neo,主要用于通过 GnuPG 的智能卡功能进行加密和身份验证。我已经阅读了一些关于该主题的操作方法(最值得注意的是这里这里),并且我已经成功地生成并导出到 Yubikey 的密钥环,其中包含用于签名、加密和身份验证的 3 个子密钥。使用这些,我能够使用我的公钥加密文件,我只能通过插入 Yubikey 来解密。伟大的。

现在我想在另一个 Yubikey 上复制这个设置作为备份,以防我丢失我的主设备。由于 gpg 的“keytocard”命令删除了本地密钥,我只能通过制作和恢复我的 .gnupg 目录的备份(这似乎不正确)将相同的密钥导出到另一个 Yubikey,即使如此,当我尝试为了解密我的测试文件,gpg 专门询问带有一些序列号的密钥,它不会用备份密钥解密。

有没有办法像这样使用两个不同的 Yubikey 作为备份?如果不是,那么实现这一目标的最佳方法是什么?(意思是:保留一个备份密钥,我可以用它来解密我的文件,以防我丢失主密钥)。

4个回答

发现了这个简介,上面写着你可以运行一个命令,它基本上会告诉你本地的 gpg 应用程序扫描新卡,如果事情发生凝胶,就使用它。所以在使用备份卡的情况下,最坏的情况是运行“init”使其工作。

https://forum.yubico.com/viewtopic38a1.html?f=35&t=2400

跑步

gpg-connect-agent "scd serialno" "learn --force" /再见

将为当前插入的密钥上的 PGP 密钥更新密钥存根。所以在插入密钥后运行它会导致 gpg 使用当前插入的密钥。

经过多次反复试验,我终于找到了实现这一目标的方法。这是我自己的问题的答案,以防它对某人有所帮助:

诀窍是不要尝试将相同的子键导出到两个 Yubikey(gpg 不喜欢那样),而是生成不同的子键。在我的密钥环中,我有 6 个子密钥:3 个用于主 Yubikey(签名、加密、身份验证),3 个用于备份 Yubikey。我将相应的私钥导出到 Yubikeys,这一次不需要破解来恢复.gnupg. 最后,我使用两个公钥加密我的文件,所以我可以使用 Yubikeys 解密它们:

gpg -e -r [keyid1]! -r [keyid2]! [file]

不要忘记每个密钥 ID 末尾的感叹号。否则,出于某种原因,gpg 会理解,对于每个收件人,您都需要“在同一个密钥环中的某个密钥”,并且默认情况下会选择相同的密钥两次。

现在 gpg 将接受任一私钥来解密文件。如果是 Yubikeys,它会要求你插入第一个,如果你取消,它会要求第二个,所以你可以使用任何一个。我在第一个中指定了主密钥,-r因此 gpg 直接要求主 Yubikey 并且不会用备用密钥打扰我。为了使事情更简单,我将带有两个 keyid 的整个 gpg 命令别名为yk_encrypt.

您可以使用例如导出(创建备份副本)密钥,而不是备份整个目录

gpg -a -o seckey.asc --export-secret-key ABCD1234

并再次导入(移动到第一张卡后)

gpg --import seckey.asc

GPG 要求特定卡,因为在将密钥移动到卡后,它会在您的系统上存储一个密钥存根,该存根将该密钥与该卡联系起来。如果您从 gpg 中删除密钥(例如 gpg --delete-secret-and-public-key ABCD1234)参考(例如

C:\users\someUser\AppData\Roaming\gnupg\private-keys-v1.d

/home/someUser/.gnupg/private-keys-v1.d

) 然后你可以插入备份 Yubikey 和

gpg --card-status

在第二个 Yubikey 而不是第一个上创建一个引用该密钥的存根。

可以保持导出的密钥安全并将其用作备份,但这不是问题。

有可能的。

  1. 在您的钥匙串中本地生成钥匙。还没有 Yubikey。
  2. 导出密钥(包括主密钥和所有子密钥)。(记住您用于加密密钥的密码,因为导出的 blob 将用它加密)
  3. 将私钥导出并存储在安全的地方后,在编辑密钥菜单中对每个密钥进行密钥卡。
  4. 移除 Yubikey 1,然后进入刚刚移动的键的编辑键菜单。
  5. 使用该grip命令查找每个键的 Keygrips。
  6. 您会在文件夹中找到.key每个 keygrip 的~/.gnupg/private-keys-v1.d/*文件...删除它们,同时注意不要删除其他任何内容(不想擦除无关环的私钥)
  7. gpg2 --import 您在步骤 2 中制作的导出私钥。
  8. 现在,您又在本地密钥环中拥有了私钥。插入 yubikey 2 并重复步骤 3。
  9. 现在这是难以解释的部分......那些keygrip.key私钥文件基本上告诉gpg“这个私钥在Yubikey中,序列号为xxxxx”所以你不能只是交换卡并使用或者......你有在交换之间运行一些命令...这很好,因为您可能不会交换并且只想要第二个用于备份...但是 2 年后当您需要备份时,您可能会因为忘记而绊倒关于这个小问题。一种方法是通过我向您展示的 keygrip 方法删除所有私钥。然后只需运行gpg2 --card-edit一次,它就会自动检测+将您的卡连接到您的密钥环中公钥的私钥(删除密钥握把不会删除公钥)...gpg-connect-agent "scd serialno" "learn --force" /bye

一旦您将私钥输入到 yubikey 中,您就无法将其取出,因此对于一个人来说,您已经为时已晚。

此外,这种方法有一个明显的大问题:你怎么知道没有人在键盘记录 + 在你制作时窃取你的私钥备份......

尽管如此,这种方法还是比只将私钥存储在磁盘上要好。由于您的攻击面仅减少到初始设置......并且任何时候您都需要提取备份。