我正在编写一个 JAVA 应用程序来访问我的 OpenPGP-Card V2.0。我使用的卡终端是“REINER SCT cyberJack RFID标准”,仅支持OSX下的PC/SC,现在我想实现PC/SC 2.0命令“VERIFY_PIN_DIRECT”。
我尝试了以下控制序列, | 之后的字节 是 APDU 字节(我的测试引脚是“140396”):
Index: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | 19 20 21 22 23 24 25 26 27 28 29
Seq 0: 0F 0F 88 86 14 08 04 02 01 09 04 00 00 00 00 0B 00 00 00 | 00 20 00 81 06 FF FF FF FF FF FF
一些重要的字节含义(有用的文档:http ://www.acs.com.hk/download-manual/1207/API-ACR83-1.06.pdf ):
Index 02: PIN format options
Index 03: PIN-block format
Index 04: Position of PIN-length information in the APDU-command
Index 15 - 18: APDU-length
Index 19 - end: APDU-command
但是,如果我发送此命令,我总是会69 82
根据OpenPGP-Card 数据表 (PDF)得到相应的含义:
不满足安全状态:
密码错误
PW 未检查(命令不允许)
安全消息不正确(校验和和/或密码)
APDU 命令似乎是正确的,因为如果我向00 20 00 81 06 31 34 30 33 39 36
卡发送以下命令,则接受 PIN。所以看来我的控制命令是错误的。我的错误在哪里?
更新:
一个工作命令是:
Index: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | 19 20 21 22
Seq 0: 0F_0F 02_0F_00 0F_06 02 01 09_04 00 00_00_00 04_00_00_00 | 00 20 00 81
0F_06
那么(在 index 处05
)更好的价值是20_06
因为 OpenPGP-Card 支持长度为 32 个字符的 PIN,但我的卡终端抱怨Invalid Value
......
PS:下划线表示相关字节,解析时当然会去掉。