我在 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 和 2(
00
默认); - 格式(应该
89
适合我,因为它应该是10001001
1 字节偏移 PIN,左对齐和 BCD); - PIN 块格式(应该是
48
因为包含 4 位长度和 8 字节的 PIN 块); - PIN 长度格式(
04
: PIN 块中的 4 位偏移量); - 最小/最大 PIN 长度:(
040C
但不是那样工作,0404
肯定会工作); - 验证条件是
02
确定按钮; - 消息数:
01
使用命令中的一个; - 语言
0409
为英语; - 要显示的消息是
00
输入 PIN 码; 000000
因为这个字段没有被使用;- 使用 PIN 格式化后要传输的最终 APDU 命令的长度(
0000000D
我的猜测); - 然后是 APDU 命令:
0020000108FFFFFFFFFFFFFFFF
结果
我已经多次更改了一些我不太确定的值(2、3、4、11 和 12 用于已经存在或不存在的填充字符),但没有成功,有时只是不同的结果代码。
我在这里做错了什么?
提前谢谢!