我有一个智能卡小程序,它在成功的VERIFY
(引脚)命令的响应缓冲区中返回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收到额外的16字节响应数据
我知道我的智能卡小程序已在响应中发送了这16个字节的数据。
我想问一下,由于安全限制,这些16字节响应数据是否被智能卡读卡器故意剥离了?我理解这确实是智能卡读卡器的安全限制。但如果是这样的话,你能否指出我的SPE规格描述了这种行为?到目前为止,我没能在任何地方找到它。
或者它可能与我发送给阅读器/ SC的SPE命令有关?
更新
最好提一下我的卡是JavaCard,而applet是一个JavaCard小程序,它没有(完全)符合ISO7816规范(确实描述了INS的卡= 20
和{{1 }仅返回 2个状态字节 - 没有其他附加数据)。因此,如果PinPad读卡器适应此规范并且忽略其他分配,我不会感到惊讶。 SPE模式下的数据。