1

Java Card API、RE、または VM 仕様に、カードが障害のある ISO7816-4 APDU にどのように反応する必要があるかについての仕様はありますか (そのような不正な形式の APDU がカードに渡される場合)。

アプレットの APDU 処理にはさまざまな要件がありますか?

たとえば、(欠陥のある) 3 バイト長の最初の産業間 APDU をカード/アプレットに送信した場合、誰がこのエラーを検出/報告する必要がありますか?

不正な LC 長フィールドを含む最初の産業間 APDU を検出/報告するのは誰ですか?

4

1 に答える 1

1

いいえ、不正な APDU の処理方法を定義する一般的な仕様はありません。

一般に、有効な ISO 7816-3/4 範囲内のステータス ワードを常に返す必要があります。どちらがコンテキストに完全に依存します。一般に、エラー状態では常​​にISOException論理ステータス ワードをスローするようにしてください。メソッドが 以外の例外で終了した場合に返される6F00ステータス ワードを返さないようにする必要があります。最も一般的な (すべてではない) ISO ステータス ワードがインターフェイスで定義されています。Applet.process()ISOExceptionISO7816

残念ながら、ISO 7816-4 は、どのステータス ワードが期待されるかについてのヒントしか提供していません。一方、エラーが非常に具体的でない限り (たとえば、間違った PIN)、構文的に正しくない APDU でステータス ワードを受信した場合に端末ができることはあまりありません (正しくない APDU コマンド データ フィールドを修正する可能性は低いです)。 . 特定のステータス ワードは、上位レベルのプロトコルで定義する必要があります。ISO 7816-4 自体は、他のプロトコルの (腐った) 基盤としてのみ使用できます。構文上のエラー (間違った長さ) または意味上のエラー (間違った PIN) を処理するための明確なルールは定義されていません。

不正な APDU に関して: 3 バイトの APDU はアプレットによって受信されません。不正な Lc バイトを含むバイトが受信される場合があります。ただし、これがトランスポート層に影響を与え、トランスポート層がより多くのデータを期待しているためにタイムアウトするか、偽のバイトが破棄される場合は、より論理的です。チェックして間違った長さのエラーを返すことは問題ありませんが、続行する場合は、APDU.getIncomingLength()またはのAPDU.setIncomingAndReceive()値を Ne の最終値として使用してください。

于 2013-10-01T21:10:00.077 に答える