1

我正在编写一个 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:下划线表示相关字节,解析时当然会去掉。

4

1 回答 1

1

OpenPGP 使用可变长度的 PIN 并且 PIN 块必须按照流行的约定(这种情况在 CCID 规范中没有涵盖)作为APDU 发送,只有 APDU 标头。

请参阅此处获取提示:https ://github.com/OpenSC/OpenSC/blob/master/src/libopensc/reader-pcsc.c#L1391

另外,你的应用是开源的吗?也许你想贡献一些我还没有写到 apdu4j 的 CCID 控制块代码:https ://github.com/martinpaljak/apdu4j

于 2015-02-13T18:26:20.740 回答