

























Javacard (TB搜 J3R180 ¥20-30 要SECID版,记得问卖家密钥)
智能卡读卡器 (TB搜 pcsc读卡器/ccid读卡器 ¥30-50,更建议加钱上双界面的,或者买一个便宜的接触式的再买一个好一些的非接触式的日常用)
操作系统:
Windows 10 LTSB 21H2
软件版本:
gpg4win 5.0.1 (gpg 2.5.17)
OpenSC 0.26.1
Global Platform Pro v20.08.12
Temurin JDK 21.0.10+7-LTS
Python 3.13
卡片到手后第一件事先改掉默认的密钥
1 | openssl rand -hex 16 |
修改密钥:
1 | java -jar gp.jar ` |
先来跑个测试看看到手的卡正不正常、支持哪些算法
从JCAlgTest最新版本(当前最新版是AlgTest_dist_1.8.3.zip)
安装Applet
1 | java -jar gp.jar --install AlgTest_v1.8.2_jc305.cap ` |
如果jc305的Applet装不进去,依次尝试jc304 -> jc222
如果jc304也装不上,那剩下的教程就不用看了,这说明你买到的卡芯片大概率不是J3R180,且 JavaCard support version 低于 3.0.4
运行AlgTestJClient
1 | java -jar AlgTestJClient.jar |
选择 1 -> SUPPORTED ALGORITHMS 测试支持的算法
测试需要跑5分钟左右,最后会生成一个csv文件
打开csv文件,记下 CPLC.ICSerialNumber 最好写在卡上方便区分
搜索 TYPE_RSA_PRIVATE LENGTH_RSA_3072 如果后面显示的是no,则在安装OpenPGP Applet或IsoApplet时只能使用文件名含2048的。
从FIDO2Applet下载工程ZIP包,在从Releases下载Applet(FIDO2.cap)
解压工程ZIP包备用,后面要用到工程里的脚本
注意:当前(2026/3/1)GPP必须使用v20.08.12,在这之后的版本处理TLV有问题会导致后面注入证书的操作报错。
安装Applet
1 | java -jar gp.jar --install FIDO2.cap ` |
注入证书
注意:当前(2026/3/1)Python必须使用3.12,不然pyscard装不上(或者自己手动改下代码)。
1 | python -m venv venv |
从SmartPGP下载Applet
建议使用RSA 2048或3072的Applet,更推荐用NIST P-384,因为卡上跑RSA的速度还是太慢了
使用以下脚本生成序列号:
1 | import secrets |
安装Applet,将--create后的内容替换为上面脚本生成的
1 | java -jar gp.jar --install SmartPGPApplet-rsa_up_to_3072.cap ` |
OpenPGP的使用可以参照:Canokey Canary上手#OpenPGP
从openjavacard-ndef下载预编译的Applet
安装Applet
1 | java -jar gp.jar --install openjavacard-ndef-full.cap ` |
这会创建一个有2K存储空间可重复擦写的tag,详细的参数设置参考这里。
这个Applet需要自己编译IsoApplet
1 |
|
修改 IsoApplet.java 允许导入私钥
1 | public static final boolean DEF_PRIVATE_KEY_IMPORT_ALLOWED = true; |
如果你的卡不支持RSA4096,则需要注释掉 IsoApplet.java 中测试RSA4096的部分
1 |
|
注意:当前(2026/4/1),IsoApplet导入RSA4096密钥会出错,我分别向OpenSC和IsoApplet提交了pr,但是IsoApplet的作者似乎有重构的打算所以并没有直接采用,目前还在等待修复
Fix RSA4096 import
Fix IsoApplet hard coded algorithm_ref
如果需要使用RSA4096密钥,要么卡上生成,要么按照pr手动修改代码。
我们启一个Docker防止配置的环境与主机的冲突:
1 | sudo docker run -it -v ./IsoApplet:/workdir --name jc_build ubuntu:22.04 |
编译后得到 IsoApplet.cap
当然,你也可以直接使用我编译好的cap
安装Applet
1 | java -jar gp.jar --install IsoApplet.cap ` |
初始化
1 |
|
使用案例参考:Using-the-IsoApplet-with-OpenSSH
VeraCrypt可以直接使用存储在符合PKCS #11(2.0或更高版本)标准且允许用户在令牌/卡上存储文件(数据对象)的安全令牌或智能卡上的密钥文件。操作步骤见VeraCrypt文档
有两种方式:
1.存到 OpenPGP Applet 的 PrivDO3(Private Data Object 3) 中
2.存到 IsoApplet 的 PKCS #15 中
默认情况下直接按VeraCrypt的文档操作,密钥文件会被存入PrivDO1,直接运行 gpg --card-edit 不需要验证PIN就可以直接读取到:
1 | PS C:\Temp> gpg --card-edit |
所以更推荐使用这个库:openpgp-privdo3-pkcs11,把密钥文件存进 DO 3。
从Releases下载对应的 dll/so 文件后按工程 README 操作。
1.点击 VeraCrypt 菜单栏的 工具 > 密钥文件生成器
2.密钥文件大小设置在 64-256 字节之间,生成后保存
3.点击 VeraCrypt 菜单栏的 工具 > 管理安全口令牌密钥文件
4.输入设置的PIN码验证
5.点击 “导入密钥文件到令牌”,然后选择刚刚生成的文件
注意:GidsApplet和IsoApplet只能二选一
从GidsApplet下载预编译的Applet
安装Applet
1 | java -jar gp.jar --install GidsApplet.cap ` |
初始化
1 |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。