Каковы требования для поддержки APDU увеличенной длины и какие смартфоны их поддерживают?

Когда я впервые попытался отправить команду APDU и получил ошибку «Выше поддерживаемой длины», я предположил, что это просто ограничение самого чипа NFC — его никак не обойти. Однако этот сайт предполагает, что это может быть программное проблема в ОС Android вместо этого:

многие доступные в настоящее время смартфоны могут передавать только 261 байт[2] через NFC без существенных модификаций операционной системы.

Кто-нибудь знает больше о том, как обойти эту проблему и насколько «серьезны» именно модификации?

Кроме того, у вас есть список, какие телефоны поддерживают APDU увеличенной длины? Если нет, нам, вероятно, следует начать, так как вы действительно не найдете многого в Google.

Я знаю, что Samsung Galaxy Note II поддерживает его, а Samsung Galaxy S3, Nexus 5 и Galaxy Nexus — нет.


person BeneStr    schedule 18.09.2014    source источник


Ответы (2)


См. этот сайт: https://code.google.com/p/android/issues/detail?id=76598

Что ты должен сделать:

  • Загрузите исходники Android
  • Измените «261» на «2462» в строке NativeNfcManager.java (как показано на сайте, указанном выше)
  • Сборка Android
  • Прошить модифицированную версию Android на телефоне

Учебник по сборке Android для Nexus 5 можно найти здесь: http://nosemaj.org/howto-build-android-kitkat-nexus-5

Это работает для режима чтения вашего смартфона, я пока не знаю, как заставить его работать для режима эмуляции карты.

person Erik Nellessen    schedule 27.10.2014

Лучшее/более простое/более переносимое решение состоит в том, чтобы отправлять только 261 байт (или меньше) и возвращать коды состояния ISO7816-4 SW1-SW2 = 0x61xx, где xx указывает количество доступных байтов данных. Считыватель отправит команду ISO7816-4 «GET RESPONSE», чтобы запросить оставшиеся байты.

Например, если вы хотите отправить 300 байт из Android HCE, вы начнете отвечать:

  1. HCE: sendResponseApdu({ 250 first bytes of data + 0x6132 }) (0x32 означает 50 оставшихся байтов)
  2. Устройство чтения карт NFC должно отправить: GET RESPONSE
  3. ВКЭ: sendResponseApdu({ last 50 bytes of data + 0x9000 })
person OlivierM    schedule 03.12.2016
comment
Этот подход работает? Вы пробовали свое решение? - person eugeneek; 12.03.2018