处理有故障的ISO7816 APDU

时间:2013-10-01 13:33:57

标签: iso javacard

Java Card API,RE或VM规范中是否有任何关于卡必须如何对错误的ISO7816-4 APDU做出反应的规范(前提是这些格式错误的APDU完全传递到卡上) )?

对applet的APDU处理有不同的要求吗?

如果我要发送,例如一个(有故障的)3字节长的第一个行业间APDU到 卡/小程序 - 谁应该检测/报告此错误?

谁将检测/报告包含错误LC的第一个行业间APDU 长度字段?

1 个答案:

答案 0 :(得分:1)

不,没有通用规范定义如何处理格式错误的APDU。

通常,您应始终返回有效ISO 7816-3 / 4范围内的状态字。哪一个完全取决于上下文。通常,您应该尝试始终在错误条件下抛出一个带有逻辑状态字的ISOException。您应该尝试永远不要返回6F00状态字,如果Applet.process()方法以ISOException以外的例外退出,则返回该字。最常见的(不是所有)ISO状态字已在ISO7816界面中定义。

不幸的是,ISO 7816-4仅提供了一些关于可能预期哪些状态字的提示。另一方面,除非错误是非常具体的(例如错误的PIN),如果终端在语法不正确的APDU上收到状态字,则不会有太多的事情(它不太可能修复)不正确的APDU命令数据字段)。任何特定的状态字都应该由更高级别的协议定义。 ISO 7816-4本身只能用作其他协议的(腐烂)基础。没有明确规定处理语法(错误长度)或语义(错误的PIN)错误。

关于格式错误的APDU:Applet不会收到3字节的APDU。可以接收具有不正确的Lc字节的字节。然而,如果这将影响传输层,使传输层超时,因为它期望更多数据,或丢弃虚假字节,这将更合乎逻辑。检查并返回错误的长度错误并不会有什么坏处,但如果您决定继续,请使用APDU.getIncomingLength()APDU.setIncomingAndReceive()的值作为Ne的最终值。