Насколько хорошо Android NFC API поддерживает Mifare Desfire?

Я, вероятно, буду работать над проектом, где существующие карты Desfire (используемые для доступа к платным услугам) будут заменены мобильным устройством с поддержкой NFC. Может ли кто-нибудь указать мне на какие-либо ресурсы, чтобы помочь мне понять, что связано с a) репликацией данных карты Desfire на мобильное устройство, чтобы она могла занять место карты, и b) для приложения для доставки данных NFC, чтобы представить читателю, как если бы это была карта. Все соответствующие ключи и доступ будут предоставлены эмитентом карты (если проект идет вперед), но я очень хочу понять этот процесс заранее.

Мне также нужно понять, насколько хорошо Android NFC API поддерживает Desfire, потому что, насколько я вижу, он поддерживает только классику. http://developer.android.com/reference/android/nfc/tech/package-summary.html

4 ответов


Mifare DESFire ISO 14443-4 уступчивое. Поддержка в Android Для ISO 14443-4 (и, следовательно, Mifare DESFire) осуществляется IsoDep класса. Вы можете отправить любую команду DESFire, используя transceive() метод этого класса.

кроме того, DESFire может быть настроен на совместимость с тегами NFC Forum type 4. В этом случае Android автоматически зачитает любые сообщения NDEF из тега и отправит его с намерением. Поэтому вы можете запустить приложение автоматически при определенный тег сканируется. (Android также может форматировать чип DESFire, чтобы содержать NDEF и записывать на него данные NDEF.)

замена карты DESFire на мобильное устройство NFC-это другое дело. Эмуляция карты на доступных в настоящее время устройствах Android осуществляется встроенным защищенным элементом, подключенным к чипу NFC. Приложение Android не может эмулировать карту (для этого также нет API), а Безопасный Элемент не может эмулировать чип DESFire. Кроме того, нет открытого API для доступа к защищенному элементу из приложения.

единственный способ Android NFC приложение может общаться через NFC на другое устройство (это не карта) с помощью Android Beam. Однако это другой протокол, чем между картой и считывателем.


NFC guy ответ отличный, но немного устарел, поэтому я решил добавить обновление.

начиная с KitKat (4.4), теперь вы можете эмулировать карты без элемента безопасности.

Это называется эмуляция карты на основе Хоста (Hce) и с этим вы можете эмулировать ISO 14443 типа карты.. Как карточка desfire.

есть два небольших предостережений:

  • ваш читатель должен выдает, сразу после опроса "карты", выбор ISO (aid), с фиксированным идентификатором приложения (aid) по вашему выбору. Эта помощь должна быть зарегистрирована в манифесте приложения. Android перехватит этот выбор ISO, прочитает помощь и позвонит вам, только если он соответствует тому, что в вашем манифесте. Тогда вы можете обменять что угодно, это даже не должно быть ISO APDUs (инкапсуляция ISO 14443 выполняется android). Так, например, если вы хотите, вы даже можете эмулировать аутентификацию ответа на вызов desfire (0xa0 key_num, 0xAF вызов, 0xAF ответ, session_key от 0x00)

  • вы не можете полагаться на UID (но вы этого не делаете, верно? Это плохая практика, так никто не делает... правильно? :)) потому что он случайный, и он постоянно меняется (не внутри одного сеанса, конечно, но...)

мы эмулируем наши карты desfire, и единственное изменение, которое нам нужно было сделать, это переключиться с нашего начального приложения desfire select (0x5A) на ISO SELECT (0x00 0xA4 0х04).

эмуляция аутентификации (проблема-ответ) может быть сложной, но мы уже сделали это "наоборот" (используя NFC для чтения карт desfire), поэтому нам было легко.

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


учитывая вашу ситуацию, я бы сказал, что Android SDK более чем достаточно для решения вашей проблемы. В вашем случае есть две части:

  1. чтение информации с существующих карт.
  2. создание приложения с информацией, которую вы прочитали с карт.

Часть 1.

ваше единственное беспокойство должно быть в чтении карты DESFire. Если информация в карте DESFire хранится в формате NDEF, это делает вещи еще больше простой.

Ndef - Это класс в SDK, который можно использовать для получения информации в NdefMessage тип, который затем можно использовать для сохранения полученной информации в хранилище, будь то локальная база данных или удаленная база данных, или только в памяти приложения.

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

Часть 2: Мое предложение-пропустить аспект эмуляции карт. В какой-то момент Вы столкнетесь со стеной.

Если устройство, которое считывало карту в существующем решении, подключено к устройству android, то Android Beam-это путь. Это не что иное,как Android-приложение для Android-приложения! Android уже делает тяжелую работу, поэтому большая часть вашей работы будет простой.

информация на карте может быть сохранена в виде сообщений ndef и отправлена через beam, или вы можете просто создать пользовательский объект и отправить его через.


вы можете посмотреть на mifare4mobile, инициативу, настроенную на переход от карт Mifare к устройствам NFC:

http://mifare4mobile.org/