- Что делать если в смартфоне нет nfc
- Nfc в скуд: возможности и преимущества
- Виды меток nfc
- Для чего создана nfc
- Зачем нужны nfc метки ?
- Как запрограммировать nfc метки
- Как использовать?
- Карта «тройка» как идентификатор
- Контроллер борей
- Копирование ключа от домофона на смартфон. возможно ли?
- Копируем ключ от домофона miifare телефоном mct
- Метим территорию
- Обработка pdol (processing options data object list)
- Принцип работы
- Разновидности
- Старт платежного приложения — select aid
- Читаем emv-карты на коленке
- Начало коммуникации — команда select (ppse)
- Старт платежного приложения — select aid
- Обработка pdol (processing options data object list)
- Поиск pan-номера
Что делать если в смартфоне нет nfc
Если в мобильнике нет НФС, то попробуйте встроить модуль собственноручно. Поможет:
- Специальная сим-карта. При помощи симки невозможно открывать двери, даже если домофон с NFC, но зато есть поддержка быстрых платежей.
- Внешняя антенна. Таковая легко встраивается под крышку телефона, около аккумулятора. Подходит лишь для тех смартфонов, у которых разбирается корпус.
- Метка НФС. Метки крепятся в любых местах. Они занимают минимум места и программируются на различные задачи. Чтобы управлять ею, потребуется специальное приложение.
Названные устройства продаются в салонах связи. К ним прилагается инструкция по подключению и установке.
Внимание! Если открывание дверей смартфоном для вас не принципиально, то приобретите специальный брелок, браслет или кольцо с НФС. Такие аксессуары также способны помочь в осуществлении задуманного.
Nfc в скуд: возможности и преимущества
Любое устройство NFC возможно применять в СКУД как:
- Идентификатор. То есть позволено использовать имеющийся у каждого сотрудника телефон в качестве карты доступа;
- NFC считыватель для СКУД — это означает, что с помощью какого-то смартфона возможно осуществлять контроль доступа.
Что дает использование устройства NFC в СКУД:
- возможность создавать эффективные системы безопасности на производстве, в офисе и тд;
- возможность создавать мобильные системы контроля. Например, для допуска в корпоративный транспорт, контроля сотрудников, работающих удаленно (строителей, геологов, прочих);
- возможность создания мобильного КПП, к примеру, контроль доступа NFC устройствами удобно выполнять на любом удаленном объекте (складе, стройке), когда сотрудники попадают на территорию организации используя корпоративный, личный транспорт;
- возможность осуществлять контроль доступа в конкретные помещения;
- экономию средств — NFC пропуск на работу позволит сберечь деньги на покупке карт доступа, так как их не будет необходимости приобретать, персонализировать. NFC считыватель для СКУД также дает возможность сэкономить, особенно, если терминалов требуется несколько.
Телефон с NFC как карта доступа может использоваться одновременно в нескольких системах контроля. К примеру, для доступа на территорию разных организаций или удаленных филиалов, объектов.
Кроме того, использовать технологию NFC в СКУД просто удобно. Например, когда происходит плановая, внеплановая смена паролей, то присутствие сотрудника вместе с его смартфоном – процедура необязательная. Это особенно важно, когда осуществляется срочная процедура или блокировка доступа.
Для работника NFC эмулятор пропуска удобен тем, что он может служить как дубликат магнитного пропуска. Это значит – в случае потери карты проблем с контролем не возникнет. Кроме того, такое решение практичное, причина: смартфон всегда под рукой, его удобней доставать, не нужно искать, в отличие от карт, к которым сотрудники, после окончания рабочего дня, нередко относятся халатно.

Виды меток nfc
С самой технологией всё более менее понятно. Тогда зачем столько видов меток предлагается производителями? Почему одни стоят дешевле, а другие в 2-3 раза дороже? Давайте разберемся!
Стандартом ISO 14443A описывается 4 вида меток, ещё одна описывается стандартом ISO 18092:
| Тип | Стандарт | Память | Скорость обмена | Записьчтение | Защита от коллизий |
| 1 | ISO14443A | 96б-2кб | 106кб/с | да | нет |
| 2 | ISO14443A | 96б-2кб | 106кб/с | да | да |
| 3 | ISO18092 | 96б-2кб | 212кб/с | да | да |
| 4 | ISO14443A | 2/4/8кб | до 424кб/с | да | да |
| 5 | ISO14443A | до 4кб | 106кб/с | да | да |
- Тип 1 – ранняя разработка, слабо распространен из-за отсутствия защиты от коллизий.
Для справки: коллизии возникают при одновременной передаче данных двумя источниками.
- Тип 2 – уже поинтереснее, но всё еще не имеет шифрования.
- Тип 3 – интересен тем, что поддерживает шифрование данных, но сильно дороже.
- Тип 4 – имеет увеличенное количество памяти, что позволяет сохранить больше данных.
Наиболее распространенным является тип 5 – Mifare Classic tag, компании NXP Semiconductors.Наиболее распространенным является тип 5 – Mifare Classic tag, компании NXP Semiconductors.
Он наиболее выгоден по балансу цена-качество.
Кроме отличий в технологии исполнения, метки имеют разные форму и размеры. Чаще всего они продаются в форме простых наклеек с тематическим рисунком.
Если же вариантов рисунков недостаточно, то в продаже можно найти чистые, полностью белые наклейки. Их можно раскрасить под себя или же использовать технологию фотопечати, для нанесения нужной картинки.
В форме наклеек метку можно приклеить в любое удобное место:
- книгу;
- журнал;
- крышку ноутбука;
- wifi роутер;
- торпеду авто;
- мебель.
Метки в таком формате имеют защиту от влаги, а для улицы есть термостойкие метки с режимами -10oС 60oС.
Альтернативный формат – брелок в пластиковом корпусе. Этот вариант позволяет носить метку в кармане, не беспокоясь за ее целостность.
Для чего создана nfc
Что такое NFC-метка простыми словами – небольшая круглая антенна в виде стикера, немного толще обычного бумажного листа. Имеет гибкую основу и небольшой диаметр около 25 мм, что позволяет ее удобно зафиксировать практически в любом месте. Микрочип представляет собой пассивную наклейку для бесконтактной коммуникации, которой не требуется подзарядка или энергия для производительной работы, так как она не способна передавать информацию.
Для использования меток и программирования на них необходимой информации, с последующим считыванием необходимо мобильное устройство (смартфон, айфон) с предустановленным NFC-чипом. Для того чтоб запрограммировать наклейку-микрочип необходимо установить на гаджет специальную программу.
Действие микрочипа очень простое. Пользователь подносит смартфон к метке на расстоянии до 5 см, синхронизация между устройствами происходит около 0,1 сек., и действие, на которое был запрограммирован чип, мгновенно запускается. Например, запрограммировать мобильный гаджет на быстрый отклик для изменения режима работы в зависимости от места положения пользователя, что позволит значительно экономить заряд батареи.
Комфортней всего пользоваться метками в виде стикеров, стоят они дешево, но для того чтоб их приобрести придется обратиться к торговой онлайн площадке AliExpress. Именно на этом сервисе предлагается большой выбор разных самоклеящихся чипов. Продаются они целыми комплектами из 6 или 10 штук, с разным рисунком. Ценовая категория начинается от суммы 220 рублей.
Зачем нужны nfc метки ?
Когда в 2004 году Philips, Sony и Nokia создали свой NFC forum, данная технология была известна разве что в среде увлеченных технарей. Три кита электронной индустрии ставили своей целью исследование, продвижение, ну и конечно, коммерческую прибыль от внедрения новой технологии бесконтактной передачи данных. Но большого прогресса они не достигли – все их достижения казались не более, чем игрушкой.
Для справки: NFC (от англ. Near Field Communication) – технология передачи данных на очень близком расстоянии, порядка 5-10 см. Является разновидностью технологии RFID – радиочастотной идентификации.
В 2021 к ним присоединяется Google и вот тогда начинается настоящий расцвет технологии, ведь NFC чипы стали поставляться с большинством смартфонов под Android. Пользователи сразу же оценили удобство и безопасность Google Pay – не нужно вводить всем надоевшие пароли; считывание карт происходило быстро и без ошибок.
Но это было только начало, ведь новая технология позволяет обмениваться генерируемыми на лету данными, в отличие от RFID, где данные прошиваются один раз и навсегда.
“NFC – это просто приветственное рукопожатие”, – говорит Рэй Хартьен из компании Sony – “Потоковая передача данных идет уже через Bluetooth”. А NFC технологии позволяют обойтись без необходимой проверки безопасности соединения.
Сама технология полностью безопасна для человека, так как использует безопасную частоту 13.56 МГц. А из-за небольшой дальности действия, уровень магнитного излучения очень мал.
Как запрограммировать nfc метки
Пользователям, заинтересовавшимся уникальной технологией, рекомендуется ознакомиться с курсом самостоятельного программирования NFC-меток. Не стоит думать, что это сложно и идти к профессионалам, все довольно просто. В этом поможет установка специальной программы, своеобразного менеджера задач для работы с NFC-чипами. Лучше всего для этого подойдет смартфон на базе ОС Android.
Программирование чипа и его настройка происходит по следующему принципу:
- Зафиксировать микро-стикер к основному месту использования.
- Открыть Google Market Play, авторизоваться в системе.
- Выбрать подходящее приложение: TagWriter, Trigger, NFC Tools, NFC Tasks.
- Произвести полноценную установку на устройство.
- Открыть программу и создать необходимую задачу для заранее зафиксированного чипа-стикера.
- Поднести смартфон к стикеру, проверить отклик.
Важно! Перед запуском и программированием «умных» стикеров убедитесь, что на телефоне активирован NFC-модуль. Запустить его работу можно через меню настроек.
Метки для телефона однозначно имеют превосходное преимущество по сравнению с другими беспроводными Hi-tech разработками. Преимуществом выступает небольшая ценовая категория продукта, а также широкий спектр применения в быстром выполнении повседневных задач.
Как использовать?
Пора применить полученные знания на практике! Ниже вы найдете несколько идей, как можно применить эту современную технологию.
- Поделится своими контактами – например так: прикрепить метку на лобовое стекло, теперь, если машина мешает выезду, можно отправить смс или позвонить.
- Цифровая визитка своими руками – к обычной визитке клеим нашу метку, теперь наши деловые партнеры могут перенести наш контакт в записную книжку телефона одним касанием.
- Пароль от домашнего Wi-Fi. Клеим метку на роутер и записываем в него пароль с помощью приложения InstaWifi. Теперь ваши гости смогут подключится к вашему Wifi роутеру просто прикоснувшись к метке.
- Запуск синхронизации смартфона с домашним компьютером. Метку можно приклеить на ноутбук или системный блок и прописать в него запуск приложения для синхронизации данных.
- Передать адрес встречи в Гугл Картах – нет нужды записывать, переносить текст в смс, просто создаем место в Гугл Картах у себя на телефоне и записываем на специальную метку в офисе. Каждый сотрудник считывает ее в удобное для себя время.
- Включение точки доступа. Клеим рядом с ноутбуком метку, далее устанавливаем приложение Trigger. Добавим новое задание, в качестве триггера выбираем NFC, выбор ограничений оставляем по умолчанию, в качестве действия выбираем “Беспроводные и локальные сети -> Wifi-зона”,а на последнем экране подносим к NFC-метке. В результате, если вы выходите с ноутбуком за пределы работы вашего Wifi роутера, то прикоснитесь к метке и ваш смартфон переключится в режим точки доступа, а ноутбук продолжит получать доступ к интернету.
- Включение ночного режима. TagWriter настраиваем на включение бесшумного режима. Теперь, как только вы поднесёте смартфон к этой метке, звуки уведомлений отключатся и ничто не потревожит ваш сон. А ещё одну метку сделайте для отключения бесшумного режима, чтобы утром ваш смартфон вернулся в исходное состояние.
- Автоматизируйте свой авто. Используйте метку в автомобиле для включения Bluetooth, 3G, запуска плеера или GPS навигатора. Теперь вы
- На рынке постепенно появляются устройства, поддерживающие NFC, — стереосистемы, телевизоры, которые позволяют создавать пару с телефоном или планшетом для удалённого управления.
- В сфере управления материально-техническими ресурсами можно использовать NDEF записи для хранения информации о месте отправления товаров, об их прохождении различных промежуточных пунктов и тому подобном.
- Управление освещением. Производитель чипов NXP объединился со специалистами по созданию умного дома EnOcean. На выставке CES 2021 они показали продукт, который использует NFC для настройки и добавления элементов освещения в домашнюю сеть.
- Замки, использующие NFC-карты вместо ключа, довольно часто встречаются на Западе, но если в вашем офисе есть электронные пропуска, то можно записать информацию с них в Google Pay и пользоваться смартфоном. Цена таких замков в магазинах не превышает 200 долларов, а комбинированные замки и того дешевле. Метки можно записывать в телефон, в специальное NFC-кольцо, в брелок – в общем, тиражировать для кого надо.
- В домашней библиотеке. Создать подробное описание каждой книги, а на корешок прикрепить аккуратную метку NFC. Теперь можно получить информацию о книге не вынимая ее из полки и не листая описание.
Карта «тройка» как идентификатор
Карта «Тройка» — пополняемая карта для оплаты проезда на всех видах общественного транспорта Москвы. Это наиболее выгодный и удобный способ оплаты общественного транспорта и некоторых городских услуг: планетарий, каток, зоопарки, Третьяковская галерея, парковка.
Технически карта выполнена на базе чипа Mifare Plus, работающего в режиме SL1 — режим эмуляции Mifare Classic 1K. На обратной стороне карты находится 10-значный номер, который используется для удаленного пополнения баланса карты. Этот номер удобно использовать в качестве идентификатора в СКУД.
Номер карты «Тройка», записан в памяти карты в 32-м блоке 8-го сектора. Для чтения защищенной области памяти необходим шестибайтный ключ, который давно не является таким уж секретным.
Номер карты «Тройка» (не путать c UID чипа) хранится в защищенной памяти в блоке 32 со второго байта по младшие четыре бита седьмого байта. Для чтения этой области памяти необходим А-ключ от сектора 8. Эти ключи давно не являются секретом и легко находятся в интернете вместе с подробным описанием формата хранения данных.
Таким образом, для занесения нового пропуска в базу данных достаточно визуально считать номер карты и сообщить его администратору. Это можно сделать даже удаленно.
Вопросы безопасности такого подхода рассматриваются в FAQ в конце статьи. Примеры кода для чтения номера карты Тройка с помощью Arduino есть в главе «Первый прототип».
В Санкт-Петербурге существует похожая карта «Подорожник». При необходимости её можно также использовать в качестве идентификатора, одновременно с картой «Тройка».
Контроллер борей
Контроллер — это устройство, на которое передается идентификатор карты от считывателя. Оно хранит базу данных идентификаторов карт и решает, кого пропускать, а кого нет, управляя замком двери.
Часто контроллеры СКУД состоят из нескольких блоков управления и компьютера с базой данных. Мы принципиально не хотели держать отдельный компьютер и искали компактное решение в виде одного устройства, которым можно управлять через API для интеграции с Telegram-ботом.
Поиск такого устройства занял больше месяца, пока я не наткнулся на старую статью на хабре «Обзор СКУД с бесплатным программным обеспечением». В комментариях пользователь rgmih упомянул, что их компания производит именно такой контроллер.
Так мы нашли контроллер БОРЕЙ от компании ИТРИУМ.

Плата контроллера БОРЕЙ в настенном корпусе
Устройство работает под управлением Linux на базе ARM-процессора.
Основные достоинства устройства, которые редко можно встретить у других контроллеров:
В момент считывания карты, считыватель передает прочитанный идентификатор карты на контроллер по протоколу Wiegand. Контроллер ищет идентификатор в своей базе данных и решает, можно ли этому идентификатору открывать дверь или нет.
Если можно, контроллер размыкает реле магнитного замка на двери и посылает сигнал световой и звукой индикации на считыватель. Считыватель издает одобрительный писк и загорается зеленым цветом.
Если доступ запрещен, контроллер посылает сигнал индикации на считыватель, и тот горит красным цветом и пищит о том, что доступ не разрешен.
Копирование ключа от домофона на смартфон. возможно ли?
Аморфофаллус коньяк (конжак) — это азиатское растение, содержащее водорастворимые волокна, обладающие высокой способностью поглощения жидкостей. Эти волокна называются глюкоманнан. В контакте с водой они набухают и образуют густой гель, который заполняет пищеварительную систему и создает ощущение сытости. Обычно такая штука продается как БАДы для похудения.
Конжак в этой колбасной истории выступает как загуститель. В нем ничего плохого нет.
Вскроем колбасу
Я решил оставить колбасу и в дальнейшем пожарить с ней яичницу на завтрак, ибо выкидывать было жалко.
Кстати, стоимость такой штуки около 350 рублей (точно не помню уже).
Убрал в колбасу в холодильник, а потом меня осенило! В составе ведь полно воды и масла (первые два места в составе). Как работает конжак в роли загустителя я не знаю, так как никогда с ним не встречался. А других загустителей и стабилизаторов нет. Что будет, если нагреть колбасу? Держит ли конжак температуру?
Решил проверить. Отрезал кусок и закинул в микроволновку на 20 секунд… Вот теперь думаю, что делать с этой вроде бы как и съедобной, но не жаребельной колбасой… Есть ее чистоганом не вкусно, жарить нельзя, выкинуть жалко, кошка отказалась, пусть лежит, может сварю из нее суп, раз она такая размазня.
Копируем ключ от домофона miifare телефоном mct
Продолжаем тему постов про rfid.
Когда нибудь напишу объёмный пост, где постараюсь систематизировать знания. Там будет много теории и практической информации. А пока встречайте мини пост про приложение MIFARE Classic Tool. В недавнем посте про сниффер, случился такой диалог в комментариях.
Копировальщик mifare 1k / сниффер
Товарищ @2ch.ru купил штуку под названием arc122 для считывания и записи mifare. И по ошибке подумал, что оно считало зашифрованный ключ. На скрине в переписке я показал ему, что домофонный ключ был без защиты. Ключ Б всех секторов стоит дефолтный FFFFFFFFFFFF. А значит, чтобы прочитать метку, достаточно иметь телефон с NFC на андроид. Записать тоже можно, но нужна болванка, я называю их MCT, в честь приложения. Не путать с classic и zero.
Герой этого поста — приложение, которым я читаю и пишу основную массу ключей.
READ — чтение меток. Там мы можем выбрать какие читать сектора и какие ключи для этого использовать.
Extended-std.keys это расширенный список стандартных ключей. Std.keys короткий список. Если ключ прочитан, на экране отображается его содержимое , либо полностью, либо частично. Мы можем добавить свои библиотеки или ключи от конкретной метки в другом меню, а здесь выбрать нужный список.
Здесь же можно сохранить его в память и отредактировать, чтобы потом не имея оригинала, делать дубликаты.
Следующий пункт WRITE — запись.
Здесь мы можем записать ключ поблочно. Либо полностью залить дамп. Можем клонировать uid — актуально для ключей домру. И ещё пара неиспользуемых мной функций. Есть хитрость, не всегда метка полностью записывается функцией запись дампа. Обычно проблемы с 0 блоком 0 сектора, где хранится uid. Эта проблема касается заготовок MCT (zero перезаписать в этом приложении не выйдет, вернее его нулевой блок нулевого сектора). В таком случае нам нужно записать поблочно информацию из нулевого блока нулевого сектора нашего дампа на нашу болванку. И все, ключ полностью идентичен. Проверим это функцией чтения. У основной массы меток, достаточно сверить 0 блок 0 сектора и 3 блок 0 сектора. Если это последние домофоны метаком, то имеет смысл обратить внимание на 14 сектор.
Следующие два пункта главного меню позволяют нам редактировать дампы и ключи. Мы можем сами создавать файлы с ключами, чтобы считать зашифрованную метку. Можем импортировать все ключи из файла с дампом. Можем делать резервные копии и импортировать дампы в другие форматы, поддерживаемые другими приложениями или proxmark3. Можем сравнить два дампа, иногда бывает очень полезно.
Допустим у нас есть метка домру , где авторизация идёт максимально тупо, по uid. Берём телефон, прикладываем сзади метку, и считываем ключ используя стандартные ключи (или не стандартные, не так много их через меня прошло). Сохраняем дамп. Берём заготовку, и делаем запись дампа. Либо просто 0 блока 0 сектора, если пароль стоит дефолтный FFF… Если при записи дампа последний не записался, то сделать это вручную. Все, ключ готов. Поздравляю, вы сэкономили 300 рублей и получили моральное удовлетворение от того, что сделали это своими руками.
Казалось бы, ситуация простая, решение тоже. Но как оказывается, люди не очень знают об этом приложении и не умеют пользоваться им. Ещё оно удобно, для проверки стандарта ключа. Если приложив метку, мы сможем считать uid функцией display tag info из настроек, то у нас mifare на частоте 13.56 МГц. Кстати, mifare тоже бывают разные, на 1k свет клином не сошелся. Возможно напишу об этом позже.
Предыдущие почты на тему rfid:
Копировальщик ключей домофона
Делаем ключ 3 в 1 (шлагбаум, домофон и калитка)
Проект компактного копировальщика ключей EM/Ibutton
Ключ от домофона EM-MARINE 2 в 1
Копировальщик mifare 1k / сниффер
Спасибо за внимание, плюсики и подписки. Мой контакт в профиле. Пишите, что ещё вам интересно касаемо темы rfid и других. Задавайте вопросы и комментируйте. Ваша активность это основной мотиватор для продолжения.
P.S. утром перечитал пост и исправил ошибки, где то дополнил. Глянул статистику и удивился. 22к просмотров. Около 1% просмотревших поставили плюсы. Около 2% сохранили пост. И около 15 человек оставили комментарии. Интересно и странно. Ну да ладно.
Метим территорию
Итак, наш план действий: научить смарфтон реагировать определенным образом на определенную же метку NFC. У каждой метки есть идентификатор. Гаджет должен опознать его и выполнить «запрограммированные» действия. Чтобы привязать действия к ID метки нам понадобится одно из подходящих приложений — например, NFC ReTag Free.
ШАГ 1. Качаем из магазина, запускаем. Подносим нашу метку — в данном случае транспортную карту. Приложение опознает ее и сообщает нам идентификатор.
ШАГ 2. Даем метке более понятное обозначение. Жмем на зеленую кнопку «Действия» и видим список действий, которые можем привязать к этой метке.
Тут много всего интересного — запуск приложений, включение Wi-Fi, изменение громкости сигнала, звонок на определенный номер…
ШАГ 3. Выбираем для примера запуск Яндекс.Навигатора.
ШАГ 3. Выбираем для примера запуск Яндекс.Навигатора.ШАГ 4. Ждем кнопку ОК — собственно, все готово. Проверяем результат. Подносим разблокированный смартфон к транспортной карте, и вуаля: навигатор запускается автоматически. Мы взяли самую «доступную» метку NFC, но можно купить и более практичную, в форме наклейки. Такую можно наклеить, например, на держатель для смартфона в автомобиле — установите в него гаджет, и навигатор загрузится автоматически.
Обработка pdol (processing options data object list)
В ответ на запуск платежного приложения карта может затребовать от считывателя PDOL (Processing Options Data Object List). Это набор параметров POS-терминала — поддерживаемые протоколы и стандарты, валюта, в которой будет производиться расчет, дата, случайное число для криптографии, и так далее.
Список PDOL может различаться у разных карт. Общее число параметров PDOL — несколько десятков. Полный список параметров PDOL можно посмотреть здесь: eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags.Сложность состоит в том, что список PDOL у разных карт, даже выпущенных одним банком в разное время, может существенно различаться. Некоторые карты запрашивают два-три параметра, другие — десяток.
Это очень важный момент, так как некоторые карты могут отказаться работать без корректного ответа PDOL. Поэтому, для получения PAN-номера от всех карт, нам придется прикинуться настоящим POS-терминалом. Напомню, что единственной нашей целью является получения PAN-номера. Поэтому попытаемся сформировать максимально простой, но при этом корректный ответ PDOL.
Ответ карты на старт платежного приложения. Содержит запрос PDOL.
'6F 31 84 07 A0 00 00 00 03 10 10 A5 26 9F 38 18 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 BF 0C 08 9F 5A 05 60 08 40 06 43 90 00'Пропустим этот ответ через
Видно, что значение PDOL начинается с маркера 9F38 и равно 9F66049F02069F03069F1A0295055F2A029A039C019F3704. Парсер emvlab.org не умеет парсить значения PDOL, поэтому воспользуемся программой для Android-смартфонов Credit Card Reader.
Вот тот же ответ, обработанный более умным парсером. Видно каждый параметр PDOL:
Данный парсер не скрывает байт длины после маркера, как это делает emvlab.org. Поэтому последний байт каждого маркера следует читать как длину.
Разберем запрос PDOL подробнее
9F 38 18 // Маркер начала PDOL. Длина 18 (24 байта) 9F 66 (длина 04) // Terminal Transaction Qualifiers (TTQ). Параметры платежного терминала 9F 02 (длина 06) // Сумма списания 9F 03 (длина 06) // вторая сумма 9F 1A (длина 02) // Код странцы в формате ISO3166-1 95 (длина 05) // Terminal Verification Results 5F 2A (длина 02) // Код валюты, в которой работает терминал, в формате ISO4217 9A (длина 03) // Дата в формате YYMMDD 9C (длина 01) // Тип транзакции 9F 37 (длина 04) // Случайное число для криптографииПодробное описание всех возможных параметров PDOL можно найти в
Карта ожидает ответ на PDOL в том же порядке, в котором следуют запросы, и ровно той длины, которая указана после каждого параметра PDOL. Если сложить длину всех параметров (последний байт каждого параметра), получится 33 байта. Значит карта ожидает от считывателя PDOL длиной в 33 байта.
Так как мы не собираемся списывать с карты деньги, наша задача — сформировать самый простой из возможных ответ PDOL, который удовлетворит карту. Если наш ответ не понравится карте, она ответит кодом 6985 Conditions of use not satisfied.
Экспериментальным путем я выяснил, что почти на все запросы PDOL можно ответить нолями, кроме Terminal Transaction Qualifiers (TTQ). В случае с VISA, нам нужно убедить карту в том, что терминал соответствует спецификации VCPS 2.1.1. Для этого ответ на TTQ должен выглядеть так:
'F0 00 00 00'Подробнее про формат TTQ
Карты MasterCard, которые мне довелось испытать, позволяли игнорировать PDOL и отдавали PAN-номер без корректного ответа на PDOL.
Вот как будет выглядеть минимальный рабочий ответ на запрошенный выше PDOL:
'80A80000238321F0000000000000000000000000000000000000000000000000000000000000000000' 80 A8 00 00 // Команда GET PROCESSING OPTIONS (GPO) 23 // длина всего запроса (35 байт) 83 // маркер PDOL-ответ 21 // длина PDOL-ответа (33 байта) F0 00 00 00 // Terminal Transaction Qualifiers (TTQ) 00 00 00 00 00 00 // Сумма списания 00 00 00 00 00 00 // Вторая сумма 00 00 // Код страны считывателя 00 00 00 00 00 // Terminal Verification Results (TVR) 00 00 // Валюта 00 00 00 // дата 00 // тип транзакции 00 00 00 00 // Случайное число Если наш ответ удовлетворил карту, мы получим сообщение, начинающееся с маркера
77
с кодом SW2=9000. Этот ответ может содержать нужный нам PAN-номер, а может и не содержать. (офигеть)
Принцип работы
Если кратко, то, как и в пассивных RFID-чипах, NFC использует:
- антенну;
- блок безопасности.
Антенна передает информацию между меткой и считывающим устройством.
Также при помощи антенны происходит питание микрочипов внутри NFC-метки.
Для справки: Используется принцип электромагнитной индукции – при считывании информации в специальной антенне смартфона генерируется магнитное поле. Такое же поле возникает в антенне самой метки, а от него возникает электрический ток, силы которого достаточно для питания микрочипов.
Блок безопасности состоит из набора микросхем, часть из которых хранит пользовательские данные, а другая занимается расшифровкой сигнала, считыванием и записью информации.
Блок безопасности может быть, как физическим устройством – конкретными чипами на NFC-метке, так и эмулироваться программными средствами, как в случае с PDA – смартфонами, КПК, смарт часами и другими портативными устройствами.
В целом устройство напоминает микрокомпьютер – тут даже есть свой процессор и оперативная память.
Благодаря своей конструкции NFC-метка не требует питания, стоит дешево и позволяет перепрограммировать себя под разные задачи. Но есть и ограничение – для организации обмена данными нужен хотя бы один активный контроллер NFC.
Разновидности
Вниманию потребителя представлено четыре категории микроскопических тэгов. Разделяют их по объемам памяти и скоростному режиму пересылки сведений.
Для удобства предлагается изучить таблицу:
| категория | 1 | 2 | 3 | 4 |
| запас памяти | 48Б | 2Кб | 20Кб | 32Кб |
| скоростной режим пересылки сведений | 106 Кб | 106 Кб | 212 Кб | 424 Кб |
Обращаем внимание, что две первых категории чипов относят к моделям с возможностью перезаписи, средний расчет таких циклов – до 100 000. Две оставшихся категории защищены от подобной процедуры.
С первого взгляда скоростной режим пересылки сведений даже для самой сильной метки четвертой разновидности покажется небольшим. Но они прекрасно справляются со своим предназначением, никогда не подводят потребителей. Метки гарантируют скорость, высокую степень надежности и полную безопасность сохранения заложенных в них программ.
Прежде, чем приобрести микрочип, рекомендуется в первую очередь учесть одну небольшую особенность – насколько метка совмещается с мобильным телефоном.
Дело в том, что НФС- метки делятся на две группы:
- универсальные – подходят к любому гаджету вне зависимости от установленной на нем операционной системы. К ним относятся NFC Ntag 203 (212, 213, 214, 215, 216);
- с ограничениями по совместимости.
Подробную информацию о совместимости телефонов и различными типами меток уточняйте на официальных сайтах изготовителя.
Старт платежного приложения — select aid
В ответ на SELECT PPSE карта должна вернуть FCI (File Control Information) со списком приложений, существующих на карте. Помимо платежных приложений (VISA, MasterCard, AmericanExpress) карта может содержать неплатежные приложения, используемые для других нужд.
Ответ карты VISA на SELECT PPSE
'6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00'Для удобства проанализируем ответ с помощью онлайн-парсера формата TVL
. Тот же ответ карты VISA, обработанный парсером:
Из всего этого нас интересует только идентификатор платежного приложения (AID). В данном случае, это значение A0000000031010, означающее Visa International.
AID помечается маркером 4F. Вторым битом после маркера следует длина данных, в нем содержащихся. Несмотря на то, что длина AID может варьироваться от 5 до 16 байт, в большинстве случаев она равна 7 байтам. Поэтому для простоты поиска AID в ответе, мы будем искать маркер 4F 07 и считать 7 байт после него как AID.
Такой подход очень примитивный и может не работать в случаях, если длина AID будет другой, но для нашей задачи это не важно, так мы скорее всего никогда не столкнемся с картами, отличными от Visa и MasterCard. Поэтому наш самодельный парсер PPSE-ответа можно упростить до такой логики: если ответ начинается с 6F, заканчивается на 90 00 и содержит внутри последовательность 4F 07, ответ считается корректным.
Полный список AID: eftlab.co.uk/knowledge-base/211-emv-aid-rid-pix
Некоторые популярные AID
A0000000031010 Visa International
A0000000032020 Visa International
A0000000041010 Mastercard International
A0000000043060 Mastercard International United States Maestro (Debit)
Получив значение AID, его нужно запустить командой SELECT. В данном случае мы запускаем приложение Visa International, полученное из ответа на PPSE SELECT
APDU-команда SELECT AID
'00 A4 04 00 07 A0 00 00 00 03 10 10' 00 A4 04 00 // команда select 07 // длина command data (7 байт) A0 00 00 00 03 10 10 // AID Visa InternationalЧитаем emv-карты на коленке
Читать EMV-карты можно любым NFC-ридером, поддерживающим передачу произвольных APDU-команд. Для этого не требуются промышленные сертифицированные ридеры, подойдет любой модуль для Arduino за $3
Чтобы изготовить прототип считывателя, мне потребовалось бегло изучить протокол EMV. Под спойлером — краткий разбор протокола EMV с примерами чтения на Arduino и компьютере.
Для чтения EMV карт подойдут такие устройства:
Описанный ниже процесс не является корректной реализацией протокола EMV. Приведенные команды APDU содержат ошибки и нарушают рекомендации EMVco, из-за чего могут не работать с некоторыми картами.
Для изучения протокола EMV рекомендуется читать официальную документацию, которую я, к своему стыду, почти не читал.
Приведенные APDU-команды будут одинаковыми не зависимо от выбранного оборудования. Однако в случае с PC/SC ридером не нужно заботиться о низкоуровневых командах, настраивать модуляцию и т.д.
Я буду использовать программу SmartCard Scripter, в связке с PC/SC-ридером HiD Omnikey. Программа SmartCard Scripter имеет наиболее компактный pascal-подобный синтаксис из всего что я видел. Краткое описание синтаксиса infintuary.org/scs_tut.php
Для того чтобы послать произвольную APDU команду на карту, достаточно такого когда:
// Программа для чтения UID карты
begin APDU('FF CA 00 00 00');
end.Начало коммуникации — команда select (ppse)
Официальное описание: EMV Contactless Specifications — PPSE and Application Management for Secure Element
Начало общения с EMV-картой всегда происходит с чтения файла PPSE (Payment System Environment) командой SELECT.
APDU-команда SELECT PPSE
'00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00' 00 A4 04 00 // команда select 0E // длина command data (14 байт) 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 // command data 2PAY.SYS.DDF01 00 // завершающий маркерСтарт платежного приложения — select aid
В ответ на SELECT PPSE карта должна вернуть FCI (File Control Information) со списком приложений, существующих на карте. Помимо платежных приложений (VISA, MasterCard, AmericanExpress) карта может содержать неплатежные приложения, используемые для других нужд.
Ответ карты VISA на SELECT PPSE
'6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00'Для удобства проанализируем ответ с помощью онлайн-парсера формата TVL
emvlab.org/tlvutils/
. Тот же ответ карты VISA, обработанный парсером:

Из всего этого нас интересует только идентификатор платежного приложения (AID). В данном случае, это значение A0000000031010, означающее Visa International.
AID помечается маркером 4F. Вторым битом после маркера следует длина данных, в нем содержащихся. Несмотря на то, что длина AID может варьироваться от 5 до 16 байт, в большинстве случаев она равна 7 байтам. Поэтому для простоты поиска AID в ответе, мы будем искать маркер 4F 07 и считать 7 байт после него как AID. Такой подход очень примитивный и может не работать в случаях, если длина AID будет другой, но для нашей задачи это не важно, так мы скорее всего никогда не столкнемся с картами, отличными от Visa и MasterCard. Поэтому наш самодельный парсер PPSE-ответа можно упростить до такой логики: если ответ начинается с 6F, заканчивается на 90 00 и содержит внутри последовательность 4F 07, ответ считается корректным.
Полный список AID: eftlab.co.uk/knowledge-base/211-emv-aid-rid-pix
Некоторые популярные AID
A0000000031010 Visa International
A0000000032020 Visa International
A0000000041010 Mastercard International
A0000000043060 Mastercard International United States Maestro (Debit)Получив значение AID, его нужно запустить командой SELECT. В данном случае мы запускаем приложение Visa International, полученное из ответа на PPSE SELECT
APDU-команда SELECT AID
'00 A4 04 00 07 A0 00 00 00 03 10 10' 00 A4 04 00 // команда select 07 // длина command data (7 байт) A0 00 00 00 03 10 10 // AID Visa InternationalОбработка pdol (processing options data object list)
В ответ на запуск платежного приложения карта может затребовать от считывателя PDOL (Processing Options Data Object List). Это набор параметров POS-терминала — поддерживаемые протоколы и стандарты, валюта, в которой будет производиться расчет, дата, случайное число для криптографии, и так далее.
Список PDOL может различаться у разных карт. Общее число параметров PDOL — несколько десятков. Полный список параметров PDOL можно посмотреть здесь: eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags.
Сложность состоит в том, что список PDOL у разных карт, даже выпущенных одним банком в разное время, может существенно различаться. Некоторые карты запрашивают два-три параметра, другие — десяток.
Это очень важный момент, так как некоторые карты могут отказаться работать без корректного ответа PDOL. Поэтому, для получения PAN-номера от всех карт, нам придется прикинуться настоящим POS-терминалом. Напомню, что единственной нашей целью является получения PAN-номера. Поэтому попытаемся сформировать максимально простой, но при этом корректный ответ PDOL.
Ответ карты на старт платежного приложения. Содержит запрос PDOL.
'6F 31 84 07 A0 00 00 00 03 10 10 A5 26 9F 38 18 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 BF 0C 08 9F 5A 05 60 08 40 06 43 90 00'Пропустим этот ответ через
парсер
:

Видно, что значение PDOL начинается с маркера 9F38 и равно 9F66049F02069F03069F1A0295055F2A029A039C019F3704. Парсер emvlab.org не умеет парсить значения PDOL, поэтому воспользуемся программой для Android-смартфонов Credit Card Reader.
Вот тот же ответ, обработанный более умным парсером. Видно каждый параметр PDOL:

Данный парсер не скрывает байт длины после маркера, как это делает emvlab.org. Поэтому последний байт каждого маркера следует читать как длину.
Разберем запрос PDOL подробнее
9F 38 18 // Маркер начала PDOL. Длина 18 (24 байта) 9F 66 (длина 04) // Terminal Transaction Qualifiers (TTQ). Параметры платежного терминала 9F 02 (длина 06) // Сумма списания 9F 03 (длина 06) // вторая сумма 9F 1A (длина 02) // Код странцы в формате ISO3166-1 95 (длина 05) // Terminal Verification Results 5F 2A (длина 02) // Код валюты, в которой работает терминал, в формате ISO4217 9A (длина 03) // Дата в формате YYMMDD 9C (длина 01) // Тип транзакции 9F 37 (длина 04) // Случайное число для криптографииПодробное описание всех возможных параметров PDOL можно найти в
EMV Contactless Specifications Book C-1/2/3 Kernel 1/2/3 Specification.
Карта ожидает ответ на PDOL в том же порядке, в котором следуют запросы, и ровно той длины, которая указана после каждого параметра PDOL. Если сложить длину всех параметров (последний байт каждого параметра), получится 33 байта. Значит карта ожидает от считывателя PDOL длиной в 33 байта.
Так как мы не собираемся списывать с карты деньги, наша задача — сформировать самый простой из возможных ответ PDOL, который удовлетворит карту. Если наш ответ не понравится карте, она ответит кодом 6985 Conditions of use not satisfied.
Экспериментальным путем я выяснил, что почти на все запросы PDOL можно ответить нолями, кроме Terminal Transaction Qualifiers (TTQ). В случае с VISA, нам нужно убедить карту в том, что терминал соответствует спецификации VCPS 2.1.1. Для этого ответ на TTQ должен выглядеть так:
'F0 00 00 00'Подробнее про формат TTQ
здесь
.
Карты MasterCard, которые мне довелось испытать, позволяли игнорировать PDOL и отдавали PAN-номер без корректного ответа на PDOL.
Вот как будет выглядеть минимальный рабочий ответ на запрошенный выше PDOL:
'80A80000238321F0000000000000000000000000000000000000000000000000000000000000000000' 80 A8 00 00 // Команда GET PROCESSING OPTIONS (GPO) 23 // длина всего запроса (35 байт) 83 // маркер PDOL-ответ 21 // длина PDOL-ответа (33 байта) F0 00 00 00 // Terminal Transaction Qualifiers (TTQ) 00 00 00 00 00 00 // Сумма списания 00 00 00 00 00 00 // Вторая сумма 00 00 // Код страны считывателя 00 00 00 00 00 // Terminal Verification Results (TVR) 00 00 // Валюта 00 00 00 // дата 00 // тип транзакции 00 00 00 00 // Случайное число Если наш ответ удовлетворил карту, мы получим сообщение, начинающееся с маркера
77
с кодом SW2=9000. Этот ответ может содержать нужный нам PAN-номер, а может и не содержать. (офигеть)
Поиск pan-номера
Так как нам лень писать полную имплементацию протокола EMV, разбирать все структуры ответов и формировать корректные запросы, мы поступим глупым способом, а именно пошлем все возможные запросы и будем просто искать в ответах нужный маркер, содержащий PAN-номер.
PAN-номер может содержаться в трех местах:
APDU-команды (что они значат вообще? Хз, нужно прочитать)
'00 b2 01 1c 00'
'00 b2 01 0c 00'
'00 b2 02 0c 00'
'00 b2 01 14 00'
'00 b2 02 14 00'
'00 b2 04 14 00'И парсим все ответы на предмет маркеров
57 13
либо
5A 08
. Найденные 8 байт карты можно дополнительно чекнуть на контрольную сумму с помощью
Алгоритма Луна
.
Если номер валидный, берем его последние десять цифр.
В итоге наш примитивный алгоритм чтения PAN-номера можно изобразить в виде блок-схемы






