Как отправить несколько произвольных байтов на смарт-карту ISO7816?

#nfc #smartcard

#nfc #смарт-карта

Вопрос:

У меня есть программируемое устройство (Galaxy Watch), которое может работать как смарт-карта ISO7816, и у меня есть другое программируемое устройство (смартфон Android), которое может работать как терминал для карты. Все, что мне нужно сделать, это отправить и получить несколько байтов с телефона на часы, не требуя каких-либо функций смарт-карты, поскольку предполагается, что она используется.

У меня есть рабочая реализация, которая регистрирует AID на часах. Телефон отправляет инструкцию формата A4 (ВЫБЕРИТЕ ФАЙЛ) с командами P1 = 04 и P2 = 00, и эта информация зарегистрирована в поле данных. Затем часы получают обратный вызов и могут ответить на него произвольными данными. Это работает нормально.

Мой вопрос заключается в следующем: как я могу расширить это, чтобы я мог отправлять несколько произвольных байтов пользовательской информации на часы? У меня слишком много разных информационных объектов, чтобы регистрировать отдельную помощь для каждого из них. Могу ли я каким-то образом добавить несколько произвольных байтов к этой A4 или, возможно, к любой другой команде?

Ответ №1:

Я основываю свой ответ на обзоре эмуляции карты на основе хоста.

Похоже, вы уже расширили HostApduService и внедрили функцию processCommandApdu (), которая получает все APDU, отправленные в рамках вашего «приложения» (т. Е. к чему вы хотите получить доступ через свою помощь).

Теперь вам нужно решить, как смоделировать и инкапсулировать «несколько произвольных байтов пользовательской информации» в терминах ISO7816 (смотрите здесь хорошую точку входа для ознакомления с ISO 7816; здесь у вас есть варианты

  • файлы, ориентированные на запись, к которым можно получить доступ путем ЧТЕНИЯ / ОБНОВЛЕНИЯ / ДОБАВЛЕНИЯ ЗАПИСИ
  • прозрачные файлы, к которым можно получить доступ с помощью двоичного файла ЧТЕНИЯ / ОБНОВЛЕНИЯ
  • объекты, к которым вы могли бы получить доступ с помощью данных GET / PUT

Как только вы определитесь с организацией данных, вам нужно будет включить вышеупомянутый processCommandApdu () для декодирования соответствующих APDU и чтения / записи «нескольких произвольных байтов пользовательской информации».

Комментарии:

1. Спасибо! Единственное, чего я не понимаю: когда я выполняю операцию A4 (ВЫБРАТЬ ФАЙЛ), я должен отправить AID, и поскольку клиентское приложение зарегистрировано для этой AID, оно получает обратный вызов. Теперь, когда я использую DA (PUT DATA) для отправки своих произвольных байтов, как это сообщение попадает в мое клиентское программное обеспечение? Как ОС узнает, что нужно перенаправить его в мое приложение?

2. Это просто и скрыто где-то в первой ссылке: если ФАЙЛ ВЫБОРА с помощью AID может быть разрешен для реализованной службы, все последующие APDU также будут отправлены туда. Для выбора другой службы требуется другой ФАЙЛ ВЫБОРА с другим вспомогательным средством.