Система доступа nfc iphone

Содержание
  1. Как включить настоящий NFC в вашем iPhone за 1 минуту
  2. Что мы сейчас сделаем, чтобы NFC работал как задумано
  3. Инструкция. Включаем подключение к наушникам и колонкам по NFC
  4. NFC Tools 4+
  5. Для чтения Ваших NFC-мето‪к‬
  6. wakdev
  7. Снимки экрана (iPhone)
  8. Описание
  9. Что нового
  10. Оценки и отзывы
  11. Read and writes NFC, but sometimes not from the first touch of tag
  12. Все пишется на мои NFC метки, но почти все может быть исполнено только на Андроиде
  13. Ответ разработчика ,
  14. Не работает !
  15. Ответ разработчика ,
  16. Конфиденциальность приложения
  17. Сбор данных не ведется
  18. Информация
  19. Используем Apple Pay и карту Тройка в качестве пропуска на работу
  20. Основные задачи системы
  21. Пожалуйста, не нужно больше карт!
  22. Все СКУД неудобные
  23. Карта «Тройка» как идентификатор
  24. Apple/Android Pay и банковские карты
  25. Читаем EMV-карты на коленке
  26. Начало коммуникации — команда SELECT (PPSE)
  27. Старт платежного приложения — SELECT AID
  28. Обработка PDOL (Processing Options Data Object List)
  29. Поиск PAN-номера
  30. Первый прототип
  31. Считыватель Parsec
  32. Ключевые особенности считывателя PNR-P03E
  33. Контроллер БОРЕЙ
  34. Управление контроллером
  35. Бюро пропусков в Telegram

Как включить настоящий NFC в вашем iPhone за 1 минуту

Сегодня расскажу, как сделать NFC в iPhone действительно полезным. Даже не так: мы его фактически включим.

В iPhone уже много лет как есть сам модуль, и он совершенно свободно используется системой для бесконтактной оплаты Apple Pay.

Но если попробуете подключить к айфону какой-нибудь аксессуар по NFC, вас ждёт разочарование. Точнее, ждало до последнего момента.

По умолчанию, iOS игнорирует NFC-метки в беспроводных наушниках и портативной акустике – те самые, что предназначены для быстрого подключения. А жаль, потому что это очень удобно: подносишь чехол наушников к айфону, и он автоматически подключается к твоим «затычкам».

Android так умеет с незапамятных времён, так чем мы хуже? Оказывается, почти ничем – благодаря Командам в iOS 13.

Порадовала позитивная реакция на предыдущий пост об автоматизации подключения AirPods к гаджетам Apple. Как ни крути, Команды в iOS 13 – реально мощный инструмент, изучение которого приносит ощутимую пользу.

Так что я решил не останавливаться и предложить вам кое-что покруче.

Что мы сейчас сделаем, чтобы NFC работал как задумано

Во многих хороших беспроводных наушниках и портативных колонках есть поддержка NFC. В 99% случаев она позволяет пропустить процедуру сопряжения через меню Bluetooth. Просто подносите смартфон к аксессуару – и готово.

Apple очень долго блокировала NFC в iPhone для любых целей, кроме Apple Pay, поэтому владельцы айфонов давно привыкли игнорировать фичу во всех аксессуарах. Теперь будем отвыкать.

Благодаря инструкции ниже и Командам iOS 13, вы сможете использовать NFC в наушниках и колонках, чтобы одним движением подключать айфон к ним без всяких Настроек и меню вообще.

Инструкция. Включаем подключение к наушникам и колонкам по NFC

Что нам понадобится:

▸ iPhone с iOS 13. iPad не подойдёт, iPod touch тоже, в них просто нет NFC

▸ беспроводные наушники или колонки с меткой NFC. Если в аксессуаре нет NFC-метки, не беда. Ей может служить даже ваша банковская карта, о чём я писал здесь

▸ 1 минута на настройку

▸ iPhone Xs или выше

Как понять, есть ли у вашего аксессуара NFC? Эмблема NFC нанесена на корпус аксессуара рядом или прямо над местом расположения метки. Для успешного сопряжения она должна быть направлена к задней панели смартфона. Дальность действия низка и составляет максимум пару сантиметров.

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

1. Открываем Команды и переходим на вкладку Автоматизации. Если случайно удалили, просто скачайте заново из App Store.

2. Нажимаем на + в правом верхнем углу или сразу выбираем Создать автоматизацию для себя.

3. В открывшемся списке пролистываем вниз до пункта NFC. Тапаем по Сканировать напротив Тег NFC.

4. Подносим ваши наушники или колонки тегом NFC к верхней части задней панели iPhone – там, где у него камера.

Ничего не происходит? Не делайте резких движений и задержите метку под айфоном хотя бы на секунду, прежде чем передвигать его. первичное распознавание метки в iOS 13 почему-то занимает намного дольше времени, чем будет требоваться после настройки.

Вы также можете использовать вообще любую метку NFC, не только ту, что встроена в ваши наушники или колонки. Помимо банковских карт, меткой может служить даже проходка из офиса или NFC-стикер с AliExpress. Таким образом, функцию быстрого подключения можно будет добавить к любой Bluetooth-акустике. Главное не потерять саму метку.

Как только айфон найдет метку аксессуара, то предложит назвать её. Пишите и продолжайте.

5. Теперь добавляем новое действие, которое будет выполняться, когда айфон находит эту метку NFC. Выбираем Скрипты, прокручиваем вниз и нажимаем Задать место воспроизведения.

Теперь жмите на надпись iPhone.

6. В открывшемся списке выбираем наушники или колонки, которые будут подключаться к айфону, когда вы подносите его к NFC-метке. В моём случае это наушники Sony WF-1000XM3.

Если в списке ничего нет, вы не подключили аксеcсуар к айфону заранее. Сделайте это и вернитесь к текущему пункту инструкции.

7. Мы почти закончили. Осталось только отключить параметр Спрашивать до запуска и подтвердить свой выбор.

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

В отличие от Android, айфон нельзя заставить подключаться к неизвестным (ранее несопряжённым) устройствам посредством только что созданной нами Автоматизации. Ждём iOS 14 и дальнейших послаблений для NFC со стороны Apple.

Источник

NFC Tools 4+

Для чтения Ваших NFC-мето‪к‬

wakdev

    • 4,0 • Оценок: 506
    • Бесплатно
    • Включает встроенные покупки

Снимки экрана (iPhone)

Описание

NFC Tools, позволит вам считывать и создавать собственные NFC-теги.

NFC Tools считывает и записывает Ваши NFC-метки через простой и удобный интерфейс.
Поднося своё устройства к NFC-метке, Вы можете считывать её содержимое и взаимодействовать с этими данными.

функция «Чтение» предоставляет Вам следующую информацию:

— производитель метки
— тип метки (например: Mifare Ultralight, NTAG213)
— стандарт метки (например: NFC Forum Type 2)
— технология (например: NFC A)
— серийный номер (например: 04:85:c8:5a:40:2b:80)
— размер метки и данные на ней
— возможны ли запись на метку
— все данные на метке (формат NDEF)

NFC Tools может записывать стандартную информацию, совместимую с любым NFC-устройством, на Ваши теги.
К примеру, Вы можете хранить запись VCARD и легко делиться своими контактами, открывать ссылки, передавать телефонные номера или местоположение.

функция «Запись» позволяет Вам записать стандартизированные данные, такие как:
— простой текст
— ссылка на веб-сайт
— адрес электронной почты
— контакт
— номер телефона
— заготовка текстового сообщения
— адрес или местоположение
— конфигурация Wi-Fi или Bluetooth
— персонализированные данные

Функция записи позволяет Вам добавлять любые данные, какие Вы только пожелаете.
Таким образом, Вы можете записывать самую разнообразную информацию на Вашу метку.

Также это приложение позволяет Вам сохранить содержимое Вашей метки для последующего доступа.

NFC Tools был протестирован со следующими NFC-метками:
— NTAG 203, 210, 210u, 212, 213, 213TT, 215, 216, 413 DNA, 424 DNA
— Ultralight, Ultralight C, Ultralight EV1
— ICODE SLI, SLI-S, SLIX, SLIX-S, SLIX-L, SLIX2, DNA
— DESFire EV1, EV2, EV3
— ST25TV, ST25TA
— Felica

Если у Вас возникли какие-либо проблемы, не стесняйтесь обращаться ко мне.

Примечания:
— Совместимо с iPhone 7 (и выше) и iOS 13.

Что нового

We work hard to provide you with a quality app, but you may run into problems we couldn’t anticipate.
If so, don’t panic, keep calm and feel free to contact us.

2.20:
— Added support for ICODE SLIX-S, ICODE SLIX-L and ICODE DNA chips
— Added a link to a list of compatible NFC chips
— Interface, translation improvements and bug fixes

Оценки и отзывы

Read and writes NFC, but sometimes not from the first touch of tag

Все пишется на мои NFC метки, но почти все может быть исполнено только на Андроиде

Дали покрутить Андроид, там была такая программа. Оказывается она есть и на Айфон. Но из за ограничений она не совсем полноценна. Заработало только при включении в настройках программы режима совместимости. У меня iPhone 11 с iOS 14, и метки с типом записи NFC Mifare Classic. Информация с них читается, но без подробностей, в отличии от версии для Андроида. И все пишется, но! Большинство записанных на NFC метку функций работают только на Андроиде. Например, я записал с помощью Айфона функцию для быстрого подключения к Wi-Fi сети. Но на самом Айфоне она не работает, на Андроиде же работает. 🤷🏻‍♂️ На Айфоне работают записанные ссылки на сайты, звонки по Face Time, а так же ссылки на исполнение уже созданных вами шорткатов в приложении Shortcuts. Все это работает не автоматически, а при чтении метки всплывает уведомление, и только при нажатии на него записанное исполняется. Скорее всего это сделано для безопасности. За дополнительную плату станут доступны функции сохранения созданных меток (если нужно, например, несколько одинаковых меток сделать в разное время), а так же копирования уже готовых меток (то есть подносите метку, и ее содержимое можно копировать). Ключи от домофона оно не копирует и не записывает — не надейтесь! ) В общем купил полную версию, чтобы поддержать разработчиков, и 5 баллов тоже поставлю, а то что-то занижают им оценку. Надеюсь, со временем полезных функций станет больше, хотя тут многое, как я понимаю, зависит от iOS, а не от разработчиков.

Ответ разработчика ,

You absolutely right! Thanks a lot for your support 🙂

Не работает !

Для чего создавать приложение для IPhone если компанией не предусмотрено чтение сторонних меток кроме APLLE ?!

Ответ разработчика ,

If you have any problem or question, please contact the support: https://sup­port.­wak­dev.­com

Конфиденциальность приложения

Разработчик wakdev указал, что в соответствии с политикой конфиденциальности приложения данные могут обрабатываться так, как описано ниже. Подробные сведения доступны в политике конфиденциальности разработчика.

Читайте также:  Айфон не реагирует кнопка home

Сбор данных не ведется

Разработчик не ведет сбор данных в этом приложении.

Конфиденциальные данные могут использоваться по-разному в зависимости от вашего возраста, задействованных функций или других факторов. Подробнее

Информация

русский, английский, испанский, итальянский, корейский, немецкий, польский, португальский, упрощенный китайский, французский, шведский, японский

Источник

Используем Apple Pay и карту Тройка в качестве пропуска на работу

TL;DR В статье описывается процесс создания системы контроля доступа (СКУД), в которой в качестве идентификатора могут использоваться карты Тройка, любые бесконтактные банковские карты EMV, а также телефоны с Apple Pay и Android Pay. Управление системой происходит через Telegram-бота.

Основные задачи системы

Пожалуйста, не нужно больше карт!

— У вас уже есть наша карта?
— Пощадите…

Сейчас каждый хочет всучить вам свою карту: магазины, фитнес-клубы, парковки, бизнес-центры, VIP-скидки-баллы-накопления. Предлагать человеку носить с собой еще одну карту просто унизительно. А учитывая, что карты стандарта EM-Marine (125kHz), которые популярны в системах контроля доступа на территории СНГ, имеют толщину в три раза больше обычных ISO 7810 — это втройне унизительно.
Поэтому первое требование к нашей системе — никаких дополнительных карт.

Сравнение толщины карт Em-Marine и ISO7810

Помимо физических размеров, карты EM-Marine технологически отсталые. Такую карту можно легко клонировать с расстояния полуметра прямо из кармана прохожего.

Видео с демонстрацией: www.youtube.com/watch?v=qvIIUny4EWI
На видео показано считывание тонкой карты em4100 с расстояния 50см, толстые карты читаются с большего расстояния.

Все СКУД неудобные

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

В некоторых случаях сложные СКУД необходимы: в крупных зданиях с множеством зон доступа, турникетами, охраной, временными пропусками.

В случаях, когда контролировать доступ нужно к одной или двум дверям, такие усложнения не оправданы. Даже содержание отдельного компьютера с программой под СКУД — перебор для нас.

У нас нет отдельных сотрудников, занимающихся выпуском пропусков, нет временных пропусков и охраны. Администрирование системы должно быть настолько простым, чтобы любой новый человек мог быстро её освоить без инструкций. Так как ответственного за СКУД человека может не быть на месте, управление системой должно быть удаленным.

Карта «Тройка» как идентификатор

Карта «Тройка» — пополняемая карта для оплаты проезда на всех видах общественного транспорта Москвы. Это наиболее выгодный и удобный способ оплаты общественного транспорта и некоторых городских услуг: планетарий, каток, зоопарки, Третьяковская галерея, парковка. Поэтому «Тройка» есть у каждого москвича, который регулярно пользуется общественным транспортом. Приобрести карту можно в кассах метрополитена за ≈1$.

Технически карта выполнена на базе чипа Mifare Plus, работающего в режиме SL1 — режим эмуляции Mifare Classic 1K. На обратной стороне карты находится 10-значный номер, который используется для удаленного пополнения баланса карты. Этот номер удобно использовать в качестве идентификатора в СКУД.

Номер карты «Тройка», записан в памяти карты в 32-м блоке 8-го сектора. Для чтения защищенной области памяти необходим шестибайтный ключ, который давно не является таким уж секретным.

Номер карты «Тройка» (не путать c UID чипа) хранится в защищенной памяти в блоке 32 со второго байта по младшие четыре бита седьмого байта. Для чтения этой области памяти необходим А-ключ от сектора 8. Эти ключи давно не являются секретом и легко находятся в интернете вместе с подробным описанием формата хранения данных. Так как мы не собираемся записывать никакие данные на карту, нам достаточно ключа А для чтения нужного сектора.

Таким образом, для занесения нового пропуска в базу данных достаточно визуально считать номер карты и сообщить его администратору. Это можно сделать даже удаленно.

Вопросы безопасности такого подхода рассматриваются в FAQ в конце статьи. Примеры кода для чтения номера карты Тройка с помощью Arduino есть в главе «Первый прототип».

В Санкт-Петербурге существует похожая карта «Подорожник». При необходимости её можно также использовать в качестве идентификатора, одновременно с картой «Тройка».

Apple/Android Pay и банковские карты

Платежные инструменты с разными названиями работают по одному протоколу EMV

Все платежные инструменты, изображенные на картинке выше, работают по одному протоколу EMV, свободно доступному на сайте EMVco.com. Поэтому говоря «EMV-карта», мы будем подразумевать одновременно Apple Pay, Android Pay, Samsung Pay, Visa PayWave, MasterCard PayPass.

Существует заблуждение, будто POS-терминал должен отдельно поддерживать Apple/Android Pay, поэтому пользователи предпочитают искать на кассе специальную пиктограмму, чтобы быть уверенным, что их платежный инструмент поддерживается. На самом деле, почти везде, где поддерживается бесконтактная оплата, будет работать любое устройство.

Бесконтактные EMV-карты (и контактные тоже) позволяют без авторизации, то есть без ввода PIN-кода, считать данные, обозначенные ниже. В последней главе мы рассмотрим, почему это достаточно безопасно.

Некоторые карты не передают реквизиты Cardholder Name и лог транзакций, но PAN (номер карты) передается всегда. Этот номер не изменяется на протяжении всего срока действия карты.

Поэтому именно PAN мы решили использовать в качестве идентификатора для пропуска в СКУД. Для простоты и большой приватности, было решено использовать последние 10 цифр от номера карты. Таким образом, формат идентификатора получается такой же длины, как и номер карты Тройка.

В итоге, в базе данных идентификаторов мы имеем однородные записи длинной в 10 цифр, без необходимости дополнительно помечать где карта Тройка, а где EMV-карта.

Читаем EMV-карты на коленке

Читать EMV-карты можно любым NFC-ридером, поддерживающим передачу произвольных APDU-команд. Для этого не требуются промышленные сертифицированные ридеры, подойдет любой модуль для Arduino за $3

Чтобы изготовить прототип считывателя, мне потребовалось бегло изучить протокол EMV. Под спойлером — краткий разбор протокола EMV с примерами чтения на Arduino и компьютере.

Для чтения EMV карт подойдут такие устройства:

  • PN532 breakout board + Arduino — pn532 лучше всего подключать к Arduino по SPI. Логические уровни чипа pn532 — 3.3V, поэтому удобнее использовать Arduino pro 3.3V, чтобы избавиться от конвертера уровней. Пример кода для чтения EMV-карт есть в моем форке библиотеки Adafruit PN532, c исправлениями для чтения EMV-карт.
  • PN532 breakout board + адаптер USB-TTL — плату PN532 можно подключать через UART-адаптер к компьютеру и пользоваться набором библиотек libnfc
  • Любой PC/SC-совместимый ридер — такие как ACR122U, HiD Omnikey и многие другие.
  • Android смартфон с NFC-модулем — бесплатная утилита Credit Card Reader позволяет читать EMV-карты телефоном. Имеет удобный лог APDU-команд и парсер ответов карты. Если заплатить 100 рублей (donate), то во вкладке Log появляется удобный парсер всех посланных APDU команд, что невероятно удобно для отладки. Программа имеет открытую библиотеку на Java.
Читайте также:  Какого года вышел iphone 7 plus

Описанный ниже процесс не является корректной реализацией протокола EMV. Приведенные команды APDU содержат ошибки и нарушают рекомендации EMVco, из-за чего могут не работать с некоторыми картами.

Для изучения протокола EMV рекомендуется читать официальную документацию, которую я, к своему стыду, почти не читал.

Приведенные APDU-команды будут одинаковыми не зависимо от выбранного оборудования. Однако в случае с PC/SC ридером не нужно заботиться о низкоуровневых командах, настраивать модуляцию и т.д.

Я буду использовать программу SmartCard Scripter, в связке с PC/SC-ридером HiD Omnikey. Программа SmartCard Scripter имеет наиболее компактный pascal-подобный синтаксис из всего что я видел. Краткое описание синтаксиса infintuary.org/scs_tut.php

Для того чтобы послать произвольную APDU команду на карту, достаточно такого когда:

Начало коммуникации — команда SELECT (PPSE)

Начало общения с EMV-картой всегда происходит с чтения файла PPSE (Payment System Environment) командой SELECT.

APDU-команда SELECT PPSE

Старт платежного приложения — SELECT AID

В ответ на SELECT PPSE карта должна вернуть FCI (File Control Information) со списком приложений, существующих на карте. Помимо платежных приложений (VISA, MasterCard, AmericanExpress) карта может содержать неплатежные приложения, используемые для других нужд.

Ответ карты VISA на SELECT PPSE

Для удобства проанализируем ответ с помощью онлайн-парсера формата 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

Получив значение AID, его нужно запустить командой SELECT. В данном случае мы запускаем приложение Visa International, полученное из ответа на PPSE SELECT

APDU-команда SELECT AID

Обработка 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.

Пропустим этот ответ через парсер:

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

Вот тот же ответ, обработанный более умным парсером. Видно каждый параметр PDOL:

Данный парсер не скрывает байт длины после маркера, как это делает emvlab.org. Поэтому последний байт каждого маркера следует читать как длину.

Разберем запрос PDOL подробнее

Карта ожидает ответ на PDOL в том же порядке, в котором следуют запросы, и ровно той длины, которая указана после каждого параметра PDOL. Если сложить длину всех параметров (последний байт каждого параметра), получится 33 байта. Значит карта ожидает от считывателя PDOL длиной в 33 байта.

Так как мы не собираемся списывать с карты деньги, наша задача — сформировать самый простой из возможных ответ PDOL, который удовлетворит карту. Если наш ответ не понравится карте, она ответит кодом 6985 Conditions of use not satisfied.

Экспериментальным путем я выяснил, что почти на все запросы PDOL можно ответить нолями, кроме Terminal Transaction Qualifiers (TTQ). В случае с VISA, нам нужно убедить карту в том, что терминал соответствует спецификации VCPS 2.1.1. Для этого ответ на TTQ должен выглядеть так:

Подробнее про формат TTQ здесь.

Карты MasterCard, которые мне довелось испытать, позволяли игнорировать PDOL и отдавали PAN-номер без корректного ответа на PDOL.

Вот как будет выглядеть минимальный рабочий ответ на запрошенный выше PDOL:

Если наш ответ удовлетворил карту, мы получим сообщение, начинающееся с маркера 77 с кодом SW2=9000. Этот ответ может содержать нужный нам PAN-номер, а может и не содержать. (офигеть)

Поиск PAN-номера

Так как нам лень писать полную имплементацию протокола EMV, разбирать все структуры ответов и формировать корректные запросы, мы поступим глупым способом, а именно пошлем все возможные запросы и будем просто искать в ответах нужный маркер, содержащий PAN-номер.

PAN-номер может содержаться в трех местах:

  • Track 2 Equivalent Data — маркер 57. Может иметь длину от 0 до 19 байт, но обычно всегда равен 13 (19 байтам). Поэтому как маркер можно использовать последовательность 57 13. Первые 8 байт всегда содержат PAN-номер.
  • Application Primary Account Number (PAN) — маркер 5A. Всегда имеет длину 8 байт, поэтому можно искать как маркер последовательность 5A 08. Содержит только PAN номер.
  • Track 2 Data — маркер 9F 6B» — . Длина обычно 13 байт. Содержит PAN номер и другую информацию.

APDU-команды (что они значат вообще? Хз, нужно прочитать)

И парсим все ответы на предмет маркеров 57 13 либо 5A 08. Найденные 8 байт карты можно дополнительно чекнуть на контрольную сумму с помощью Алгоритма Луна.

Если номер валидный, берем его последние десять цифр.

В итоге наш примитивный алгоритм чтения PAN-номера можно изобразить в виде блок-схемы

Первый прототип

Было решено использовать в качестве идентификатора пользователя 10-значный номер, который будет формироваться либо из десяти последних цифр PAN-номера платежной карты, либо из номера карты «Тройка». Идентификатор должен передаваться контроллеру, который будет сверять его с хранящимися в базе данных номерами и решать, открывать дверь, или нет.

Всю работу по распознаванию карты должен выполнять считыватель, и на выходе отдавать 10-значный номер. В базе данных достаточно хранить только сами номера, без необходимости отмечать тип карты.

Так родился первый прототип считывателя на Arduino + PN532 breakout board.
Видео с демонстрацией работы прототипа: www.youtube.com/watch?v=aXNvjuRrCQk

Скетч для Arduino, показанный в видео, выложен здесь: github.com/zhovner/Adafruit-PN532, в папке examples/ApplePay_Troyka_ACS
Данный код довольно плохой, потому как не генерирует ответ PDOL, из-за чего не все EMV-карты будут успешно прочитаны. Однако он позволяет понять общую логику работы системы описанной в статье.

Читайте также:  Как нарисовать граффити с айфона

Считыватель Parsec

С самого начала мы не хотели городить кустарные поделки на arduino или raspberry pi, поэтому стали искать решение на базе промышленного оборудования.

Так как на рынке готовых решений не существует устройств даже примерно похожих на то, что нам было нужно, мы стали спрашивать у всех производителей СКУД, кто сможет реализовать наши извращенные фантазии в своем оборудовании.

Единственной компанией, которая стала с нами разговаривать, были Parsec.ru
В итоге они согласились реализовать наши идеи в прошивке своего считывателя PNR-P03E.


Parsec PNR-P03E позвоялет запрограммировать любой нестандартный алгоритм чтения карт

Большинство RFID-считывателей, которые доступны в продаже, поддерживают только определенный формат идентификаторов. Например Mifare, HiD iClass и т.д.

Нам же требовалось, чтобы считыватель поддерживал одновременно несколько форматов карт, и реализовывал нестандартный протокол чтения EMV-карт.

Ключевые особенности считывателя PNR-P03E

  • Программируемый алгоритм чтения карт — возможность загрузки нестандартной прошивки позволяет реализовать любую логику считывания карт, в том числе одновременную поддержку карт EMV, «Тройки» и любых других. Функциональность считывателя может быть расширена обновлением прошивки.
  • Поддержка различных интерфейсов подключения контроллера — считанный идентификатор передается на контроллер по любому из доступных протоколов: Wiegand от 26 до 58 бит, OSDP (RS-485, RS-232), Touch memory (I-Button) и собственный проприетарный протокол Parsec
  • Отделяемый антенный модуль — плата имеет линию перфорации, позволяющую отделить антенну от основного модуля для удобства интеграции в корпус
  • SDK для разработки — библиотеки с примерами кода позволяют интегрировать считыватель в свои проекты

Блок-схема, иллюстрирующая работу считывателя. При успешном считывании идентификатора, он передается на контроллер по протоколу Wiegand.

Считыватель самостоятельно определяет тип карты и выполняет считывание нужной области памяти. Если определить тип карты не удалось, считыватель игнорирует её. Прочитанная область памяти конвертируется в десятизначный идентификатор и передается на контроллер.

Контроллер БОРЕЙ

Контроллер — это устройство, на которое передается идентификатор карты от считывателя. Оно хранит базу данных идентификаторов карт и решает, кого пропускать, а кого нет, управляя замком двери.

Часто контроллеры СКУД состоят из нескольких блоков управления и компьютера с базой данных. Мы принципиально не хотели держать отдельный компьютер и искали компактное решение в виде одного устройства, которым можно управлять через API для интеграции с Telegram-ботом.

Поиск такого устройства занял больше месяца, пока я не наткнулся на старую статью на хабре «Обзор СКУД с бесплатным программным обеспечением». В комментариях пользователь rgmih упомянул, что их компания производит именно такой контроллер.

Так мы нашли контроллер БОРЕЙ от компании ИТРИУМ.


Плата контроллера БОРЕЙ в настенном корпусе

Устройство работает под управлением Linux на базе ARM-процессора.

Основные достоинства устройства, которые редко можно встретить у других контроллеров:

  • Полностью автономный — все функции выполняет одно устройство. Для управления не нужно дополнительных программ или отдельного компьютера. База данных хранится на SD-карте. При отключении интернета контроллер продолжит работать.
  • Web интерфейс и REST API — возможность управлять контроллером через браузер и интегрировать с Telegram-ботом через API. Позволяет управлять пропусками удаленно.
  • Подключение по Ethernet — устройство подключается в IP-сеть. Имеет встроенный коммутатор на 2 порта.
  • Идентификаторы произвольной длины до 64 бит — возможность интегрировать контроллер с нестандартными идентификаторами разной длины. Позволяет иметь гибридную систему с идентификаторами разной длины.

В момент считывания карты, считыватель передает прочитанный идентификатор карты на контроллер по протоколу Wiegand. Контроллер ищет идентификатор в своей базе данных и решает, можно ли этому идентификатору открывать дверь или нет.

Если можно, контроллер размыкает реле магнитного замка на двери и посылает сигнал световой и звукой индикации на считыватель. Считыватель издает одобрительный писк и загорается зеленым цветом.

Если доступ запрещен, контроллер посылает сигнал индикации на считыватель, и тот горит красным цветом и пищит о том, что доступ не разрешен.

Управление контроллером

Контроллер подключается в сеть c помощью Ethernet-кабеля. Начальная настройка требует только задать IP-адрес устройства. Никакого программного обеспечения, помимо браузера, не требуется.

Учетные записи заводятся в меню «Бюро пропусков». Чтобы не вводить идентификатор карты вручную, его можно поднести к считывателю в момент создания учетной записи.


Создание нового пропуска в веб-интерфейсе контроллера БОРЕЙ

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

Бюро пропусков в Telegram

Чтобы каждый раз не обучать нового администратора, как пользоваться веб-интерфейсом контроллера, мы решили создать Telegram бота, через которого будет происходить добавление/удаление пропусков. Это возможно благодаря наличию в контроллере БОРЕЙ REST API.

В процессе работы над системой мне часто задавали одни и те же вопросы, которые наверняка возникнут и в комментариях. Я собрал самые популярные:

  • Если отключится интернет, все сломается?
    Нет, если у контроллера пропадет доступ в интернет, система продолжит работать, так как вся база данных хранится локально на контроллере. Без интернета нельзя будет внести изменения в конфигурацию. При этом доступ в веб-интерфейс сохранится из локальной сети.
  • Можно создать клон карты «Тройка» и сделать поддельный пропуск!
    Да, это так. Можно подсмотреть номер карты у пользователя и создать клон. Однако для этого потребуется оборудование для записи карты (смартфон на Android c NFC тоже подойдет), знание ключей доступа к сектору и навыки работы с картами Mifare. В нашей модели угроз, такая уязвимость не является критической, так как на входе всех встречает администратор у ресепшена. Учитывая, что большинство систем контроля доступа в СНГ работают на картах EM-Marine, которые можно клонировать на расстоянии метра от человека без знаниях каких-либо ключей вообще, наша система намного более безопасна и требует от атакующего бо́льших усилий.
  • Вы сможете скопировать мою банковскую карту и украсть деньги.
    Это очень популярное заблуждение. Протокол EMV защищен от подобных атак и бегло разбирается в главе «Читаем EMV карты на коленке». На пальцах, защита работает так: карта хранит приватный ключ подписанный банком-эмитентом, который прошивается в память на этапе выпуска карты. Банк-эмитент (который выпустил карту) хранит у себя отпечаток приватного ключа карты. Чтобы списать деньги с карты, POS-терминал передает случайную последовательность данных вместе с суммой, которую собирается списать. Карта подписывает эти данные своим ключом и отвечает POS-терминалу. Результат передается в банк-эмитент, который проверяет подпись. Так как секрет знает только карта, и он не может быть извлечен из карты, скопировать карту так, чтобы с нее можно было списывать деньги — невозможно.
  • Но вы можете скопировать открытые данные карты, такие как номер, срок действия и имя владельца.
    Да, это возможно. Но этих данных, в большинстве случаев, недостаточно для оплаты. CVV-номер в них не содержится. Кроме того, реквизиты, полученные из Apple Pay не будут работать для оплаты в интернете. Однако эти опасения вполне справедливы, и для тех, кто не хочет использовать банковские карты, всегда есть возможность использовать карту «Тройка».
  • Можно узнать номер EMV карты и подделать пропуск.
    В теории да, но мне не известно доступное оборудование для эмуляции EMV карт. Существуют аппаратные эмуляторы вроде ChameleonMini, однако работают они достаточно плохо. Есть также Android Host-based Card Emulation, который в теории позволяет эмулировать любую карту на Android смартфоне. Но мне опять же не известны реально существующие реализации таких эмуляторов, позволяющие загружать произвольный дамп карты.

Спасибо всем, кто помогал мне в этом проекте:

Иллюстрации к статье — aquamine
Помощь в написании кода — ValdikSS
Написание Telegram бота — Alexey Tsverov
Разработка прошивки считывателя — компания Parsec и лично Леонид Стасенко
Помощь в настройке контроллера — компания ИТРИУМ и лично Глеб rgmih Рыбаков

Источник

Оцените статью