Ответ 1
С эмуляцией карт на базе хоста (HCE) в Android 4.4 вы можете эмулировать протокол ISO/IEC 14443-4. Более конкретно, вы можете эмулировать структуры приложений в соответствии с ISO/IEC 7816-4 (при этом приложения эмуляции карт должны выбираться с помощью AID). Кроме того, API не дает вам никаких средств, чтобы указать, следует ли использовать эмуляцию карты с использованием протокола типа A или типа B.
Итак, что касается эмуляции различных протоколов MIFARE:
- Протокол MIFARE Ultralight (и производных) работает поверх ISO/IEC 14443-3. Невозможно эмулировать карты с использованием таких протоколов низкого уровня с помощью Android HCE.
- Протокол MIFARE Classic частично работает поверх ISO/IEC 14443-3 (с некоторым различным обрамлением). Таким образом, его также невозможно эмулировать MIFARE Classic с помощью Android HCE.
-
Протоколы MIFARE DESFire работают поверх ISO/IEC 14443-4. Существует три варианта протокола DESFire:
- собственный протокол: поскольку этот протокол не использует APDU в соответствии с ISO/IEC 7816-4, его невозможно эмулировать с помощью Android HCE.
- wrapped native protocol: этот протокол использует APDU в соответствии с ISO/IEC 7816-4, однако, как правило, читатели не выдают команду SELECT с использованием DESFire AID при запуске связи с картой в оболочном режиме командной строки. (Примечание. Более новые реализации читателей с большей вероятностью выдают команду SELECT, совместимую с Android HCE, поскольку это также необходимо для некоторых новых продуктов для смарт-карт NXP с эмуляцией протокола DESFire.)
- Протокол ISO: Этот протокол основан на ISO/IEC 7816-4 и использует выбор приложений с помощью AID. Таким образом, можно будет эмулировать этот протокол с помощью Android HCE.
Некоторым читателям могут потребоваться определенные значения параметров в нижних слоях протокола (например, конкретный каскадный уровень UID, определенное значение ATQA, определенное значение SAK или определенное ATS). Android HCE не имеет никаких средств для установки этих значений. См. Редактирование функциональности эмуляции хост-карты в Android для возможного подхода к изменению этих значений для определенных корневых устройств и мой ответ на Host для эмуляции карты с фиксированным идентификатором карты для стратегии по программному изменению этих значений в пользовательском ПЗУ.
Замечание о функции HCE, доступной в CyanogenMod от версии 9.1 до версии 10.2: Это будет эмулировать любой протокол на основе ISO/IEC 14443-4 без требования к структуре приложения в соответствии с ISO/IEC 7816-4. Вы даже можете выбрать, хотите ли вы эмулировать протокол типа A или типа B. Поэтому должно быть возможно (хотя я еще не тестировал), чтобы подражать любому из трех протоколов DESFire. Однако даже с функцией HCE CyanogenMod невозможно эмулировать протоколы MIFARE Ultralight или Classic. Кроме того, также невозможно влиять на параметры протокола низкого уровня, такие как UID, ATQA, SAK или ATS.