Nfc driver что это
В этой статье: немного технических аспектов работы NFC, сценарии использования NFC и интересные решения, безопасность и интересная идея в конце статьи (на мой взгляд).
Надеюсь статья покажется Вам интересной и познавательной, ведь приятно осознавать, что кто-то чеу-то у тебя научился. А те, кто знают много больше моего, найдут для себя что-то интересное и полезное, но и поделятся своими знаниями в комментариях. Жду конструктивной критики и вопросов. Желаю приятного чтения. Всем добра.
За прошедшие 25 лет мир изменился существенным образом: освободился от проводов, уменьшил размер и вес, увеличил скорость и самое главное — создал комфорт. Сложно было представить телефонную трубку без провода, телефон без дискового номеронабирателя или без автоответчика. Конечно, в то время уже существовали спутниковые телефоны, но я не уверен, что многие видели его своими глазами. А ходить по квартире и разговаривать без привязки к месту — было мечтой многих, как минимум желанием. На замену обычным телефонам пришли радиотелефоны, а их заменили телефоны и смартфоны.
Но я хочу обсудить беспроводные технологии. 1998 год — год создания Wi-Fi и основания Bluetooth SIG. Спустя пару-тройку лет «синий зуб» изменит передачу информации, а через чуть более, чем десяток лет Wi-Fi станет популярной и необходимой технологией. Но не везде и не сразу. К слову, я не забыл об ИК-порте (IrDA), который значительно проигрывал BT уже в начале 00-ых. А в частности, я хочу рассказать об одной, с которой Вы сталкиваетесь каждый день и даже не догадываетесь об этом (скорее всего).
NFC — Near Field Communication — «коммуникация ближнего поля», «ближняя бесконтактная связь». Да, скажете Вы, есть такая технология в телефоне. Добавил банковскую карту в Google Pay и оплачиваю без карты. А если нет NFC в телефоне, то оплачиваю самой картой, там ведь такой же чип. Верно. Но, по сути, это не всё.
Вы часто пользуетесь похожей на NFC систему. Из RFID стандарта ISO/IEC 14443 появился NFC. Именно RFID и есть в ключе домофона, в смарт-картах, которые прикладываются к считывателю, чтобы пройти через турникет, в проездных и т.д. А если вернуться лет так на 15 назад, то можно вспомнить, как сидя дома предпринимали попытки оторвать какую-то наклейку от только что купленной коробки диска с игрой, чтобы прочитать описание или системные характеристики полностью.
Да, в домофонных ключах нет магнита. Никак не может размагнититься, а вот испортиться от дождя, влаги или падения — вполне.
По сути NFC это частный случай RFID (Radio Frequency Identification) — механизма радиочастотного обмена данными, хранящимися в так называемых транспондерах или метках. То есть из RFID ближней идентификации создали NFC.
NFC основан на стандартах ISO/IEC 18092 NFC IP-1, JIS X 6319-4 и ISO/IEC 14443 для бесконтактных смарт-карт. NFC устройство работает на частоте 13,56 МГц и состоит из считывателя (ридера) и антенны, или из метки и антенны. Ридер генерирует радиочастотное поле, которое может взаимодействовать с меткой или с другим ридером. Ридер - это устройство NFC, работающее в режиме активной коммуникации. Метка - это устройство NFC, которое работает в режиме пассивной коммуникации.
ISO/IEC 14443 — стандарт, описывающий частотный диапазон, метод модуляции и протокол обмена бесконтактных пассивных карт (RFID) ближнего радиуса действия (до 10 см) на магнитосвязанных индуктивностях. Стандарт предназначен для карт с малой дальностью чтения и большими скоростями обмена данными. В основном это рынок платежных средств и идентификации личности.NFC был одобрен как ISO/IEC стандарт 8 декабря 2003 года. До стандартов NFC существовали другие стандарты, которые позже были взяты в основу стандарта NFC, например, ISO 14443. Он описывает частотный диапазон, метод модуляции и протокол обмена бесконтактных пассивных карт (RFID) ближнего радиуса действия (до 10 см) на магнитосвязанных индуктивностях.Устройства, имеющие в NFC, могут взаимодействовать с существовайшей раннее инфраструктуро, например, в режиме эмуляции карты должно передать уникальный идентификационный номер существующему считывателю RFID
NFC — технология с открытой платформой, стандартизированная в ECMA-340 и ISO/IEC 18092. Эти стандарты определяют схемы модуляции, кодирование, скорости передачи и радиочастотную структуру интерфейса устройств NFC, а также схемы инициализации и условия, требуемые для контроля над конфликтными ситуациями во время инициализации — и для пассивных, и для активных режимов NFC. Кроме того, они также определяют протокол передачи, включая протокол активации и способ обмена данными. Радиоинтерфейс для NFC стандартизирован в:
-
/ ECMA-340: Near Field Communication Interface and Protocol-1 (NFCIP-1) Информационные технологии. Телекоммуникации и обмен информацией между системами. Коммуникация в ближнем поле. Интерфейс и протокол (NFCIP-1) / ECMA-352: Near Field Communication Interface and Protocol-2 (NFCIP-2)
Так, для продвижения идеи и её развития, в 2004 году собрались NXP Semiconductors, Sony и Nokia и организовали некоммерческую организацию NFC Forum, для совместной работы над продвижением технологии NFC. Что же они делают? Расскажу на примере WECA (Wireless Ethernet Compatibility Alliance или другими словами Wi-Fi Alliance). Объединились пионеры и преуспевающие компанию в альянс, дабы зарегестрировать новую технологию и решить какие задачи перед ними стоят. Задачами этой организации является разработка, тестирование и сертифицирование, а также поддержка и продвижение форматов беспроводной связи Wi-Fi.
Цели форума NFC:
- Разработка спецификаций и механизмов тестирования, обеспечивающих согласованную и надежную работу NFC во всех трех режимах;
- Информационная поддержка среди поставщиков услуг и разработчиков о преимуществах технологии NFC для обеспечения роста внедрения и использования технологии NFC;
- Продвижение NFC Forum и других брендов NFC.
В июне 2006 года, всего через 18 месяцев после своего основания, Форум официально обрисовал архитектуру технологии NFC. На сегодняшний день Форум выпустил 16 спецификаций. Спецификации предоставляют своего рода «дорожную карту», которая позволяет всем заинтересованным сторонам создавать новые продукты.
В дополнение к уже существующим стандартам NFC Forum собрали лучшее из этих стандартов в документы, описывающие работу устройств, которые используют технологию NFC и назвали их спецификациями.
В дополнение к уже существующим стандартам NFC Forum собрали лучшее из этих стандартов в документы, описывающие работу устройств, которые используют технологию NFC и назвали их спецификациями.
Например, в спецификации NFC Analog Technical Specification рассматриваются аналоговые радиочастотные характеристики устройства с поддержкой NFC. Эта спецификация включает в себя требования к мощности антенны, требования к передаче, требования к приемнику и формы сигналов (время /частота /характеристики модуляции).
Спецификация NFC Analog 2.0 ввела активный режим связи для обмена данными P2P и технологию NFC-V в режиме опроса. Версия 2.0 обеспечивает полную совместимость с устройствами, соответствующими ISO/IEC 14443 или ISO/IEC 18092.По этим спецификациям существует следующие способы связи для устройств NFC: NFC-A, NFC-B, NFC-F, и пять типов NFC-меток. Устройства NFC могут быть активной или пассивной коммуникации и поддерживать один (или несколько) из 3 режимов работы.
NFC-A
Тип связи NFC-A основан на стандарте ISO/IEC 14443A для бесконтактных карт. Типы связи отличаются используемыми режимами кодирования сигнала и модуляции. NFC-A использует код Миллера и амплитудную модуляцию. Двоичные данные передаются со скоростью около 106 Кбит/с, сигнал должен изменяться от 0% до 100%, чтобы различать двоичную 1 и двоичный 0.
NFC-B
Тип связи NFC-B основан на стандарте ISO/IEC 14443B для бесконтактных карт. NFC-B использует метод манчестерского кодирования. Двоичные данные также передаются со скоростью около 106 Кбит/с. Здесь вместо 100% используется 10% -ое изменение амплитуды для двоичного 0 (то есть низкого уровня) и 100% для двоичной 1 (то есть высокого). В манчестерском кодировании переход с низкого на высокий уровень представляет двоичный 0, а переход с высокого на низкий уровень представляет двоичную 1.
NFC-F
Тип связи NFC-F основан на стандарте FeliCA JIS X6319-4, также известный как просто FeliCa. Стандарт регулируется японской jicsap. Там эта технология, и наиболее популярна. Скорость передачи данных 212 / 424 Кбит/с, используется манчестерское кодирование и амплитудная модуляция.
Чип NFC состоит из катушки индуктивности, которая создаёт определённое радиочастотное поле и воздействует на другое такое же поле по заданному сценарию с различным уровнем кодирования. В таком процессе технология NFC имеет два режима работы: активный и пассивный.
С учетом двух режимов технология NFC может использоваться для следующего:
- Режим считывания/записи. NFC-чип работает в активном режиме и считывает пассивную метку. Метка NFC — это пассивное устройство с данными внутри. Информацию можно считать, лишь поднеся к метке активное считывающее устройство.
- Режим peer-to-peer — обмен данными между двумя активными устройствами. Это может быть как файл, передача контакта, приложения. Кроме этого возможна беспроводная зарядка.
- Режим эмуляции карты. NFC-чип прикидывается картой (пассивным устройством), например пропуском или платежной картой.
Для чего вообще создаются подобные технологии? Для автоматизации, ускорения и упрощения работы, создания комфортного использования устройств. Подробнее об этом я расскажу ниже.
Пожалуй, стоит начать от самого сложного к интересному.
Эмуляция банковских карт не самое простой процесс, если быть честным. Потому начну с карт лояльности. Их разновидностей существует достаточное количество: и с магнитной лентой, с QR-кодом, и со штрих-кодом. Добавив карту лояльности в Google Pay, Вы упрощаете свою жизнь, уменьшая количество переносимого пластика. Но допольнительной функцией является реализация метода для передачи данных о карте лояльности в систему торговой точки (POS) продавца, то есть возможные скидки по карте лояльности будут учитываться прямо во время оплаты заказа, никаких вам «а теперь приложите бонусную карту». (Уточнение: карта лояльности должна содержать в себе NFC. Карты со штрихкодом или QR-кодом необходимо предоставить до оплаты для сканирования их с экрана телефона).
Карты лояльности сохраняются в платежном приложении вместе с привязанной банковской картой и используются в режиме эмуляции карты NFC. Эти данные хранятся в защищенном элементе (Security Element или SE) в телефоне. Вкратце, SE — это защищенная от взлома платформа, как правило, это чип с памятью, которая позволяет безопасно хранить конфиденциальные данные, защищенные криптографическими ключами. SE может быть интегрирован в SIM-карту, выпущенную мобильной сетью пользователя, или чипом, встроенным в телефон производителем устройства. Эта реализация хранит учетные карт лояльности в том же домене безопасности, что и данные платежной карты, привязанные к платежному приложению.И хотя данные карт лояльности, не то чтобы жизненно необходим безопасно хранить, но при хранении в SE они защищены от стирания или изменения другими приложениями.
В работе бесконтактной карты добавляется NFC модуль, который обеспечивает бесконтактное соединение со считывателем банковских карт.Что же происходит в случае эмулирования карты мобильным телефоном. Чтобы не записывать на чип SE в мобильном устройстве платежные приложения всех банковских карт, которыми пользуется владелец устройства, которые к тому же надо персонализировать, т.е. передать данные о выпущенных картах и хранить их в защищенном виде, была сформулирована роль TSM (Trusted Service Manager), который объединяет с одной стороны поставщиков услуг (Service Provider TSM), а с другой стороны чипы Secure Element (Secure Element Issuer TSM).TSM — Trusted Service Manager — уникальный посредник, который владеет ключами. Это аппаратно-программный комплекс, предоставляющий технологические отношения между операторами связи и поставщиками услуг.
TSM - доверенный поставщик услуг. Выполняет защищенную загрузку и менеджмент контента защищенного элемента (SE) для транспортных приложений, магазинов, мобильных операторов, банковских приложений, конфиденциальные данные держателя карты
Ключевые услуги доверенной третьей стороны включают защищенную загрузку и менеджмент контента элемента безопасности, выполняемый при взаимодействии с провайдерами мобильных сервисов. Это могут быть банки, транспортные компании, поставщики и агрегаторы услуг. Удаленное управление приложениями, обычно выполняемое с использованием технологий беспроводной сотовой связи (over-the-air, OTA), включает установку и персонализацию приложений в элементе безопасности мобильного телефона, а также дальнейшее обслуживание установленных приложений на всем протяжении их жизненного цикла, равно как и сервисную поддержку. Подробнее о TSM здесь.
Однако эта технология платежей все равно требовала присутствия физического защищенного элемента на мобильном устройстве. Что давало определенные ограничения, например, если производитель мобильного устройства не включил SE в свою платформу, в этом случае, требовалось менять SIM-карту на карту с поддержкой SE у мобильного оператора.
В 2012 году Дугом Йегером и Тедом Фифельски, основателями SimplyTapp, Inc. был придуман термин «эмуляция хост-карты» (Host Card Emulation) , который описывал возможность открытия канала связи между терминалом бесконтактных платежей и удаленным размещенным защищенным элементом, содержащим финансовые данные, данные платежной карты, позволяющие проводить финансовые операции в терминале торговой точки.
Они внедрили эту новую технологию в операционной системе Android, начиная с версии 4.4. HCE требует, чтобы протокол NFC направлялся в основную операционную систему мобильного устройства, а не в локальную микросхему защищенного аппаратного элемента (SE). Итак, начиная с версии Android 4.4 KitKat управление платежными операциями взял на себя не физический элемент, а API, точнее Google Pay API. Эмуляция карты неотделима от понятия «токенизация», потому что это следующая ступень защиты платежных данных в виртуальном мире после TSM, который выдавал ключи.
Токен — это ссылка (то есть идентификатор), которая сопоставляется с конфиденциальными данными через систему токенизации. Сопоставление исходных данных с токеном использует методы, которые делают невозможным обратное преобразование токенов в исходные данные вне системы токенизации, например, с использованием токенов, созданных при помощи случайных чисел. Т.е. вместо номера вашей карты API хранит токен, полученный от банка-эмитента, который бесполезен в том виде, в котором он хранится. Даже если его узнают третьи лица, воспользоваться им будет невозможно.
Когда вы вводите номер карты в мобильное приложение, обеспечивающее возможность мобльных платежей, например, номер карты 4111 1111 1111 1234, удаленный поставщик токенов (remote token service server) возвращает вместо номера карты токен вида 4281 **** **** 2819, который хранится в мобильном устройстве.
Токенизация при использовании Google Pay:
1. Когда пользователь добавляет в Google Pay свою кредитную или дебетовую карту, приложение запрашивает у банка-эмитента токен. Затем Google Pay шифрует токенизированную карту, и она становится доступна для оплаты.
2. При оплате клиент прикладывает свое мобильное устройство к терминалу или нажимает соответствующую кнопку в приложении. Google Pay отправляет токен и криптограмму, которая действует как одноразовый код. Платежная система проверяет криптограмму и соотносит токен с номером карты клиента.
3. Для завершения транзакции ваш банк-эквайер и банк-эмитент покупателя используют данные клиента и расшифрованную информацию о его платеже
- Google Pay не обрабатывает и не авторизует транзакции. Сервис только токенизирует карты и передает токены и другую информацию о клиентах платежным системам.
- Продавец является получателем платежей. Он обязан вести бухгалтерский учет и удерживать необходимые налоги.
- Продавцу не нужно менять свою систему обработки платежей.
В этом руководстве показано, как написать функциональный драйвер NFC с помощью драйвера NFC Class Extension (NFC CX).
Драйвер, использующий драйвер расширения класса в своей реализации, называется "драйвером клиента". То есть клиент драйвера расширения класса.
предварительные требования
- Встроенное ПО контроллера NFC должно реализовать протокол NFC Forum в интерфейсе контроллера NFC (NCI ). г. (или более поздней версии). .
Обязанности драйвера клиента
Драйвер NFC CX отвечает за обработку запросов ввода-вывода, отправленных драйверу, и создание соответствующих пакетов команд NCI. Драйвер клиента отвечает за отправку этих пакетов NCI на контроллер NFC и отправку пакетов ответа NCI драйверу NFC CX.
Это зависит от драйвера клиента, чтобы определить, как отправлять пакеты NCI контроллеру NFC. Это зависит от типа используемой аппаратной шины. Распространенные автобусы, используемые контроллерами NFC, включают I2C , SPI и USB.
Полный код проекта
Полная версия этого примера кода доступна в GitHub: пример драйвера клиента NFC CX.
Настройка проекта
В Visual Studio создайте проект "Драйвер пользовательского режима, пустой (UMDF версии 2)".
В меню Файл укажите Создать, затем нажмите Проект. В узле Visual C++ в разделе "Драйверы Windows" щелкните WDF и выберите "Драйвер пользовательского режима", "Пустой" (UMDF версии 2)
В Обозреватель решений в проекта в папке "Файлы драйверов" дважды щелкните .
В INF-файле удалите пользовательский класс устройства, выполнив следующие действия:
Удалите следующие два раздела:
[Strings] В разделе удалите следующую строку.
В INF-файле задайте для класса устройства драйвера значение Proximity:
- Измените значение Class на Proximity
- Измените значение ClassGuid на
- Это GUID класса устройства Близкого взаимодействия.
В INF-файле добавьте ссылку на расширение класса NFC. Это гарантирует, что Windows Driver Framework (WDF) загрузит драйвер NFC CX при загрузке драйвера клиента.
- Найдите раздел _Install .
- Добавьте UmdfExtensions=NfcCx0102 .
В параметрах сборки драйвера свяжите расширение класса NFC. Это гарантирует доступность API NFC CX во время компиляции кода.
- В Обозреватель решений щелкните проект правой кнопкой мыши и выберите пункт "Свойства". В разделе "Свойства конфигурации" в разделе "Драйвер Параметры" щелкните NFC.
- Убедитесь, что для конфигурации задано значение All Configurations .
- Убедитесь, что для платформы задано All Platforms значение .
- Задайте для свойства Link to NFC Class Extension to Yes .
Добавьте файл с именем Driver.cpp в проект.
Создание подпрограммы DriverEntry в Driver.cpp . Это точка входа для драйвера. Его основной целью является инициализация WDF и регистрация функции обратного EvtDriverDeviceAdd вызова.
Добавьте два файла с именем Device.cpp и Device.h в проект.
In Device.h , define the DeviceContext class.
В Device.cpp начале DeviceContext::AddDevice определения функции.
Типичный клиентский драйвер, скорее всего, потребует EvtDevicePrepareHardware наличия , EvtDeviceReleaseHardware EvtDeviceD0Entry функций и EvtDeviceD0Exit функций. Требования могут различаться в зависимости от того, как драйвер клиента обрабатывает управление питанием.
WdfDeviceCreate Вызовите функцию для создания WDFDEVICE объекта.
Эта функция должна вызываться после WDFDEVICE создания объекта, чтобы разрешить драйверу NFC CX завершить инициализацию экземпляра устройства.
Вызов NfcCxSetRfDiscoveryConfig для указания технологий и протоколов NFC, поддерживаемых контроллером NFC.
Завершите функцию DeviceContext::AddDevice .
Реализуйте функции и ReleaseHardware функции обратного PrepareHardware вызова.
Эти две функции используются для инициализации и неинициализации аппаратных ресурсов, назначенных экземпляру устройства контроллера NFC. Их реализация зависит от типа шины, к которому подключено устройство (например, I2C , SPI и USB).
Вызовите функцию NfcCxHardwareEvent и HostActionStop HostActionStart запустите и остановите конечный автомат NCI в нужное время.
Некоторые драйверы делают это во время D0Entry D0Exit обратных вызовов питания PnP. Это может отличаться в зависимости от того, как драйвер клиента обрабатывает управление питанием, однако.
Этот обратный вызов вызывается NFC CX при наличии пакета NCI для отправки на контроллер NFC.
Вызовите функцию NfcCxNciReadNotification , когда контроллер NFC имеет пакет NCI, который должен быть отправлен в NFC CX. Обычно это делается в аппаратном обратном вызове событий.
- Обратный вызов события прерывания GPIO . ( I2C и SPI)
- Обратный вызов непрерывного чтения USB .
Logging
Рассмотрите возможность добавления ведения журнала в драйвер клиента, чтобы упростить отладку. Трассировка etW и трассировка WPP являются хорошими вариантами.
Технология NFC или Near Field Communication («коммуникация ближнего поля») – это набор стандартов для организации связи между двумя устройствами (например, смартфонами), которые находятся на очень близком расстоянии друг от друга (менее 4 сантиметров).
Авторы: Субхо Гальдер (Subho Halder) и Адитья Гупта (Aditya Gupta) (@sunnyrockzzs и @adil391)
Введение
Что такое NFC?
Технология NFC или Near Field Communication («коммуникация ближнего поля») – это набор стандартов для организации связи между двумя устройствами (например, смартфонами), которые находятся на очень близком расстоянии друг от друга (менее 4 сантиметров).
Коммуникационные протоколы таких устройств основаны на RFID-стандартах, включая ISO I4443. Эти стандарты были разработаны и получили массовое распространение при содействии некоммерческой ассоциации NFC Forum, которая была основана в 2004 году такими известными компаниями как Sony, Nokia, Philips, Samsung и т. д.
Рабочая частота протокола составляет всего лишь 13,56 МГц (+/- 7 МГц), что является очень низкой величиной. Это дает определенные преимущества, позволяя обойтись небольшими энергоресурсами батареи при внедрении этого протокола в портативное устройство.
Режимы коммуникации
- Пассивный: в этом режиме пассивные NFC-метки (NFC «tags») считывается любыми NFC-совместимыми устройствами. Инициатор коммуникации (NFC-устройство) при помощи электромагнитного излучения питает метку, которая потом возвращает хранимые данные (по сути, метка является ретранслятором).
- Активный: в этом режиме оба устройства излучают электромагнитную энергию и могут передавать и принимать данные между собой. Такое взаимодействие в некотором роде похоже наP2P-протокол, когда можно легко передавать бинарные и мультимедийные файлы.
Стек протоколов NFC
На схеме проиллюстрирован базовый формат стека протоколов NFC.
В этой статье мы коснемся уровня протокола (protocol layer), который отвечает за начало коммуникации, и прикладного уровня (application layer), который отвечает за передачу данных между устройствами.
Уровень протокола
Этот уровень подразделяется на несколько типов. Мы рассмотрим четыре наиболее распространенных стандарта: Type I (Topaz), Mifare Classic, Mifare Ultralight и LLCP (P2P).
Type I (Topaz)
Метки Type I работают в формате, который иногда называют протоколом Topaz. Если размер памяти у метки менее 120 байт используется статическая модель памяти, иначе – динамическая модель. Чтение/запись байтов метки происходит при помощи следующих команд: RALL, READ, WRITE-E, WRITE-NE, RSEG, READ8, WRITE-E8, WRITE-N8.
Mifare Classic
Метки Mifare Classic - устройства хранения данных с простыми защитными механизмами, которые позволяют разграничивать доступ. Для аутентификации и шифрования используется протокол безопасности, который был разработан и запатентован компанией NXP. Алгоритм шифрования был исследован и взломан в 2007 году.
Mifare Ultralight
Метки Misfare Ultralight схожи с Topaz-метками. В случае если объем памяти меньше 64 байт используется статическая модель памяти, иначе – динамическая модель. В первых 16 байтах хранятся метаданные: серийный номер, права доступа, формат хранимых данных (capability container). Остальные байты отведены под данные. Для доступа к памяти используются команды Read и Write.
LLCP (P2P)
Предыдущие протоколы работают по принципу источник-приемник, когда инициатор коммуникации читает/записывает информацию в целевое устройство. В случае с протоколом управления логическим звеном (Logical Link Control Protocol, LLCP) оба устройства являются активными и могут, как читать, так и передавать данные.
Прикладной уровень
Прикладной уровень отвечает за формат передаваемых данных между NFC-устройствами или NFC-устройством и метками.
Стек протоколов NFC для платформы Android
На рисунке показаны библиотеки, из которых состоит стек NFC-протоколов для платформы Android
Стек подразделяется на три компонента: ядро, службы NFC и само устройство (или метка).
Ядро содержит NFC-драйвер libpn544_fw.so, который отвечает за взаимодействие с сигналами NFC. Служба NFC носит имя com.android.nfc и опирается на три основных драйвера: libnfc.so,libnfc_jni.so и libnfc_ndef.so. Каждый из этих компонентов включает функционал для работы с отдельными частями NFC-данных (JNI, NDEF и т. д.)
Виды атак через протоколы NFC
Скимминг банковских карт
В тех странах, где банковские карты поддерживают протоколы NFC, возможно проведение транзакций, используя возможности этих протоколов. Как только устройство в банкомате обнаружило карту, считывается служебная информация, которая затем используется для совершения платежей.
Злоумышленник может установить еще один картридер, которое также будет считывать информацию с карт посредством NFC-протокола, а затем передавать ее «родному» устройству банкомата. Такая атака является одним из примеров MITM-атаки (Man in the Middle Attack). В конце дня злоумышленник может вернуться к банкомату, снять устройство считывания карт и получить информацию обо всех картах, которые использовались в течение дня. В дальнейшем он может использовать эту информацию в преступных целях.
Скимминг NFC-постеров
Еще один вид атаки - использование электронных афиш совместимых с NFC протоколом. Такие постеры могут использоваться, например, для рекламы. Принцип их действия следующий: NFC-устройство прикладывается к определенному месту плаката, а затем скачивается информация. К примеру, подобным образом известный артист может рекламировать свои новые треки. В моем случае, после подключения к афише, я заполнил регистрационную форму и скачал музыкальное видео. Однако довольно часто в телефоне могут храниться персональные данные и злоумышленник, используя электронный плакат, может установить на ваш телефон вредоносную программу.
Атака с использованием ретрансляции (NFC Relay Attack)
Этот вид атаки ставит под угрозу безопасность компаний, которые используют NFC-карты для идентификации клиентов и сотрудников.
К примеру, такие карты могут использовать для прохода в здание. Злоумышленник может считать информацию с карты и сделать ее копию или же просто использовать свой телефон для проникновения в помещение.
От таких атак могут пострадать не только компании, но и рядовые граждане. Незнакомец может поднести NFC-устройство к вашей дебетовой (или кредитной) карте и считать информацию (само собой, если карта поддерживает протокол NFC), а затем использовать ее для кражи денег.
Использование NFC для атаки на Android-системы
- www-данные запускают браузер
- протокол mailto: запускает почтовый клиент
- некорректные значения формата NDEF выводят из строя NFCService.java
Вредоносы для NFC
Эти вредоносные программы могут проксировать запросы прежде, чем они дойдут до целевого приложения. Например, при получении адреса ресурса (url), который хранится в метке, происходит разбор строки, а затем запускается вредонос вместо браузера.
USSD-атака через NFC
Широко известна USSD-уязвимость в телефонах Samsung Galaxy, используя которую без ведома пользователя можно сбросить настройки телефона, набрать номер или открыть браузер.
Ссылки
Один хакер может причинить столько же вреда, сколько 10 000 солдат! Подпишись на наш Телеграм канал, чтобы узнать первым, как выжить в цифровом кошмаре!
NFC (near field communication) – стандартизированная технология обмена данными на короткие расстояния, позволяющая осуществлять взаимодействия между двумя электронными устройствами простым и интуитивно понятным способом. Например, с помощью оснащенного NFC смартфона вы можете делать покупки, раздавать визитные карты, скачивать купоны на скидки и так далее. Множество новых применений для NFC будет найдено в ближайшее время.
Эта статья описывает технологии, использующие NFC и способы их применения на сегодняшний день. Также показано, как использовать NFC в Android приложениях и, наконец, приведены два примера NFC приложений с исходными кодами.
Архитектура технологии NFC
NFC основана на RFID технологии с частотой 13.56 МГц и рабочей дистанцией до 10 см. Скорость обмена данными составляет до 424 кб/сек. По сравнению с другими коммуникационными технологиями, основным преимуществом NFC является быстрота и простота использования. На рисунке ниже видно расположение NFC среди других коммуникационных технологий.
Технология NFC имеет три режима: эмуляция NFC-карты, пиринговый режим и режим чтения/записи.
В режиме эмуляции карты NFC представляет собой аналог чипованной RFID карты со своим модулем безопасности, позволяющим защищать процесс покупки. В пиринговом режиме вы можете делиться информацией, например визитной карточкой, с другими NFC устройствами. В также можете устанавливать WiFi или Bluetooth соединения посредством NFC для передачи больших объемов данных. Режим чтения/записи предназначен для чтения или изменения NFC меток с помощью NFC устройств.
Каждый режим более подробно описан ниже.
Режим эмуляции NFC карты
NFC модуль обычно состоит из двух частей: NFC контроллера и элемента безопасности (ЭБ). NFC контроллер отвечает за коммуникации, ЭБ – за шифрацию и дешифрацию чувствительной к взлому информации.
ЭБ подключается к NFC контроллеру посредством шины SWP (Single Wire Protocol) или DCLB (Digital Contactless Bridge). Стандарты NFC определяют логический интерфейс между хостом и контроллером, позволяя им взаимодействовать через RF-поле. ЭБ реализуется с помощью встроенного приложения или компонента ОС.
Существует три варианта реализации ЭБ: можно встроить его в SIM-карту, SD-карту или в NFC чип.
Операторы связи, такие как CMCC (China Mobile Communication Corporation), Vodafone или AT&T обычно используют решение на SIM-карте, поощряя своих абонентов бесплатной заменой старых SIM-карт на новые, оснащенные NFC.
Пиринговый режим
Два NFC устройства могут легко взаимодействовать друг с другом напрямую, обмениваясь небольшими файлами. Для установления Bluetooth/WiFi соединения необходимо обменяться XML файлом специального формата. В этом режиме ЭБ не используется.
Режим записи/чтения
В данном режиме NFC устройство может читать и записывать NFC метки. Хорошим примером применения является чтение информации с оснащенных NFC «умных» постеров.
Введение в разработку NFC под Android
Android поддерживает NFC с помощью двух пакетов: android.nfc и android.nfc.tech.
Основными классами в android.nfc являются:
NfcManager: Устройства под Android могут быть использованы для управления любыми обнаруженными NFC адаптерами, но поскольку большинство Android устройств поддерживают только один NFC адаптер, NfcManager обычно вызывается с getDefaultAdapter для доступа к конкретному адаптеру.
NfcAdapter работает как NFC агент, подобно сетевому адаптеру на ПК. С его помощью телефон получает доступ к аппаратной части NFC для инициализации NFC соединения.
NDEF: Стандарты NFC определяют общий формат данных, называемый NFC Data Exchange Format (NDEF), способный хранить и передавать различные типы объектов, начиная с MIME и заканчивая ультра-короткими RTD-документами, такими как URL. NdefMessage и NdefRecord – два типа NDEF для определенных NFC форумом форматов данных, которые будут использоваться в коде-примере.
Tag: Когда устройство Android обнаруживает пассивный объект типа ярлыка, карты и т.д., он создает объект типа «метка», помещая его далее в целевой объект и в заключении пересылая в соответствующий процесс.
Пакет android.nfc.tech также содержит множество важных подклассов. Эти подклассы обеспечивают доступ к функциям работы с метками, включающими в себя операции чтения и записи. В зависимости от используемого типа технологий, эти классы разбиты на различные категории, такие как NfcA, NfcB, NfcF, MifareClassic и так далее.
Когда телефон со включенным NFC обнаруживает метку, система доставки автоматически создает пакет целевой информации. Если в телефоне имеется несколько приложений, способных работать с этой целевой информаций, пользователю будет показано окно с предложением выбрать одно из списка. Система доставки меток определяет три типа целевой информации, в порядке убывания приоритета: NDEF_DISCOVERED, TECH_DISCOVERED, TAG_DISCOVERED.
Здесь мы используем целевой фильтр для работы со всеми типами информации начиная с TECH_DISCOVERED до ACTION_TECH_DISCOVERED. Файл nfc_tech_filter.xml используется для всех типов, определенных в метке. Подробности можно найти в документации Android. Рисунок ниже показывает схему действий при обнаружении метки.
Пример 1. Разработка NFC приложения для чтения/записи меток.
Следующий пример показывает функции чтения/записи NFC метки. Для того, чтобы получить доступ к аппаратной части NFC и корректно обрабатывать NFC информацию, объявите эти позиции в файле AndroidManifest.xml.
Минимальную версию SDK, которую должно поддерживать ваше приложение — 10, объявите об этом в файле AndroidManifest.xml
Следующий код демонстрирует функцию записи. Перед тем, как определить значение mytag, вы должны убедиться, что метка определена и только потом вписать в нее свои данные.
В зависимости от прочитанной информации вы можете выполнить дополнительные действия, такие как запуск какого-либо задания, переход по ссылке и т.д.
Пример 2. Разработка NFC-приложения, использующего карты MifareClassic
В этом примере для чтения мы будем использовать карты MifareClassic и соответствующий им тип метки. Карты MifareClassic широко используются для различных нужд, таких как идентификация человека, автобусный билет и т.д. В традиционной карте MifareClassic область хранения разбита на 16 зон, в каждой зоне 4 блока, и каждый блок может хранить 16 байт данных.
Последний блок в зоне называется трейлером и используется обычно для хранения локального ключа чтения/записи. Он содержит два ключа, А и В, 6 байт длиной каждый, по умолчанию забитые 00 или FF, в зависимости от значения MifareClassic.KEY_DEFAULT.
Для записи на карту Mifare вы, прежде всего, должны иметь корректное значение ключа (что играет защитную роль), а также успешно пройти аутентификацию.
Пример того, как читать карту MifareClassic:
Об авторах
Songyue Wang и Liang Zhang — инженеры в Intel Software and Service Group, разрабатывающие мобильные приложения, в том числе и для Android, и оптимизирующие их под платформу х86.
Все мы привыкли к такой данности в смартфоне как NFC. И вроде бы всё с этим ясно.
Многие не покупают смартфоны, где нет NFC, думая что это только про покупки. Но есть куча вопросов.
Но знали ли вы что еще умеет эта технология? Что делать если в вашем смартфоне нет NFC? Как использовать чип в iPhone не только для Apple Pay? Почему она не работает, особенно с карточками Мир?
А еще через него можно заряжать устройства…
Сегодня мы расскажем как она работает и разберем все подробности. И главное — почему это самая недооцененная технология в вашем смартфоне!
Как работает NFC?
Вы наверняка знаете, что NFC расшифровывается как Near Field Communication или по-русски — связь ближнего действия.
Но это не обычная передача данных по радиоволне. В отличие от Wi-Fi и Bluetooth NFC устроен хитрее. В основе лежит электромагнитная индукция. Это очень крутая штука из школьной программы, напомню.
Идея в том, что вы берете один проводник, в котором нет электричества. И кладете рядом с ним второй проводник, в котором есть электричество. И знаете, что? В первом проводнике, где электричества не было, начинает течь ток!
Когда мы впервые про нее узнали, подумали, что такое невозможно! Серьезно? Вы гоните! Пошли играть в Counter Strike, пацаны.
Ну так вот, когда вы подносите смартфон к какой-нибудь NFC метке без питания, этого крошечного электромагнитного поля от смартфона достаточно, чтобы внутри метки побежали электроны, и заработали микросхемы внутри неё.
Ах да. В каждой метке есть крошечная микросхема. Например, в банковских картах микрочип запускает даже простенькую версию Java. Каково?
Может быть вы ещё слышали аббревиатуру RFID. Её разработали лет на 30 раньше. Она расшифровывается как радиочастотная идентификация. И по сути только для идентификации и подходит. Во многих офисных центрах пропуска до сих пор с RFID.
Так вот NFC является продвинутой веткой стандарта RFID и читает часть таких меток. Но главное отличие в том, что NFC умеет еще и передавать данные, в том числе зашифрованные.
NFC работает на частоте 13,56 МГц, что позволяет развить неплохую скорость от 106 до 424 Кбит/с. Так что mp3-файл скачается за пару минут, но только на расстоянии до 10 см.
Физически NFC — это маленькая катушка. Например в Pixel 4 прикреплена к крышке и выглядит вот так.
А так в Xiaomi Mi 10 Pro:
И тут как раз пора поговрить о том, что умеет делать NFC?
Работа этой технологии и смежных, вроде RFID, описаны в стандарте ISO 14443. Там еще много чего свалено в кучу: например, итальянский протокол Mifare и VME — это в банковских картах.
NFC — это своего рода USB Type-C в мире беспроводных технологий, если вы понимаете, о чем я.
Но главное вот что. NFC может работать в трех режимах:
- Активный. Когда девайс считывает или записывает данные с метки или карточки. Кстати, да, данные на NFC метки можно и записывать.
- Передача между равноправными устройствами. Это когда вы подключаете к смартфону беспроводные наушники или используете Android Beam — помните такое. Там по NFC происходило подключение, а сама передача файла шла уже по Bluetooth.
- Пассивный. Когда наше устройство прикидывается чем-то пассивным: платежной картой или проездным.
Бонусы NFC вот в чем:
- Мгновенное подключение — одна десятая секунды.
- Низкое энергопотребление — 15 мА. У Bluetooth до 40 мА.
- Теги не требуют собственного питания.
- И не столь очевидное — малый радиус действия, что необходимо для безопасности и оплаты.
Зачем? Что нам это даёт?
Помимо уже очевидных сценариев: пропуска, оплата и проездные — есть приложения, которые умеют класть деньги на карту «Тройка» и другие транспортные карты.
Есть приложение — Считыватель банковских карт. Оно например может показать последние транзакции по карте. Не уверен, что это очень этично, но приложение лежит в Play Market.
Кстати, многих интересует, почему Google и Apple Pay не работают с картами Мир? Дело не в технических особенностях. Просто платежная система не договорилась с сервисами. Платить можно через свое приложение под Android — Мир Pay. Правда оно глючное, а под iPhone его вовсе нет!
Кстати, лайфхак. Если у вашего Android нет NFC, но платить очень хочется, что делать? Можно положить карточку под чехол. Обращайтесь. Правда толстые чехлы могут не пропускать волны даже встроенного NFC — так что проверяйте.
Мы уже поговорили про устройства, но есть вторая важная часть — это NFC метки. Они бывают двух видов.
- Те, на которые можно записывать информацию. Они выглядят как маленькие наклейки. Обычно доступный объем памяти — около 700 байт. Подобные выпускала компания Sony.
Тут можно хранить кучу всего, например:
- Доступ к Wi-Fi для гостей
- Записать контактные данные и использовать в качестве визитки
- Настроить смартфон переходить в спящий режим ночью на тумбочке
- Еще в нее можно сохранить какие-то данные, например пароль или токен от BitCoin. Только лучше в зашифрованном виде.
Что делать, если у вас нет NFC меток? Их можно заказать, стоят копейки.
Но можно взять обычную банковскую карту или транспортную, вроде «Тройки». Это закрытые для записи метки. Типичный пример — ваша банковская карта. На них нельзя ничего записать.
Но ваш смартфон можно запрограммировать на любые действия, когда к нему приложат такую штуку.
Если у вас Android, можно поставить приложение например MacroDroid или NFC ReTag. В них можно назначать примерно такие же действия на NFC-теги. Включать/выключать Wi-Fi и звонок, запускать приложения, включать ночной режим. Например, можно сделать так, что когда вы кладете телефон на карту «Тройка», у вас автоматом открывается канал Droider. Рекомендую!
Кстати вот так выглядит содержимое «Тройки».
Для чего еще может использоваться NFC?
Одна из перспективных штук — электронные билеты. В кино или на концерты. Сейчас это делают через QR-код и это не так круто, на мой взгляд. Хотя миллионы китайцев со мной не согласятся.
Про Apple
Что делать, если у вас iPhone? Все думают, что доступ к NFC закрыт на iPhone, но это не так. Начиная с iOS 11, то есть с 2017 года Apple открыла доступ для разработчиков. И уже есть множество приложух таких же как на Android. Например, NFC Tools.
Правда там остаются ограничения: транспортные и банковские карты, например, не сканируются. Нужны специальные метки, о которых мы уже говорили.
Что делать? В iOS 13 появилась Функция Команды (Siri). И вот она как раз имеет доступ к любым NFC-меткам. Так что тут можно настроить запуск музыки по карте «Тройка». Или включить умную лампочку. Или еще кучу всего. Команды — реально бомбическая штука. Не понимаю, почему в Android такого до сих пор нет.
Зарядка
Если к этому моменты вы решили, что все знаете об NFC и устали от этих унылых применений. То вот вам кое-что бомбическое.
Есть такая организация NFC Forum, которая сертифицирует NFC. Вообще у каждой технологии есть такая организация, и хорошо если она одна.
И вот на днях они выложили очередной апдейт стандарта. И знаете что? Теперь NFC поддерживает беспроводную зарядку. Да, по сути, это четвёртый режим работы.
Как спросите вы? Электромагнитная индукция, помните? При помощи нее.
К слову Qi-зарядка работает точно по такому же принципу. Только там катушка побольше.
Но есть одна проблема. Катушка у NFC маленькая, а значит и мощность зарядки маленькая — всего 1 Ватт.
Можно ли зарядить смартфон с такой скоростью? Не стоит даже пробовать. Впрочем, функцию для этого и не придумывали.
Основное назначение ровно противоположное — зарядка смартфоном других устройств. Это вроде реверсивной зарядки в Galaxy и других смартфонах. Например, можно подпитать сами беспроводные наушники, а не кейс от них. По сути, перед нами очень дешевая беспроводная зарядка, которая есть в любом смартфоне и которую легко вставить в любое умное устройство.
Кстати 1 Ватт это не то чтобы слишком мало. Для сравнения со всеми iPhone кроме 11 Pro, кладут 5-ваттную зарядку. А мощность обратной беспроводной зарядки в современных флагманах колеблется на отметке 5 или 7 Вт.
Но есть одно но — на текущих моделях эта фича не заработает. Смартфоны с с такой фишкой скорее всего начнут появляться через год-полтора. Так что ждите рекламу этой штуки от Samsung.
Бонус для тех, кто дочитал
Читайте также: