Canokey PIV 应用之 Bitlocker 磁盘加密

引言

Canokey 作为 Yubico Key 的国产替代,实现了较为完整的功能。目前关于使用 PIV 进行 Bitlocker 的磁盘加密,常见的教程通常是基于 Yubico Key 的,而 Canokey 方面的内容较少。

笔者按照已有的 Yubico Key 的教程进行设置,用于 Bitlocker 加密时,曾出现过 “找不到智能卡”“未检测到有效的智能卡”或是“输入 Pin 后提示智能卡无效”的问题。经过研究,这还是导入证书过程操作不当导致。

因此,结合了笔者的一些探索,编写了此篇比较完善的教程。

证书申请与导出

证书的申请

使用 Windows 自带的 certreq 工具进行证书申请。

新建一个文件,填入下列内容,保存为 requestconfig.inf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[NewRequest]
Subject = "CN=Hui-Shao's BitLocker"
Exportable = TRUE
KeyLength = 2048
HashAlgorithm = "SHA384"
EncryptionAlgorithm = "AES"
EncryptionLength = 256
KeySpec = "AT_KEYEXCHANGE"
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE"
KeyUsageProperty = "NCRYPT_ALLOW_DECRYPT_FLAG"
RequestType = Cert
SMIME = FALSE
ValidityPeriodUnits = 99
ValidityPeriod = Years

[EnhancedKeyUsageExtension]
OID=1.3.6.1.4.1.311.67.1.1
  • 其中 CN= 后面的是证书名称,可以按需修改。
  • KeyLength = 2048,由于 Pigeon 版本最长只支持 2048,否则可以考虑 3072 或 4096。
  • 笔者也尝试使用了椭圆算法,但是申请时会弹出拒绝访问,因此又改回了 RSA。
  • ValidityPeriodUnitsValidityPeriod 指定了证书有效期,这里设置为 99 年,可按需修改。
  • 该 INF 配置比默认的配置(未指定 HASH 及 加密算法的)具有更高安全性。

随后,在 Cmd 执行命令:

1
certreq –new requestconfig.inf certrequest.req

如果没有错误,那么至此证书就已经安装完毕,这里的 req 和 inf 文件都可以删掉了。

从管理器导出证书
  1. Win + R 打开运行,输入 certmgr.msc,打开证书管理器。

  2. 在“个人/证书”中找到刚才的证书(Hui-Shao's BitLocker),右键将其导出:

  3. 点击下一步,然后选择是,导出私钥,然后再次点击下一步。

  4. 按照下图勾选:

  5. 单击“下一步”,然后选中“密码”复选框框,并输入证书的密码,加密方式 AES256。

  6. 单击“下一步”,然后单击“浏览...”并将文件另存为 “bitlocker-certificate.pfx”,然后单击“下一步”,最后单击“完成”。

这里,我们再重复一次上述步骤但不包含私钥,以导出公钥(cer文件)备用。例如,以后用于在一台新的电脑上进行加密,无需新生成证书(猜测)。

经测试,没有这个必要。

注册表设定

由于生成的是字签名证书,还需要进行一项设置,以便证书得到允许。

  1. Win + R 打开运行,输入 regedit,定位到:
1
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE
  1. 随后,在右侧窗格中单击鼠标右键,然后选择:新建 -> DWORD(32 位)值。

  2. 为密钥键入以下名称:SelfSignedCertificates

  3. 双击该键打开它,并将值设置为:1

组策略设定

(如果先前没修改过,此步可以跳过)

  1. 按Windows + R,然后键入 gpedit.msc,并单击确定。

  2. 浏览到:本地计算机策略 -> 管理模板 -> Windows 组件 -> BitLocker 驱动器加密

  3. 双击打开:验证智能卡证书使用规则合规性

  4. 将规则设置为:已启用 或者 未配置

  5. 确保对象标识符:设置为 1.3.6.1.4.1.311.67.1.1(与申请的证书 OID 相一致)

导入证书到 Canokey

目前所用的 Canokey 版本为 USB-A 版本。(Canokey Pigeon)

重置与设定密码

按需选择是否进行,注意,此操作会清除全部 PIV 数据。

首先在 Web Console 中重置 PIV。

下载安装 yubico-piv-tool ,使用下面的命令检查连接情况,查看 Canokey 状态:

1
yubico-piv-tool -r canokeys -a status

确保能够显示出对应信息。

修改 PIN、PUK 和 management-key

按需选择是否进行

可以在 Web Console 操作,如果使用命令行,对应命令如下:

1
2
yubico-piv-tool -r canokeys -a change-pin
yubico-piv-tool -r canokeys -a change-puk

原 PIN 默认 123456,原 PUK 默认 12345678。

进一步提高安全性,建议修改 Management-Key(小白可跳过):

1
yubico-piv-tool -r canokeys -a set-mgm-key

management-key 务必牢记或保存在文件中,后续管理证书会用到 。

导入密钥

使用以下命令,可以将证书导入到 Canokey:

1
yubico-piv-tool -r canokeys -s 9d -i bitlocker-certificate.pfx -KPKCS12 -a import-key -a import-cert

这里我们使用 Slot 9d 存放证书。

重要的一步

在导入 PIV 证书之后,必须运行一次下列命令:

1
2
yubico-piv-tool -r canokeys -a set-chuid
yubico-piv-tool -r canokeys -a set-ccc

(应该仅运行第一条就够了,如果有小伙伴成功欢迎告知)

以下是摘自某位小伙伴的发言:

感觉是起到了一个刷新的效果。

导入证书之后不运行这两个命令就会导致能添加智能卡,但在解锁的时候输入 PIN 之后提示未检测到智能卡。

原理不明,试出来的,又找了个空白卡,问题能复现,只要导入之后不运行这俩命令,那就过不去。

最后,使用 status 检查,确定证书已经导入:

收摊

至此,Canokey 就可以用于进行 Bitlocker 加密了。在使用 Bitlocker 时,选择“使用智能卡”即可。

经过测试,加密后的 VHD 虚拟磁盘文件,复制到另一台电脑上,也可以正常使用 Canokey 解密,不需要导入证书、设置注册表之类的操作。

附录

从 canokey 中删除证书的命令格式为:

1
yubico-piv-tool -r canokeys -a delete-certificate -s <slot> -k <mgm-key>

删除证书后,还需要删除 key(或者写入新key覆盖):

1
yubico-piv-tool -r canokeys -a delete-key -s <slot> -k <mgm-key>

如果提示 Failed authentication with the application: Authentication error. 可能是因为你修改过 management key,在各个命令后面加个 -k 就好。

清理与善后

证书用完了,来个过河拆桥,斩草除根。(你也不想私钥留在硬盘上泄露出去吧...)

  1. 删除导出的包含私钥的证书文件,即上文提到的 "bitlocker-certificate.pfx"。

  2. 在 Windows 的证书管理器中删掉 Bitlocker 证书,证书同时存储在个人和中间证书颁发机构下,要同时删掉。(!注意看清楚,别删成别的证书了,小白建议跳过)

  3. 删除申请证书过程中的 inf 和 req 文件。

参考

  1. Using Smart Cards with BitLocker
  2. certreq - Microsoft Learn
  3. Setting Up BitLocker with YubiKey as Smart Card
  4. Windows 创建自定义证书导入 YubiKey 开启 BitLocker