いいえ、不正な APDU の処理方法を定義する一般的な仕様はありません。
一般に、有効な ISO 7816-3/4 範囲内のステータス ワードを常に返す必要があります。どちらがコンテキストに完全に依存します。一般に、エラー状態では常にISOException
論理ステータス ワードをスローするようにしてください。メソッドが 以外の例外で終了した場合に返される6F00
ステータス ワードを返さないようにする必要があります。最も一般的な (すべてではない) ISO ステータス ワードがインターフェイスで定義されています。Applet.process()
ISOException
ISO7816
残念ながら、ISO 7816-4 は、どのステータス ワードが期待されるかについてのヒントしか提供していません。一方、エラーが非常に具体的でない限り (たとえば、間違った PIN)、構文的に正しくない APDU でステータス ワードを受信した場合に端末ができることはあまりありません (正しくない APDU コマンド データ フィールドを修正する可能性は低いです)。 . 特定のステータス ワードは、上位レベルのプロトコルで定義する必要があります。ISO 7816-4 自体は、他のプロトコルの (腐った) 基盤としてのみ使用できます。構文上のエラー (間違った長さ) または意味上のエラー (間違った PIN) を処理するための明確なルールは定義されていません。
不正な APDU に関して: 3 バイトの APDU はアプレットによって受信されません。不正な Lc バイトを含むバイトが受信される場合があります。ただし、これがトランスポート層に影響を与え、トランスポート層がより多くのデータを期待しているためにタイムアウトするか、偽のバイトが破棄される場合は、より論理的です。チェックして間違った長さのエラーを返すことは問題ありませんが、続行する場合は、APDU.getIncomingLength()
またはのAPDU.setIncomingAndReceive()
値を Ne の最終値として使用してください。