Доступ к карте MIFARE DESFire

Как я могу получить доступ к карте MIFARE DESFire, используя телефон Android в качестве считывателя NFC? Я планирую разработать приложение для Android (для оплаты) на телефоне Android.

Для операций DESFire (аутентификация, чтение и запись), которые я хочу выполнять с помощью телефона Android, требуется карта SAM. Я думал, что смогу эмулировать эту карту SAM в телефоне с помощью HCE.


person Donn    schedule 19.08.2014    source источник
comment
Можно ли реализовать платеж NFC с использованием телефона Android в качестве POS (терминала) и карты Mifare DESFire с использованием эмуляции хост-карты? заранее спасибо   -  person Donn    schedule 19.08.2014
comment
Вы хотите использовать телефон в режиме HCE (т. е. для эмуляции карты DESFire, которую затем можно использовать с внешним считывателем) или в режиме считывателя (т. е. для доступа к внешней карте DESFire с помощью телефона)?   -  person Michael Roland    schedule 10.09.2014
comment
@MichaelRoland, режим чтения (т.е. для доступа к внешней карте DESFire с телефона)? это то, что я хочу сделать. Является ли это возможным?   -  person Donn    schedule 16.09.2014
comment
Таким образом, ваш вопрос не об эмуляции хост-карты, а об обычном режиме чтения. Эмуляция хост-карты подходит для сценариев, в которых телефон действует как карта. Я обновил ваш вопрос соответственно.   -  person Michael Roland    schedule 22.09.2014
comment
@MichaelRoland спасибо за ответ. Значит, нет необходимости использовать HCE в этой настройке? Я хочу выполнить операцию DESFire (аутентификация, чтение и запись) с помощью телефона Android. Для аутентификации требуется карта SAM, я думал, что смогу эмулировать карту SAM в телефоне (программное обеспечение) с помощью HCE.   -  person Donn    schedule 22.09.2014


Ответы (2)


Карты DESFire/DESFire EV1 взаимодействуют поверх протокола обмена данными ISO/IEC 14443-4 (ISO-DEP). Поэтому на устройствах Android к ним можно получить доступ через класс IsoDep. Итак, как только вы получите дескриптор тега (объект Tag), вы можете создать экземпляр объекта IsoDep, используя:

Tag tag = ...  // (e.g. get from NFC discovery intent)
IsoDep isoDep = IsoDep.get(tag);

Вы можете подключиться к карте и использовать метод transceive() объекта IsoDep для отправки команд на карту (и получения ответов от нее):

isoDep.connect();
byte[] response = isoDep.transsceive(command);

Вы можете использовать собственный набор команд DESFire, встроенный собственный набор команд DESFire APDU или набор команд ISO/IEC 7816-4 (дополнительную информацию см. в техническом описании DESFire). Из-за известных проблем с обнаружением присутствия на некоторых устройствах (которые автоматически отправляют READ BINARY APDU, чтобы определить, доступен ли тег), я настоятельно рекомендую использовать либо встроенный собственный набор команд APDU, либо набор команд ISO/IEC 7816-4. (см. этот вопрос).

Теперь проблемной частью является SAM. SAM (модуль безопасного доступа) — это защищенный чип смарт-карты, который содержит ключи и выполняет важные для безопасности части связи с картой DESFire. Вы не можете просто «эмулировать» такой SAM, используя эмуляцию карты на основе хоста. В этом не было бы особого смысла, поскольку вся идея HCE заключается в маршрутизации связи от бесконтактных считывателей смарт-карт через интерфейс NFC к (незащищенному) процессору приложения. Реализация функциональности SAM на процессоре приложения разрушила бы всю цель (т. е. высокий уровень безопасности) выделенного чипа SAM. Кроме того, для эмуляции функциональности SAM вам не понадобится HCE, поскольку вы можете напрямую хранить учетные данные для доступа к карте DESFire в своем приложении.

Вариант, который у вас может быть, — использовать облачный безопасный элемент. Таким образом, вы можете иметь функциональность SAM на сервере/в облаке и направлять связь с вашей картой DESFire через ваше приложение на этот сервер.

byte[] command = receiveCommandFromBackend();  // receive command from server/cloud over the network
byte[] response = isoDep.transsceive(command);
sendResponseToBackend(response); // send response to server/cloud over the network

Подводя итог: вам не нужен HCE. В зависимости от ваших требований безопасности вы можете либо сохранить учетные данные для доступа к картам DESFire в своем приложении (обратите внимание, что злоумышленник может извлечь эту информацию), либо вы можете использовать облачный подход SE для переноса критических частей безопасности. к серверной онлайн-системе (но обычно для этого требуется постоянный доступ к сети во время связи с картой).

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

person Michael Roland    schedule 08.10.2014
comment
@Ronald, спасибо за информацию! Теперь я хочу эмулировать карту Mifare DESFire с помощью HCE (не в режиме чтения). Я хочу, чтобы телефон Android NFC функционировал как карта Mifare DESFire. У вас есть идея, как это реализовать? Еще раз спасибо за вашу помощь - person Donn; 27.10.2014
comment
Извините, дорогой мистер Роланд, карты DESFire относятся к родным картам? или это карты Java? Или это обычные карты памяти? Я прочитал вики-страницу о картах Mifare, но она ничего не проясняет о картах DESFire. Поддерживают ли они приложения после выпуска? Или какие-то специфические приложения маскируются в ПЗУ и нет возможности добавить или удалить какое-то одно? Любой свет по этому вопросу высоко ценится. - person Ebrahim Ghasemi; 14.03.2015

Mifare DESFire не является стандартом для оплаты, вместо этого вы должны полагаться на ISO14443-4 (т.е. ISO7816-4), по крайней мере, это то, что сделали все громкие имена. Это также стандарты, на которых основывается HCE. Наличие платежной системы на основе DESFire, вероятно, было бы чем-то очень специфическим. Проблема с DESFire в том, что это проприетарная технология. Разработка платежного приложения с использованием HCE очень сложна с точки зрения безопасности.

person takumar    schedule 21.08.2014
comment
Спасибо за ответ. Я просто ищу, возможно ли создать приложение, которое будет кредитовать / дебетовать или даже аутентифицировать карту Mifare DESFire с использованием телефонов NFC (для использования в качестве SAM) с использованием эмуляции хост-карты. Спасибо за помощь :) - person Donn; 22.08.2014