我有一个智能卡小程序,它在成功的 VERIFY
(pin)命令的响应缓冲区中返回16字节的随机数据 .
通常(在非SPE方案中)我发送以下验证命令:
00 20 00 00 - 06 - 01 02 03 04 05 06
其中前4个字节是CLA,INS,P1和P1,最后7个字节是引脚和引脚本身的长度 . 一切顺利,我得到了结果 9000
,另外在响应缓冲区中我收到了另外16个字节的数据,卡片是按目的发送给我的 .
然而,当我在安全引脚输入(SPE)模式下尝试相同的操作,以便在PinPad上键入引脚(我有一个Omnikey USB PinPad读卡器)时,SPE命令是:
00 00 02 00 00 06 06 02 ff 1b 04 00 00 00 00 04 00 00 00 00 20 00 00
我在Pin Pad上键入了正确的Pin,我仍然收到 9000
响应,但是在SPE状态下来自SmartCard的 I don't receive the additional 16 bytes 响应数据 .
我知道我的智能卡小程序已在响应中发送了这16个字节的数据 .
我想问一下,由于安全限制,这些16字节响应数据是否被智能卡读卡器故意剥离了?我理解这确实是智能卡读卡器的安全限制 . 但如果是这样的话,你能否指出我的SPE的规格描述了这种行为?到目前为止,我没能在任何地方找到它 .
或者它可能与我发送给阅读器/ SC的SPE命令有关?
UPDATE 可能会提到我的卡是JavaCard并且applet是一个JavaCard小程序,它没有(完全)符合ISO7816规范(确实描述了INS的卡= 20
和 21
返回 only 2状态字节 - no other additional data ) . 因此,如果PinPad读卡器适应此规范并且忽略其他分配,我不会感到惊讶 . SPE模式下的数据 .