Skip to content

PIV 智能卡使用

概述

YuerKey 实现了 PIV(Personal Identity Verification)智能卡标准(NIST SP 800-73-4),提供 11 个密钥槽位,支持 Windows 智能卡登录、VPN 认证、文档签名等企业级安全场景。

PIV 是美国联邦政府制定的身份验证标准,广泛应用于企业和政府的身份认证体系中。YuerKey 完整实现了该标准,你可以将它当作一张智能卡来使用。

密钥槽位说明

YuerKey 提供以下 PIV 密钥槽位:

槽位名称用途说明
9APIV Authentication身份认证用于 VPN 登录、系统登录等,需要 PIN
9BPIV Management管理操作用于导入证书、管理密钥等管理操作
9CDigital Signature数字签名每次签名都需要输入 PIN,用于文档签名、代码签名
9DKey Management密钥管理用于加密/解密文件,仅首次使用需要 PIN
9ECard Authentication卡片认证无需 PIN 即可使用,适用于门禁、物理访问控制
82-87Retired Key Management旧密钥存档6 个槽位,用于保留历史密钥,便于解密旧文件

初始化

默认凭证

YuerKey 出厂时使用以下默认值:

凭证默认值长度要求
PIN1234566-8 位数字
PUK123456786-8 位数字
Management Key3DES 默认密钥24 字节

安全提示

首次使用务必修改所有默认凭证。使用默认值会带来严重的安全风险。

修改 PIN

通过命令行(推荐):

bash
# 使用 yubico-piv-tool
yubico-piv-tool -a change-pin -P 123456 -N <新PIN>

# 或使用 pkcs15-tool
pkcs15-tool --change-pin

通过 YuerKey App:

连接设备后,进入 设备设置 → 安全 → 修改 PIV PIN。

修改 PUK

bash
yubico-piv-tool -a change-puk -P 12345678 -N <新PUK>

PUK 用于在 PIN 被锁定时(连续输错 3 次)解锁 PIN。请妥善保管 PUK。

修改 Management Key

bash
yubico-piv-tool -a set-mgm-key -n <新管理密>

PIN 锁定与解锁

  • PIN 连续输错 3 次后会被锁定
  • 使用 PUK 可以解锁 PIN 并设置新 PIN:
bash
yubico-piv-tool -a unblock-pin -P <PUK> -N <新PIN>
  • PUK 连续输错 3 次后也会被锁定,此时需要恢复出厂设置

使用场景

Windows 智能卡登录

Windows 原生支持 PIV 智能卡登录,配置步骤如下:

  1. 生成密钥对并获取证书
bash
# 在 9A 槽位生成 RSA-2048 密钥对
yubico-piv-tool -s 9a -a generate -A RSA2048 -o public.pem

# 创建证书签名请求(CSR)
yubico-piv-tool -s 9a -a verify-pin -a request-certificate \
  -S "/CN=你的用户名/" -i public.pem -o request.csr
  1. 从企业 CA 获取签发的证书(或使用自签名证书)
bash
# 自签名证书(测试用)
yubico-piv-tool -s 9a -a verify-pin -a selfsign-certificate \
  -S "/CN=你的用户名/" -i public.pem -o cert.pem

# 导入证书
yubico-piv-tool -s 9a -a import-certificate -i cert.pem
  1. 在 Windows 中注册证书

    • 插入 YuerKey,Windows 自动识别为智能卡
    • 打开「certutil」或通过组策略部署证书映射
  2. 使用智能卡登录

    • 在 Windows 登录界面选择「智能卡登录」
    • 插入 YuerKey
    • 输入 PIV PIN
    • 登录完成

VPN 认证

许多企业 VPN 支持使用 PIV 证书进行身份认证:

  1. 在 9A 槽位生成密钥并获取企业 CA 签发的证书
  2. 在 VPN 客户端中选择「智能卡」或「PKCS#11」认证方式
  3. 指向 YuerKey 的 PKCS#11 库
  4. 连接 VPN 时,输入 PIN 完成认证

OpenVPN 配置示例:

pkcs11-providers /usr/lib/libykcs11.so
pkcs11-id 'your-certificate-id'

代码签名

使用 9C 槽位的证书进行代码签名(每次签名都需要输入 PIN,确保安全):

bash
# 使用 signtool(Windows)
signtool sign /sha1 <证书指> /fd sha256 /t http://timestamp.example.com your-app.exe

# 使用 jarsigner(Java)
jarsigner -keystore NONE -storetype PKCS11 -providerClass sun.security.pkcs11.SunPKCS11 app.jar alias

SSH 认证

PIV 证书也可以用于 SSH 认证:

bash
# 导出 SSH 公钥
ssh-keygen -D /usr/lib/libykcs11.so -e

# 使用 PIV 进行 SSH 登录
ssh -I /usr/lib/libykcs11.so user@server

支持的算法

算法密钥长度适用场景
RSA2048 / 3072 / 4096广泛兼容,适合企业环境
ECDSAP-256 / P-384更短的密钥,同等安全性,速度更快
Ed25519256 位现代签名算法,性能最优
X25519256 位现代密钥交换算法

算法选择建议

  • 需要最大兼容性:选择 RSA-2048
  • 追求性能和安全性平衡:选择 ECDSA P-256
  • 仅用于现代系统:选择 Ed25519

兼容工具

以下工具已测试兼容 YuerKey 的 PIV 功能:

  • yubico-piv-tool:命令行 PIV 管理工具
  • OpenSC (pkcs11-tool / pkcs15-tool):通用智能卡工具
  • Windows 智能卡服务:原生支持
  • macOS 智能卡框架:原生支持
  • GnuTLS / OpenSSL:通过 PKCS#11 接口

常见问题

Windows 无法识别智能卡?

确认安装了正确的 minidriver 驱动。YuerKey 兼容标准 PIV minidriver,Windows 10/11 通常自动安装。

PIN 被锁定怎么办?

使用 PUK 解锁:

bash
yubico-piv-tool -a unblock-pin -P <PUK> -N <新PIN>

如何重置 PIV 应用?

如果 PIN 和 PUK 都被锁定,可以重置整个 PIV 应用(会清除所有密钥和证书):

bash
yubico-piv-tool -a reset

证书到期了怎么办?

重新申请证书并导入到相同槽位,密钥对不需要重新生成。