【发布时间】:2017-01-13 17:33:19
【问题描述】:
我在 PINPAD 阅读器上验证 PIN 码的所有尝试都以失败告终,这是我的情况:
设置
- 比利时 EID 卡;
- Vasco DIGIPASS 875,通过蓝牙连接;
- Android 应用程序使用来自 Vasco 的 SDK。
情况
我使用 APDU 命令来选择和读取文件,设置安全环境 (MSE : SET),经过大量研究和合并来自不同文档的不同解决方案,我可以让读者询问我的 PIN 码。但是使用我的伪 APDU 命令,我收到 69|C# 响应。相同的过程(读取文件、设置安全环境和验证 PIN)在没有 PINPAD 的 USB 读卡器上工作正常,所以我猜 APDU 命令是可以的,但不是前面的伪 APDU 命令。
使用的文档
The BEID documentation,PC/SC 规范第 10 部分 (2.5.2) 和补充 (2.2.1) 和 USB Smart Card devices 用于从 6.1.11.3 到 6.1.11.6 的章节。
我明白了什么?
第一部分应该是FF C2 01 06,用于在阅读器上直接进行PIN验证,后面是后续数据的大小。
接下来应该遵循 PC/SC 第 10 部分的结构,其中:
- 超时 1 和 2(默认为
00); - 格式(对我来说应该是
89,因为对于 1 字节偏移 PIN 应该是10001001,左对齐和 BCD); - PIN 块格式(应为
48,因为 PIN 块包含 4 位长度和 8 字节); - PIN 长度格式(
04:PIN 块中的 4 位偏移); - 最小/最大 PIN 长度:
040C(但不是这样,0404肯定可以); - 确认条件为
02确定按钮; - 消息数:
01使用命令中的一个; - 语言是
0409英语; - 要显示的消息是
00用于输入 PIN; -
000000因为这个字段没有被使用; - 使用 PIN 格式化后要传输的最终 APDU 命令的长度(
0000000D是我的猜测); - 然后是 APDU 命令:
0020000108FFFFFFFFFFFFFFFF
结果
我已经多次更改了一些我不太确定的值(2、3、4、11 和 12 用于已经存在或不存在的填充字符),但没有成功,有时只是不同的结果代码。
我在这里做错了什么?
提前谢谢!
【问题讨论】:
标签: android smartcard apdu smartcard-reader eid