Отправка данных, использование HCE или защищенного элемента? (Андроид, Котлин, Мифаре 1К)

Я пытаюсь реализовать функцию эмуляции чипа Mifare One (1K/S50, ISO14443A), чтобы иметь возможность использовать телефон с поддержкой NFC вместо физической карты Mifare или, если возможно только для отправки данные читателю.

У меня есть устройство для чтения/записи такого типа: https://www.evelta.com/er302-high-frequency-nfc-writer-usb/

После поиска на форумах, вопросов stackoverflow я нашел эту статью лучшим примером:

https://medium.com/the-almanac/how-to-build-a-simple-smart-card-emulator-reader-for-android-7975fae4040f

Я реализовал часть HCE, запустил программу, и читатель решил, что мой телефон — это чип Mifare, пока все хорошо.

Мои проблемы:

  • Независимо от того, какой стандартный ключ аутентификации я пытался использовать ... это дает мне ошибку аутентификации. Я прочитал этот вопрос об аутентификации: Ошибка аутентификации для Метка Mifare 1K NFC с использованием считывателя ACR122U NFC, она работает на физической карте Mifare... но я не знаю, как установить или узнать ключи для эмулируемой карты.

  • Я не понимаю, почему этот пример эмулирует именно этот тип чипа Mifare ... даже точки останова не работают в APDUService, но читатель каким-то образом обнаруживает дешевый Mifare.

Прочитав об этом, я понимаю, что не могу на 100% эмулировать физическую карту, поэтому мне нужно каким-то образом отправить все данные, которые я хочу, в моем ответе APDU со службой (я полагаю, что это часть приема).

Однако я даже не могу аутентифицироваться.

Я попытался найти другие возможные решения:

  • AndroidBeam: Android - Android p2p... звучит просто, относительно высокоуровневый API, но он устарел, более того не гарантируется, что ридер будет даже использовать Android ... это может быть «простое» устройство для чтения USB, подобное тому, которое я использую.

  • SecureElement: По иронии судьбы... кажется, это наиболее рекомендуемый, я читал, что "да, это возможно для mifare" и тому подобное, пока я не мог найти хороший пример этого, а в официальных документах Google нет хорошего примера. Я читал, что это для ISO/IEC 7816-4, но Mifare 1K соответствует ISO14443A, поэтому я немного скептически отношусь к этому API.

  • Простая отправка данных на устройство чтения: если бы я мог просто отправить данные на устройство чтения, когда оно читает телефон, не усложняя задачу и не эмулируя что-либо... было бы здорово, но я не знаю, возможно ли это вообще. Вся эта тема NFC кажется все более и более сложной.

Так что в целом мне нужно сделать только одно: взять данные и отправить их читателю.

Я понял, что это сказка, похожая на иллюзию, верить, что это так просто, как кажется, но все же я надеюсь, что есть способ сделать это.

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

Приносим извинения за возможные грамматические ошибки в английском языке.


person atanii    schedule 21.01.2021    source источник


Ответы (1)


Проблема в том, что вы не можете использовать HCE на Android для эмуляции Mifare Classic 1K (https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf), так как это карта NFC пользовательского типа. Поскольку HCE — это эмуляция карт типа 4. См. https://developer.android.com/guide/topics/connectivity/nfc/hce#SupportedProtocols

И изображение ниже помогает понять тип.

введите здесь описание изображения

Вы можете видеть это из его таблицы данных, нигде не говорится об AID и стандартных командах NFC типа 4.

Хотя тип 2 и тип 4 могут совместно использовать механизм предотвращения столкновений и чтение UID (что является частью процесса), любые другие методы доступа не используются совместно.

Спецификация типа 4 для справки находится по адресу http://apps4android.org/nfc-specifications/NFCForum-TS-Type-4-Tag_2.0.pdf

Я видел некоторые USB-ридеры, которые предлагают эмуляцию карт других типов, но не HCE, где эмуляцию выполняет хост, а не аппаратное обеспечение NFC.

Аутентификация на картах типа 4 или эмулированных картах осуществляется по-разному.

Вы можете эмулировать карту MIFARE DESFire, поскольку это карта типа 4.

Характеристики вашего кард-ридера плохо задокументированы, он выглядит очень легким и не поддерживает протоколы более высокого уровня, необходимые для взаимодействия с картами, отличными от Mifare Classic. Он может поддерживать их, но поскольку протокол Mifare был исходной спецификацией, возможно, что он имеет старый дизайн и поддерживает только протокол Mifare.

person Andrew    schedule 21.01.2021