我有一个智能卡小程序,它在成功的 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的卡= 2021 返回 only 2状态字节 - no other additional data ) . 因此,如果PinPad读卡器适应此规范并且忽略其他分配,我不会感到惊讶 . SPE模式下的数据 .