我正在编写一个JAVA应用程序来访问我的OpenPGP卡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 datasheet (PDF)
:
未满足安全状态:
PW错误
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
(在索引处
05
)将是
20_06
因为OpenPGP卡支持最多32个字符的PIN码,但我的卡终端抱怨
Invalid Value
...
附笔。:
下划线表示相关的字节,当然在解析过程中会被去掉。