CanoKey Windows minidriver 让 Windows 应用通过 Microsoft Smart Card CSP 和 Smart Card KSP 使用 PIV 证书和 私钥。这一层负责 Windows 集成;完整的 PIV 槽位和算法仍通过 PKCS#11 提供。
Minidriver 提供六个稳定的 Windows 容器:
| 容器索引 | PIV 槽位 | Windows 用途 |
|---|---|---|
| 0 | 9A |
认证和签名 |
| 1 | 9C |
签名 |
| 2 | 9D |
签名;RSA 密钥交换/解密 |
| 3 | 9E |
认证和签名 |
| 4 | 82 |
签名和退休密钥管理 |
| 5 | 83 |
签名和退休密钥管理 |
Windows 在这些容器中支持 RSA 以及 NIST P-256、P-384、P-521。Ed25519、 X25519、secp256k1、SM2、ML-DSA、ML-KEM 和更高编号的退休槽位只能通过 PKCS#11 使用,因为当前 Windows 智能卡接口没有安全的表示方式。EC 曲线根据 完整的曲线参数识别,不能仅凭 32 字节坐标判定为 P-256。
开发流程不会安装 INF。构建 DLL、复制到 debug 目录,然后在 Calais 注册表中
将 CanoKey ATR 映射到它。默认路径是 C:\canokey-minidriver\canokey-minidriver.dll,
cardmod 使用的值名是 80000001:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards\CanoKey]
"ATR"=hex:3b,f7,11,00,00,81,31,fe,65,43,61,6e,6f,6b,65,79,99
"ATRMask"=hex:ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff
"Crypto Provider"="Microsoft Base Smart Card Crypto Provider"
"Smart Card Key Storage Provider"="Microsoft Smart Card Key Storage Provider"
"80000001"="C:\\canokey-minidriver\\canokey-minidriver.dll"
这是本地调试用的注册表映射,不是生产驱动安装。替换 DLL 后,重新插拔 CanoKey,或重启已经加载旧模块的应用。
可选配置位于 HKLM\SOFTWARE\Canokeys\ckmd:
| 值 | 类型和值 | 默认值/作用 |
|---|---|---|
LogPath |
字符串 | 缺省时关闭日志;设置日志文件路径后启用 |
LogLevel |
trace、debug、info、warn、error、fatal、none |
启用日志时默认为 warn |
LogSensitiveData |
DWORD 或布尔文本 | 0;启用原始 APDU/hex 输出 |
ProtectManagement |
DWORD 或布尔文本 | 1;用户 PIN 登录后尝试 PIN-managed 管理密钥恢复 |
RefreshDeviceKeys |
DWORD 或布尔文本 | 1;刷新外部密钥/证书变化 |
RefreshWindow |
秒数 | 60;0 表示每次实时元数据读取都刷新 |
NewKeyTouchPolicy |
1 never、2 always、3 cached |
Windows 新建密钥默认为 1 |
NewKeyPinPolicy |
1 never、2 once、3 always |
缺省使用 PIV 默认值;3 当前拒绝 |
PinCacheTimeout |
秒数 | 报告给 Windows 的 PIN 缓存建议时长 |
除非明确需要调试 APDU,否则应保持 LogSensitiveData=0;日志可能包含认证或
私钥操作数据。
PIN-protected 管理密钥模式及其永久阻断 PUK 的取舍,参见PIN、PUK 与管理密钥。 卡片完成配置后,minidriver 会在用户认证后自动尝试使用该模式。
保持 ProtectManagement=1(默认值)即可启用自动检查。当外部配置系统负责管理
密钥、不希望执行额外检查时,可设为 0。该设置不会配置卡片,也不会阻断 PUK。
如果受保护数据缺失、格式错误或 PUK 未锁定,minidriver 只保留普通用户认证,
管理操作需要其他受支持的管理员路径。
Minidriver 提供证书文件供 Windows 枚举和签名;证书写入以及密钥生成/导入仍需管理
授权。cardid、cardcf 和 mscp/cmapfile 用于 Windows 缓存协调,但实时 PIV 元数据
才是权威状态。由于 PIV 没有持久化 PIN freshness counter,报告的缓存模式为 no-cache。
使用 certutil -scinfo 检查 Windows 能否枚举读卡器和证书。minidriver 仓库还提供
通过 CAPI/CNG 执行签名、RSA 解密和 ECDH 原始共享密钥派生的 PowerShell 测试。
KSP 中看不到某项能力不代表卡片没有该能力;请查看 PKCS#11 接口。