Yubikey 作为智能卡
我一直在使用带有 RSA 证书的智能卡(Yubikey 4,PIV 接口)来解锁受 BitLocker 保护的驱动器。证书是自签名的,由加密文件系统 (EFS) 向导生成。EFS 的 OID 编号已添加到组策略条目中,因此我可以将它们用于 BitLocker。(方法)
几年来,这个方法一直运行良好,但我无法控制 EFS 向导生成的证书的属性。我无法选择密钥类型,也无法选择默认为 sha1 的签名算法。(我还没有探索是否可以通过注册表或 GPO 影响属性,因为使用 EFS 向导本身已经是次要步骤。)
所以我用Powershell 生成更现代的证书。我尝试使用曲线25519,Windows 似乎在可用曲线列表 ( certutil -displayEccCurve
) 中提供了该曲线,但不幸的是,我无法使用该曲线生成证书。我尝试了brainpoolP384r,但我不得不考虑 Yubikey 的兼容性,所以规格我用了secP256r1。
生成曲线证书
New-SelfSignedCertificate -Type Custom -Subject "CN=Test1-Curve-Cert"
-TextExtension @("2.5.29.37={text}1.3.6.1.4.1.311.10.3.4","2.5.29.17={text}[email protected]")
-KeyUsage KeyEncipherment -KeyAlgorithm ECDSA_secP256r1 -HashAlgorithm sha256 -CurveExport CurveName -CertStoreLocation "Cert:\CurrentUser\My" -NotAfter (Get-Date).AddDays(14)
###生成 RSA 证书(对照组):
New-SelfSignedCertificate -Type Custom -Subject "CN=Test2-RSA-Cert" -TextExtension @("2.5.29.37={text}1.3.6.1.4.1.311.10.3.4","2.5.29.17={text}[email protected]") -KeyUsage KeyEncipherment -KeyAlgorithm RSA -KeyLength 2048 -HashAlgorithm sha256 -CertStoreLocation "Cert:\CurrentUser\My" -NotAfter (Get-Date).AddDays(14)
问题:
- 为什么我不能将椭圆曲线证书(智能卡、yubikey、piv)添加为 BitLocker 的保护器?
- 为什么添加智能卡后,ECC 证书没有出现在 Windows 的证书管理器 (cert:\currentuser\my) 中(但 RSA 证书却出现了)?
- 为什么 manage-bde 命令会出现看似不相关的错误(“错误:只有操作系统卷可以通过 TPM 进行保护。”)尝试使用以下命令添加证书时?
PS ..> manage-bde D: -protectors -add -certificate -tp 39839dd3(...)
BitLocker Drive Encryption: Configuration Tool version 10.0.18362
Copyright (C) 2013 Microsoft Corporation. All rights reserved.
ERROR: Only the OS volume may be secured with the TPM.
什么?我没有对 TPM 做任何事情,为什么会出现错误?其次,这都是关于数据分区的,我甚至没有触碰系统/操作系统分区,甚至没有触碰系统驱动器!这与我正在做的事情相去甚远,我甚至不确定如何调试它。
##证书生成后 - 导入 Yubikey Powershell 命令将证书导出到当前用户证书存储区。
- 我将证书导出为 PFX 文件,其中包含公共部分和私有部分。
- 我从 Windows 中的用户证书存储区中删除了该证书。
- 通过Yubikey 管理器我导入了证书,并在提供了适当的凭证后报告导入成功。
- 然后我使用来自Yubico-piv-工具获取我的 yubikey 的新标识符:
.\yubico-piv-tool.exe --action="set-chuid" --key="{managementkey}"
否则,可能会由于缓存旧证书而开始出现或出现其他奇怪的行为。 - 我移除 Yubikey 并重新连接。您还可以使用 检查状态和新的 CHUID
.\yubico-piv-tool.exe -a status
。
分歧部分-当前用户证书存储:
- 现在,当我使用 RSA 证书执行这些步骤时,只要我再次连接 Yubikey,该证书就会显示在当前用户证书存储中。
边注:
它们与完全在存储中的证书难以区分,但如果您尝试导出这样的智能卡证书,您可能会与智能卡进行交互,但该交互不会去任何地方。我识别我的智能卡证书,因为我无法导出私钥部分。如果它是原始证书,我就可以导出它(因为我生成的证书是可导出的,所以这并不总是一种万无一失的方法)。如果是公共证书,则证书前面的小图标旁边没有钥匙。智能卡上没有证书的唯一图标。移除智能卡不会移除证书存根,它会保留下来。
- 但是,当我对 ECC 证书执行完全相同的操作时,当我再次连接 Yubikey 时,证书不会显示。
为什么?(问题2)。
将证书作为保护器添加到受 BitLocker 保护的驱动器(鼠标):
- 我通过 Windows 资源管理器进入“管理 BitLocker”。
- 我点击“添加智能卡”。
第二部分 - Windows 资源管理器
- 当我在智能卡上加载 1 个 RSA 证书时,它只会添加它。
manage-bde D: -protectors -get -type certificate
可以验证证书指纹。 - 当我在智能卡上加载了 2 个 RSA 证书时,它会提示我选择!这真是一个惊喜。
- 当我在智能卡上加载 1 个 RSA 和 1 个 ECC 证书时,它只会添加 RSA 证书,而不会让我选择。
为什么?(问题 1)BitLocker 是否与 ECC 证书不兼容?我找到了一个旧的有关证书属性的文章,但它没有提到加密类型。查看 BitLocker 和(自签名)证书Windows 10,信息似乎不存在。我manage-bde DRIVE: -protectors -add -certificate -tp (...)
在 Windows 10 文档中很难找到有关的信息,只有一些旧文档。甚至没有等效的 PowerShell 命令。我不知道为什么。(时间戳 2020 年 5 月 1 日。)
通过命令行将证书作为保护器添加到受 BitLocker 保护的驱动器:
- 我使用了
manage-bde D: -protectors -add -certificate -tp 39839dd3(..ECC cert tp..)
。它不会添加证书并提供错误:(Only the OS volume may be secured with the TPM.
?!) - 我再次尝试使用 RSA 证书指纹,但仍然无法添加证书。
我过去曾使用过该命令,因此我感到困惑两次;Windows 的 GUI 会添加 RSA,但不会添加 ECC,但命令行不会再添加任何证书,并抱怨看似不相关的部分,如 OS 分区和 TPM。
为什么?(问题3)。
包起来
我问所有这些问题是为了回答更大的问题:如何以安全的方式使用 yubikey 智能卡 (piv) 解锁受 BitLocker 保护的驱动器(在独立计算机上)?在标题中提出这个问题可能有点过分,这就是为什么我提出与我遇到的问题相关的问题。欢迎您对这些问题提出任何见解,但如果您想分享更大问题的其他解决方案,请随时告诉我。
尽管 ECC 证书和 BitLocker 目前失败了,但提供的 RSA 证书生成功能允许我生成具有我自己选择的属性的更好的 RSA 证书;比 EFS 证书更好。我甚至可能会选择BitLocker 的 OID所以我不必再次更新 GPO。
站点注释2:
我使用智能卡+PIN 的原因是我认为它比密码更安全(也更方便)。你也可以Yubikey 上的静态密码,将其连接起来并与 BitLocker 一起使用,但我留给你自己去思考什么更安全。 - 在我的“研究”中,我也偶然发现了某人制作虚拟智能卡。这显然不是移动的,但它是一种将 TPM 安全性扩展到数据驱动器的方法。自动解锁将数据驱动器的秘密放在 Windows 分区上的 Windows 注册表中。Windows 分区的秘密在 TPM 中(也可能在您的脑海中和 USB 启动密钥中)。如果您将虚拟智能卡添加到您的 TPM 中,并同时将证书 BitLocker 保护器添加到您的数据驱动器中,则秘密在您的 TPM 中(您的虚拟智能卡中),而 PIN 在您的脑海中。至少,据我所知,这是现状;一个可能的未来项目。尽管在这种情况下 ECC 问题仍然有效。
(对于那些想要阅读我收集的网站堆栈的人,我可能会更新这篇文章,添加更多链接。——完成,第一次修订。)
附加信息
我可以扩展一下:
- TPM:是的(尽管这对于本案来说并不重要。)
- 操作系统:Windows 10 1909
- 尤比克 4