首页 文章

处理有故障的ISO7816 APDU

提问于
浏览
1

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

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

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

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

1 回答

  • 1

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

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

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

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

相关问题