2014-01-14 3 views
7

Я хочу маршрутизировать APDU, которые я получаю от NFC-Reader на SIM-карту. Согласно HCE documentation, я думал, что это будет возможно, просто создав OffHostApduService с соответствующими строками маршрутизации (что я и сделал).KitKat: Как перенаправить APDU на SIM-карту

К сожалению, на SIM-карте отсутствуют APDU. SELECT-Команды, которые работают, когда SIM-карта напрямую подключена к моей рабочей станции с помощью SIM-Reader с 6a82 (файл не найден).

В LogCat я нашел два интересных бит информации:

Каждый раз, когда я снимаю выбери команду, которая должна быть перенаправлена ​​на SIM-карту, я получаю эти записи:

01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: event=0x17 
01-14 10:44:18.501: D/BrcmNfcJni(1009): RoutingManager::stackCallback: NFA_CE_DATA_EVT; h=0x302; data len=12 
01-14 10:44:18.501: D/HostEmulationManager(1009): notifyHostEmulationData 

Я думаю, что это подсказка о том, что маршрутизация настроена неправильно, так как я думаю, что ОС Android не должна знать, когда маршрутизация на SIM активна, и на SIM-карту отправляется команда выбора или другой.

Каждый раз, когда я удалить телефон из поля NFC читателя, я получаю следующее сообщение об ошибке:

01-14 10:46:48.791: E/BrcmNfcNfa(1009): UICC[0x0] is not activated 

Я попытался проследить причину этой ошибки вниз и нашел файл external/libnfc-nci/src/nfa/ce/nfa_ce_act.chere который, кажется, принадлежит для драйвера Broadcom NFC.

Я думаю, что ошибка заключается в том, что приложение не может установить правильную маршрутизацию для APDU, так как драйвер считает, что SIM-карта не активирована. В момент отправки команд SIM разблокируется (PIN-Entry), но я сомневаюсь, что это имеет какое-либо отношение к нему, поскольку мне не нужно разблокировать SIM-карту перед ее использованием в устройстве чтения карт.

Я использую Nexus 5 для тестирования. Есть ли у кого-нибудь опыт и/или рабочий пример, где APDU могут быть перенаправлены на SIM-карту вместо CPU?

+0

Привет, я работаю над такой же проблемой, как бы я не знал, как перенаправить апду в симулятор, может объяснить метод, который вы использовали по вопросу, который я задал. Я ищу, как перезаписать метод onBind offHostApduService. Большое спасибо – Morendo

ответ

5

Быстрая проверка (анализ сигналов на SWP цапфы UICC, вставленный в устройство) показала, что Nexus 5 не активации SIM-карты в качестве безопасного элемента NFC (ни при загрузке, ни при вводе телефона считыватель смарт-карт).

Однако, я нашел два интересных файлов на системном разделе устройства:

  • /system/etc/libnfc-brcm-20791b05.conf и
  • /system/etc/libnfc-brcm.conf.

Эти два файла, по-видимому, обеспечивают конфигурацию контроллера NFC (первая конфигурация, специфичная для микросхемы, а вторая - отдельная микросхема?).

После разблокировки загрузчика я смог изменить эти файлы с помощью adb, загрузив образ восстановления clockworkmod, поэтому я несколько экспериментировал с параметрами конфигурации.

В результате я позволил устройству активировать UICC (UICC был активирован и зарегистрировал свои ворота CE через SWP?), Устройство иногда даже уведомляло UICC о изменениях статуса поля. Однако, ни с одной из моих модифицированных конфигураций я не смог заставить читателя плавно обнаружить эмуляцию карт (это работало до того, когда на устройстве было доступно только HCE) и не связывалось с UICC.

Интересные параметры /system/etc/libnfc-brcm.conf кажутся:

  • NFA_MAX_EE_SUPPORTED: Это в настоящее время устанавливается на 0. Я попробовал значение 3, который, кажется, по умолчанию.
  • ACTIVE_SE: В настоящий момент это значение равно 0 (без активного SE). Я попытался раскомментировать эту строку, чтобы устройство использовало первую обнаруженную SE.
  • NFA_HCI_STATIC_PIPE_ID_??: Не обязательно, но без GS4 установлено значение 0x71 для? = F3 и F4.
  • UICC_LISTEN_TECH_MASK: Это значение 0x00 на нашем GS4.
  • REGISTER_VIRTUAL_SE: Я оставил это как есть (== прокомментировал).
  • SCREEN_OFF_POWER_STATE: Я не экспериментировал с этим, но на нашем GS4 это установлено на 3 (с экрана CE).

Интересные параметры /system/etc/libnfc-brcm-20791b05.conf кажутся:

  • NFA_DM_START_UP_CFG: Я попробовал закомментированный параметры UICC, и я попытался использовать конфигурацию из нашего GS4. Значение начинается с байта длины и структурируется в формате TLV (один байт тега, один байт длины, данные параметров). Соответствующим тегом для активации UICC является C2, где верхние два бита во втором байте параметра отключают SWP-интерфейсы контроллера NFC, если они установлены.
  • NFA_DM_PRE_DISCOVERY_CFG: Комментарии предполагают, что это необходимо раскомментировать для поддержки UICC.
+0

Большое спасибо! Еще один вопрос: на GS4 UICC можно использовать для ответа на команды NFC? Я думаю, что это подразумевается в ответе. – charno

+2

Да, по крайней мере, на нашем GS4 (от A1 Telekom Austria) UICC доступен как через воздушный интерфейс NFC, так и от прикладного процессора (через SEEK/Open Mobile API). –

+1

Я только что немного поиграл и обнаружил, что UICC получит поле вкл/выкл и события активации, когда устройство будет помещено в считывающее устройство. Тем не менее, эти события поступают в буфер эмуляции типа UICC типа B, в то время как считыватель обнаруживает только карту типа A (и отправка APDU на эту карту приводит к тому, что они пересылаются на хост - независимо от конфигурации OffHostApduService). –

3

Прошло некоторое время с тех пор, как я в последний раз играл с эмуляцией карт на Android, но AFAIK (я мог ошибаться), доступ к безопасному элементу (внутренний или внутренний SIM) еще не был открыт для всех разработчиков (without some hacking). Существует много нетехнических проблем, связанных с контролем SE, которые пока еще не решены (кто держит самый большой кусочек торта в Telcos или поставщиках услуг?).

новость в том, что Google имеет другой подход с KitKat и его HCE, которая в основном состоит в реализации режима эмуляции карты NFC без аппаратного безопасного элемента. ИМХО это в основном нарушает безопасность, необходимую для интересных приложений режима эмуляции карты: электронный платеж, билет, аутентификация и т. Д. Nexus 5 lacks such secure element, и я сомневаюсь, что Google покроет носителей, облегчив доступ к защищенному элементу внутри SIM-карты, поэтому, я думаю, он по-прежнему будет не удастся отправить APDU на SIM-карту с прошивкой запаса.

2

Если добавить следующее /etc/libnfc-brcm.conf

DEFAULT_ISODEP_ROUTE=0xF3 

UICC получит ПБДП

Кроме того, необходимо все модификации above в libnfc-brcm.conf и libnfc-brcm-20791b05.conf

до Jelly Bean 4.3, нормальный способ заключается в использовании nfc_extras и его методе CardEmulationRoute (<route>, <nfcEe>) для маршрутизации UICC в РФ. Но на KITKAT эту жестокую модификацию через DEFAULT_ISODEP_ROUTE достаточно, чтобы включить эмуляцию карты UICC.

+1

Спасибо. Я еще не тестировал его, но верю. Это одностороннее изменение (прерывает HCI), или же маршрутизация работает в соответствии с документацией? – charno

+0

Здравствуйте, не могли бы вы рассказать мне, работает это или нет? А также это применимо и для других телефонов? – Arjun

 Смежные вопросы

  • Нет связанных вопросов^_^