2

我在 PINPAD 阅读器上验证 PIN 码的所有尝试都以失败告终,这是我的情况:

设置

  • 比利时 EID 卡;
  • Vasco DIGIPASS 875,以蓝牙连接;
  • 使用 Vasco 的 SDK 的 Android 应用程序。

情况

我使用 APDU 命令来选择和读取文件,设置安全环境 (MSE : SET),经过大量研究和合并来自不同文档的不同解决方案,我可以让读者询问我的 PIN 码。但是使用我的伪 APDU 命令,我收到 69|C# 响应。相同的过程(读取文件、设置安全环境和验证 PIN)在没有 PINPAD 的 USB 阅读器上工作正常,所以我猜 APDU 命令是可以的,但不是前面的伪 APDU 命令。

使用的文档

BEID 文档、PC/SC 规范第 10 部分 (2.5.2) 和补充 (2.2.1) 以及从 6.1.11.3 到 6.1.11.6 章节的USB 智能卡设备

我明白了什么?

第一部分应该是FF C2 01 06在阅读器上直接验证 PIN,然后是后续数据的大小。接下来应该遵循 PC/SC 第 10 部分的结构,其中:

  1. 超时 1 和 2(00默认);
  2. 格式(应该89适合我,因为它应该是100010011 字节偏移 PIN,左对齐和 BCD);
  3. PIN 块格式(应该是48因为包含 4 位长度和 8 字节的 PIN 块);
  4. PIN 长度格式(04: PIN 块中的 4 位偏移量);
  5. 最小/最大 PIN 长度:(040C但不是那样工作,0404肯定会工作);
  6. 验证条件是02确定按钮;
  7. 消息数:01使用命令中的一个;
  8. 语言0409为英语;
  9. 要显示的消息是00输入 PIN 码;
  10. 000000因为这个字段没有被使用;
  11. 使用 PIN 格式化后要传输的最终 APDU 命令的长度(0000000D我的猜测);
  12. 然后是 APDU 命令:0020000108FFFFFFFFFFFFFFFF

结果

我已经多次更改了一些我不太确定的值(2、3、4、11 和 12 用于已经存在或不存在的填充字符),但没有成功,有时只是不同的结果代码。

我在这里做错了什么?

提前谢谢!

4

1 回答 1

2

经过最后一轮的研究和检查,我发现了另一个例子,表明我的错误:PIN 块!它是 47,因为它不包括控制/有效 PIN 长度。所以对我来说正确的答案是:

0xFF, 0xC2, 0x01, 0x06, // Base PPDU command
0x20,                   // Length of the data
0x00,                   // timeout
0x00,                   // timeout
0x89,                   // format
0x47,                   // PIN block
0x04,                   // PIN length format
0x04,                   // Min pin size
0x04,                   // Max pin size
0x02,                   // Entry validation condition
0x01,                   // Number of messages to display
0x04, 0x09,             // English
0x00,                   // Message "Enter pin"
0x00, 0x00, 0x00,       // Non significant here
0x00, 0x00, 0x00, 0x0D, // Length of the apdu once formatted
0x00, 0x20, 0x00, 0x01, // APDU command VERIFY
0x08,                   // APDU command Data length
0x20,                   // APDU command Control data + Effective PIN length
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // APDU command PIN + filler
于 2016-09-06T14:32:09.603 回答