这玩意还是挺好玩的
硬件
J3H145 JAVA Card(飞天产, 支持RSA4096,购买链接)
笔记本自带安国接触式读卡器(推荐X宝的Rocketek,alibaba的飞天读卡器)
额外的接触式读卡器(推荐ACR122U, 若有写卡需求不推荐PN532+IFDNFC)
软件
Global Platform Pro
pcsc-lite
IFD-NFC(如果你用的是PN532)
libfido2
opensc(Windows系统下若不认卡/无法写入则需要安装)
yubico-piv-tool
openssl(生成证书用)
ant(Applet编译工具)
oracle-jdk-8
oracle-javacard-sdk*
Applet
JCAlgTest(用于测试卡片)
u2f-javacard
SmartPGP*
PivApplet
参考资料
自签CA与PKCS12证书生成(PIV使用)
从零开始的 GPG key 与 Yubikey
常见RFID卡片介绍、XX思路 及 Proxmark3简介
PIV Slot
使用方法/注意事项
- 卡拿到手就是初始化好的,可以直接写入,如果你使用PN532,抱歉,写入applet会因为超时而重新上电,导致无法正常写入。但是写好后用PN532读是没问题的。
- (oracle-javacard-sdk*) 使用ant编译的时候需要设置两个环境变量,JAVA_HOME指向jdk,JC_HOME指向Java Card SDK,JavaCardSDK请务必使用上文提供的sdk,oracle官网的SDK部分applet无法编译,能编译的也无法使用。
- PIV中的slot和yubikey一样,在载入证书的时候请确定好slot,slot相关详见上文参考资料,写入slot使用
yubico-piv-tools
,如果你使用的不是yubico,请加参数-r 你的读卡器名字(部分即可)
- (smartPGP*) 默认编译的时候只能写入RSA2048的私钥,如果有4096需求,请按照README中修改
SmartPGP/src/fr/anssi/smartpgp
中的Constants.java
,修改参数如下:
for RSA 2048 bits, Constants.INTERNAL_BUFFER_MAX_LENGTH must be at least (short)0x3b0;
for RSA 3072 bits, Constants.INTERNAL_BUFFER_MAX_LENGTH must be at least (short)0x570;
for RSA 4096 bits, Constants.INTERNAL_BUFFER_MAX_LENGTH must be at least (short)0x730.
- (smartPGP*) 如果使用openkeychain App, 请写入由master branch所编译的applet
- 在Windows中建议使用管理员权限操作
- Global Platform Pro常用指令:
- 设定gp简称:
alias gp=java -jar /path/to/gp.jar
- 查看卡信息:
gp -dvi
- 写入applet:
gp --install <APPLETNAME.cap>
- 卸载applet:
gp --uninstall <APPLETNAME.cap>
- 取消ACR122U的超时:
gp -dva ff0041ff00
- 设定gp简称:
- u2f Applet写入务必使用该脚本,该脚本使用的证书是fido的示例证书。
- 测试u2f建议使用WebAuthn - FIDO2 Example