智能卡管理
主界面没有 Tab,而是按功能分组的几个区域(分组框来自 Config/frames.json):
| 区域 | 作用 |
|---|---|
| 智能卡管理 | 卡片列表 + 建卡 / 改 PIN / 重置 PIN |
| 智能卡详情 | 选中卡片后显示卡片名称、卡片编号、卡序列、store 路径、卡片状态与容量 |
| 证书与密钥管理 | 卡片上的证书与密钥列表 + 导入 / 生成 / 导出 / 删除,见 证书与密钥管理 |
| 证书详情 / 使用者 / 颁发者 | 选中证书后显示证书字段与使用者的组织信息 |
| 全局相关 | 🔄 重新加载、🔎 检测 TPM、⚙️ 系统设置 |
「智能卡管理」区域的按钮:
| 按钮 | 说明 |
|---|---|
| ➕ 创建智能卡 | 见下文第 2 节 |
| ↩ 修改卡PIN | 已知旧 PIN 时改 PIN |
| 🔄 重置卡PIN | 忘记 PIN 时用 PUK 重置 |
| ❌ 删除智能卡 | 见下文第 5 节 |
| 💾 备份智能卡 | 打成 .tsb,见 备份与还原 |
| ↩ 还原智能卡 | 从 .tsb 还原 |
动手之前
- 必须是管理员,且处于本地控制台会话:远程桌面(普通 RDP)里创建 / 删除卡片会被系统拒绝 (
0x800704d3),程序会提前提示;RDP 请用mstsc /admin。 - 建卡会调用
tpmvscmgr create在 TPM 内生成密钥与卡片文件系统,通常需要几十秒到几分钟, 进度条走满 95% 后仍会等待,请勿关窗口。
1. 卡片列表
| 列 | 含义 |
|---|---|
| 卡序列 | 卡片在系统里的序号(--reader 参数用它定位卡片,改 PIN 时输入的就是这个序号) |
| 卡片名称 | 建卡时填写的名称(同时是读卡器 Microsoft Virtual Smart Card <n> 的来源之一) |
| 卡片编号 | 卡片实例编号 / 设备实例标识(还原与诊断时用它对号入座) |
选中一张卡后,「智能卡详情」会展示:卡片名称、卡片编号、卡序列、store 路径、卡片状态与容量。 若列表为空而设备管理器里有读卡器,说明卡片数据没被正确加载 —— 参见 故障排查手册 的 §3。
2. 创建智能卡
点击 ➕ 创建智能卡,在弹出的「创建新的 TPM 虚拟智能卡」窗口里填写:
| 字段 | 要求 | 默认值 / 备注 |
|---|---|---|
| 卡片名称 | 必填,1~63 字符 | 预填 Personal TPM Virtual Smart Card;也是卡在系统里的标识,建议改成可识别的名字(如 张三-代码签名) |
| 卡片 PIN | 8~15 位 | 界面提示写的是 8~63 字符,实际提交时校验 8~15 位;日常用卡(签名 / 登录)要输入它 |
| 卡片 PUK | 16 位数字,或勾选「禁用 PUK」 | 默认随机生成 16 位数字;PUK 用于"忘记 PIN 时重置 PIN" |
| 管理密钥(Admin Key) | 必须 48 位 | 默认勾选「随机生成」并锁定输入框;用于卡管理类操作 |
提交前按钮会一直处于禁用状态,直到「名称非空 + PIN ≥ 8 位」。提交后:
- 工具会在后台线程调用
tpmvscmgr create,并把三项口令通过控制台提示逐个写入(tpmvscmgr的/AdminKey、/PUK、/PIN只接受PROMPT|DEFAULT|RANDOM,不接受把口令放在命令行上); - 最长等待 300 秒;超时会强制结束并报告;
- 成功后会弹出
tpmvscmgr的输出,并单独弹窗显示 PIN / PUK / 管理密钥, 同时把这段文本复制到剪贴板(msg_new_card_dones会提示你妥善保存)。
建卡后立刻做两件事
- 把 PIN / PUK / 管理密钥存进密码管理器(工具只在这一刻展示它们,之后无法反查明文);
- 备份这张卡(💾 备份智能卡)。卡一旦被删除,TPM 内的持久密钥会被清除, 之后连同一台机器上的备份也无法还原。
PUK 的一个已知不一致
界面校验 PUK 为 16 位数字,而后端在拼 tpmvscmgr 命令时,只在 PUK 长度为 8 位时才会带上 /PUK 参数(Module/TPMSmartCard.py:76,对应界面校验见 SmartCardAPP.py:1458)。 如果你需要 PUK 来「重置卡PIN」,请以实际建卡结果为准;该不一致已在源码中定位, 欢迎到 Issues 反馈设备与版本信息。
3. 修改 PIN(知道旧 PIN)
- 在列表里选中卡片 → ↩ 修改卡PIN;
- 依次输入 旧 PIN、新 PIN、确认 PIN(新 PIN 至少 8 位且两次一致);
- 工具执行
OpenSC\pkcs15-tool.exe --reader <卡序号> --change-pin --pin <旧> --new-pin <新>; - 成功后请立即更新密码管理器里的记录。
连续输错 PIN 会消耗 TPM 内的重试计数,达到上限后卡片会被锁定,只能用 PUK 重置。
4. 重置 PIN(忘记 PIN,用 PUK)
- 选中卡片 → 🔄 重置卡PIN;
- 第一个输入框要填的是 卡 PUK(不是旧 PIN),随后填新 PIN 与确认 PIN;
- 工具执行
pkcs15-tool --reader <卡序号> --unblock-pin --puk <PUK> --new-pin <新 PIN>; - 成功后旧 PIN 失效,请更新记录。
如果 PUK 也无法通过(例如建卡时 PUK 没被正确写入),只剩"删除卡片 + 重新建卡 + 重新签发证书" 这条路 —— 这也是为什么建卡后要尽早备份并保管好三项口令。
5. 删除智能卡
删除是不可逆操作,界面为此加了强确认:
- 选中卡片 → ❌ 删除智能卡;
- 必须勾选「我已确认待删除的卡片并知晓后果」,删除按钮才会启用;
- 确认后工具执行
tpmvscmgr destroy,删除卡片设备与卡内数据; - 工具会明确提示:删除卡片会清除该卡在 TPM 内的持久密钥,备份也无法恢复,并且 可能需要重启系统 / 重启驱动来刷新读卡器列表。
什么时候千万不要删卡
- 卡上还有唯一一份可用私钥(例如代码签名证书、只此一份的客户端证书)时;
- 还没做备份、或备份是旧版本工具生成的(旧包缺设备属性与 DPAPI 明文,还原不出来)时;
- 只是想换个名字 / 换 PIN 时 —— 改 PIN 不需要删卡。
正确顺序永远是:先备份 → 确认备份可用 → 再考虑删卡。
6. 重新加载与检测 TPM
| 按钮 | 作用 |
|---|---|
| 🔄 重新加载 | 重新枚举卡片与证书(插卡 / 删卡 / 重启驱动后用它刷新界面) |
| 🔎 检测 TPM | 执行 powershell Get-TPM,显示 TPM 是否就绪、制造商与版本等;未就绪时先按 硬件与软件要求 自查 |
| ⚙️ 系统设置 | 语言与主题、开机自启与托盘、OpenSC、WinSSH 代理、TPM 状态、关于与更新 |
下一步:证书与密钥管理。