2

Get Response コマンドについて混乱しています。知ってると思ってたけど実は知らない。

ケース 4 でカードが 1000 バイトのデータを返すメカニズムが知りたいです。コマンドは次のようになると思います。間違っていたら正しいものを教えてください。

(Card) <== [CLA] [INS] [P1] [P2] [Lc] [Data] [Le] // response data size is 1000 bytes
(Card) ==> 6100

(Card) <== 00 C0 00 00 00
(Card) ==> [Data(256)] 6100

(Card) <== 00 C0 00 00 00
(Card) ==> [Data(256)] 6100

(Card) <== 00 C0 00 00 00
(Card) ==> [Data(256)] 61E8

(Card) <== 00 C0 00 00 E8
(Card) ==> [Data(232)] 9000 (61E8 was my mistake)

質問

  1. 上記の APDU は正しいですか?
  2. 最初のコマンドの [Le] は何ですか?
  3. Java アプレットで GET RESPONSE を実装する方法は?
  4. T=0/T=1 カードによって実装方法が異なるのはなぜですか? (ググったらT=0/T=1カードの情報はあったのですがよくわかりませんでした。)

関連情報のURLか回答をいただければ幸いです。

4

1 に答える 1

4

質問に答えるには:

  1. (2)と最後の発言を除いて、私にはおおむね正しいようです。
  2. T = 0の場合、LcとLeフィールドの両方を送信しません。ケース4のコマンド(コマンドデータと応答データ)では、Lcとコマンドデータのみが送信されます-Leはエンコーディングであるため、空であるとも言えますバイト単位。
  3. T=0 は Java Card OS によって処理されます。これを自分で実装する必要はありません。
  4. T=1 と T=CL はどちらも上位レベルのプロトコルであるため、T=1 は GET RESPONSE を使用しないか、または必要としません。APDU の下のレイヤーが既にこれを処理しています。さらに、拡張された長さのサポートが実装されている場合があります。

最後に、カードはもちろん、最後のコマンド9000ではなく、警告またはエラーを示すステータス ワードを返す必要があります61E8(これは、その後、質問の誤りとして質問で修正されました)。

要求されたバイト数が応答に含まれると盲目的に想定しないでください。00たとえば、値を含む Le バイトは、最大応答サイズが 256 バイトであることを示します。

これはすべて、ISO/IEC 7816-4 の 5.3.4 章で定義されています: 応答チェーン

現在のバージョンは、執筆時点で 2013(E) です。これは有料のソフトウェアです (ただし、Google はそうではありません)。

于 2014-07-14T08:15:38.203 に答える