前言
如果你是一位潜在的 Yubikey/硬件密钥用户,我的建议是尽早做好硬件密钥丢失的处理预案;如果你是一位现任的 Yubikey/硬件密钥用户,我的建议是,赶紧买一个 Airtag 保护一下自己的 Key(
嘛,废话不多说了。这篇文章是我在常用 Yubikey 丢失之后痛定思痛总结出的经验。如果你对硬件密钥的物理安全性存在或存在过或多或少的担忧的话,可以参考这篇文章了解一下重建一枚 Key 所需的成本。
ToC
-1. 吊销旧密钥
安全起见,我们需要做的第负一件事就是立即更新 GitHub
中绑定的 GPG
公钥,并且解绑这把 Key 在所有已绑定网站上的 FIDO2
两步验证 如果没有记录列表这时候已经汗流浃背了。如果你配置了基于 GPG
的 SSH
登录,也应该立即将更新所有配置了这一 SSH Key
作为 authorized_key
的 VPS
配置。
这时候你机器上的版本就已经吊销了。然后把公钥导出一下:
0. 购买
然后当然是购买了。由于 Cloudflare 的车车已经开走两年了,目前廉价获取 Yubikey 的手段或许只有闲鱼和py了。你需要首先获得一把全新的 Yubikey 以继续以下的步骤。
1. 初始化
拿到新 Key 首先需要做的是初始化。
修改 OpenPGP Pin
首先启用一下 KDF
,这样 Key
上就不会存储明文 Pin
了,然后再修改一下 Pin
的内容:
修改 Pin 重试次数
然后稍微调大一点 Pin 的重试次数,毕竟锁掉也挺烦人的……当然如果你足够相信你的记忆力和输入准确度,也可以保留默认的 3 次锁(
Pin
Yubikey 总共有三种 Pin [1]:
- FIDO2
- PIV (smart card)
- OpenPGP
我们最常用的应该是 OpenPGP 的 Pin,它通常的输入时机是在 Git 提交、Push、SSH 登录的时候,通过 pinentry 输入。
拿到新 Yubikey 之后,我们首先需要默认将这些 Key 都设置上:
2. 生成 Subkey
准备完毕,接下来就是生成新子密钥的时间了。如果你是像我一样,将 Master Key 通过另一把 Yubikey 存储的话,这个时候就可以把合适的密钥插入,开始生成🚢新的子密钥了——
(所有用户操作均已高亮)
我们这次生成的 Key
都是 ED25519
算法的 ECC
密钥。其中一把是 Signature Key
,负责给我们的 Git
操作签名;另一把是 Authentication Key
,负责处理 SSH
相关的内容。我们选择给 Sign
密钥附上 1 year
的过期时间,这样我们可以更加灵活地管理 Git
GPG
签名相关的事务;而 Auth
不设有效期的原因在于即时你配置了,SSH
也不会自动根据有效期拒绝过期的 Key
(悲)
3. 导出 Subkey
生成完毕,接下来就是导出了。让我们拔出 Master Key
,换上崭新的日用 Key:
4. 导出公钥
这时候导出的就是崭新的可以用的公钥啦(
5. 准备丢失预案
再来一次肯定不能再重蹈覆辙了——基于这样简单的想法,我们需要整理一下之后的对策。
首先,在密钥遗失的情况下,我们首先需要做的就是把和这把密钥相关的所有服务彻底解绑。为此,我们需要:
- 记录使用了 FIDO 绑定的网站列表。只有知道了到底绑定了哪些网站,才能一个一个去解)
- 增加 VPS 的 SSH Key 自动更新机制。因为手动一个个更新 SSH Key 可能也不大现实,最好是可以自动化地去跑这个事情。从另一个角度想,如果这个自动化做好了的话,那么之后 Auth Key 也可以设置过期时间了(确信)
而从另一个角度来看,我们希望在密钥丢失之后最大限度地找回。所以——
最后,最应该做的应该是尽可能不要遗失,所以——
我警告你们!出门携带 Yubikey 千万不要直接放口袋里!!!尤其不要在放口袋里之后就以为口袋是好的!!!!!!!!!!!!!!!!!!老子要升天了!!!!!!!!!!日妈批!!!!!
这次是运气好直接漏车上了,但不能有下次了!