简单记录一下 Yubikey 上 GPG 密钥的生成与导入过程

需要注意的是 Yubikey 支持 PIV 智能卡和 GPG 智能卡,此处仅涉及 GPG 智能卡部分,使用时应当分辨 PIV 与 GPG 接口。PS. 有开发者指出 GPG 与 Windows 智能卡驱动程序存在冲突

生成密钥

为保证安全, GPG 密钥对一般采取 C + A + E + S 的方式使用,其中 C (Certify) 为主密钥对,负责签发、吊销证书; A (Auth), E (Encrypt), S (Sign) 为三个子密钥对,分别负责验证、加密和签名。

首先创建主密钥对

根据提示需要选择加密算法和密钥用途

加密算法有 RSA 、 DSA 和 ECC , RSA 基于大数分解(素数乘积), DSA 基于整数有限域离散对数, ECC 是椭圆加密算法,从安全性上来说, ECC 最佳, RSA 和 DSA 也同样安全,但 ECC 作为一种较新的加密算法可能存在兼容问题,推荐使用更为通用的 RSA 算法。

密钥用途应为 Certify ,并不在列,所以选择 set your own capabilities

随后根据提示,将主密钥的允许项切换为单一 Certify 功能,按 Q 继续

接下来决定密钥长度,根据记载 RSA 1024 的安全性受到暴力破解的威胁,使用2048的长度更为安全,同时要注意到 Yubikey 所支持的最大长度。

然后是密钥的过期时间,一种偷懒的做法是将主密钥对的过期时间设置为0,即永不过期

键入 UID ,一个密钥可以有多个 UID ,方便不同场合使用, UID 与子密钥对无关,作用于整个密钥, UID 可以随时添加,但已有的 UID 不能修改,只能单独吊销。

之后需要为主密钥对设定一个 Passphrase 来作为密码保护主密钥对

We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy.

最后根据提示,随便做些什么生成随机数,主密钥对也就生成了。

使用主密钥对的 hash 字符串 或者 UID 来对主密钥对进行编辑

进入主密钥对后,使用 addkey 分别生成用于 A (Auth), E (Encrypt), S (Sign) 的三个子密钥对。

完成之后使用 save 保存

密钥备份

由于主密钥并不会导入 Yubikey 、同时子密钥导入 Yubikey 后无法取出,为了妥善保存主密钥和备份子密钥,可以当对密钥对进行导出备份。

使用明文导出全部密钥对的公钥到 gpg-public.asc 文件

使用明文导出全部密钥对的私钥到 gpg-secret.asc 文件

使用明文导出指定子密钥对的公钥到 gpg-public-sub1.asc(子密钥对十六位 ID 后面加一个感叹号)

导入 Yubikey

首先需要对 Yubikey 的 GPG 接口进行初始化设置

插入 Yubikey ,使用编辑卡片命令进入卡片,提权,并使用密码设置命令重置 PIN 码、 PUK 码和 Reset 码,默认 PIN 码为123456,默认 PUK 码为12345678

使用 url 命令可设定公钥 url 地址,设定完成后,可使用 fetch 快捷导入公钥,公钥文件需注意使用 UTF-8 编码,公钥文件需注意使用 UTF-8 编码,公钥文件需注意使用 UTF-8 编码

使用 name 命令可修改 Yubikey 的持卡人姓名

设置完成后退出,使用主密钥对的 hash 字符串 或者 UID 来对主密钥对进行编辑,依次使用 key [序号] 选中和反选子密钥,使用 keytocard 导入 Yubikey

备份完成、导入完成后,可使用命令删除本地私钥、公钥

删除完成后,插入 Yubikey 进入卡片使用 fetch 应当可以获取到公钥,如果出现错误,检查公钥 url 和公钥文件

 

发表评论

您的电子邮箱地址不会被公开。