Java Card API,RE或VM规范中是否有任何关于卡必须如何对错误的ISO7816-4 APDU做出反应的规范(前提是这些格式错误的APDU完全传递到卡上) )?
对applet的APDU处理有不同的要求吗?
如果我要发送,例如一个(有故障的)3字节长的第一个行业间APDU到 卡/小程序 - 谁应该检测/报告此错误?
谁将检测/报告包含错误LC的第一个行业间APDU 长度字段?
答案 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的最终值。