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