О команде «Получить ответ» в javacard

Я запутался в команде Get Response. Я думал, что знаю это, но на самом деле я не знаю.

Я хочу знать механизм, в котором карта возвращает 1000-байтовые данные в случае 4. Я думаю, что команда выглядит следующим образом. Пожалуйста, дайте мне знать правильный, если он неправильный.

(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. Как реализовать GET RESPONSE в java-апплете?
  4. Чем отличается метод реализации в зависимости от карты T=0/T=1? (Когда я гуглил, я видел информацию о карте T=0/T=1, но я не понимаю.)

Я надеюсь, что любой ответ или URL-адрес соответствующей информации.


person user2642459    schedule 12.07.2014    source источник


Ответы (1)


Чтобы ответить на ваши вопросы:

  1. Мне это кажется в значительной степени правильным, за исключением (2) и последнего замечания;
  2. Вы не отправляете поля Lc и Le для T = 0, в случае 4 команды (данные команды и данные ответа) отправляются только Lc и данные команды - вы также можете сказать, что Le пусто, поскольку это кодировка в байтах;
  3. T=0 обрабатывается ОС Java Card, вам не нужно реализовывать это самостоятельно;
  4. T=1 не использует и не нуждается в GET RESPONSE, так как и T=1, и T=CL являются протоколами более высокого уровня – уровень ниже APDU уже позаботится об этом. Кроме того, может быть реализована поддержка увеличенной длины.

Наконец, карта, конечно, должна возвращать 9000 или слово состояния, указывающее на предупреждение или ошибку, вместо 61E8 для последней команды (впоследствии это было исправлено в вопросе как ошибка в вопросе).

Обратите внимание, что вы не должны не слепо предполагать, что ответ будет содержать запрошенное количество байтов. Например, байт Le со значением 00 указывает максимальный размер ответа, равный 256 байтам.

Все это определено в ISO/IEC 7816-4, глава 5.3.4: Цепочка ответов.

Текущая версия — 2013(E) на момент написания. Это платное ПО (но не Google).

person Maarten Bodewes    schedule 14.07.2014
comment
Чего-то не хватает в моем ответе? - person Maarten Bodewes; 20.07.2014
comment
Спасибо за ваш ответ. В эти дни я занят, и поэтому у меня нет времени думать об этой проблеме. Но иногда я пытаюсь побывать здесь и изучить это. Спасибо еще раз. - person user2642459; 30.07.2014
comment
Означает ли комментарий 2, что команда case 4 не отправляется на карту T=0? - person user2642459; 07.08.2014
comment
Я изменил вышеуказанный APDU. что ты думаешь об этом? Команда 1: [CLA] [INS] [P1] [P2] [Lc] [Данные] SW1: 6100 // Команда 2: 00 C0 00 00 00 SW2: 6100 // Команда 3: 00 C0 00 00 00 SW3: 6100 // Команда 4 : 00 C0 00 00 00 SW4 : 61E8 // Команда5 : 00 C0 00 00 E8 SW5 : 9000 - person user2642459; 07.08.2014
comment
Да, случай 4 не существует для T=0. Выше выглядит лучше (за исключением случая 4 при T=0, очевидно). Пожалуйста, постарайтесь не менять вопрос в значительной степени, иначе ответы будут устаревшими. - person Maarten Bodewes; 07.08.2014
comment
Большое спасибо за ваши комментарии. - person user2642459; 07.08.2014