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

Для начала: что понадобится для всей этой затеи

iPhone. Подойдет смартфон Apple с поддержкой iOS 13 и модулем NFC — это iPhone SE, а также iPhone 6s (Plus) и выше. Несмотря на то, что данную технологию производитель начал использовать еще в iPhone 6 (Plus), у него нет поддержки необходимого приложения для автоматизации, о чем дальше.

Кстати, на iPad модуль NFC также есть, но обрезанный. Он используется для оплаты покупок в интернете через Apple Pay — он нужен для безопасности проведения данной процедуры. Но в нем нет антенн, поэтому о полноценном использовании для чтения NFC-меток не может быть даже речи.

«Команды». Фирменное приложение Apple, которое предназначено для автоматизации рутинных процессов. Оно выросло из программы Workflow, которую компания купила несколько лет назад. В iOS 13 данный инструмент установлен по умолчанию и тесно интегрирован в операционную систему.

На гаджеты под управлением iOS 12 же можно поставить только приложение «Быстрые команды» — предыдущую версию «Команд». Оно также подходит для самых различных цепочек из действий, но не поддерживает «Автоматизацию», которая активирует последовательность задач после «встречи» с триггером. Одним из них и станет NFC-метка.

NFC-метка. Ей может стать «Тройка» или другая карта, в которую встроен чип NFC. Подойдут и банковские, которые поддерживают PayPass, о чем я уже писал выше. Можно заказать отдельные метки NFC, а также использовать в качестве триггера гаджеты с такими чипами — к примеру, наушники Sony WF-1000XM3.

В них он встроен в зарядный кейс и предназначен для быстрого подключения к Android-смартфону. После выхода iOS 13 на iPhone также можно реализовать данную возможность, но для этого придется несколько минут потанцевать с бубном и настроить автоматизацию в приложении «Команды».

Начало коммуникации — команда 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 // завершающий маркер

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

  • Избавиться от лишних карт — в качестве идентификатора используется то, что уже есть у пользователя: транспортная карта, телефон или банковская карта. Какой идентификатор использовать — каждый выбирает сам. Система работает со всеми типами идентификаторов одновременно.
  • Избавиться от бюро пропусков и сложных программ управления — нам надоело выдавать и забирать карты у пользователей, держать отдельные компьютеры для управления пропусками, изучать переусложненные программы.
  • Управление через Telegram — заведение и удаления пользователей происходит удаленно и не требует компьютера.

Что делать дальше: как использовать nfc-метки с iphone

Для этого достаточно приложить NFC-метку, которой может стать даже «Тройка», к задней части iPhone. Если на 11-м шаге предыдущего пункта переключатель «Спрашивать до запуска» переведен в активное положение, на экране смартфона появится предложение выполнить указанную тегом команду.

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

Кстати, «Тройка» отлично справляется с тем, чтобы быть NFC-меткой. iPhone распознает ее и выполняет указанный список задач в 99% случаев. За все время, когда я пользуюсь данной фишкой, у меня было только одно неудачное происшествие, когда тег не сработал. Но тогда тестовая версия iOS, которой я пользуюсь, сама по себе решила зависнуть.

Возможности мобильного приложения

Это многофункциональное приложение, оно может:

  1. Используем Apple Pay и карту Тройка в качестве пропуска на работу / ХабрЗаписывать абонементы. «Тройка» находит информацию о ваших старых операциях в базе данных и дополняет её после совершения новых.
  2. Пополнение баланса карточки. Для того, чтобы пополнить счёт карты не обязательно куда-то идти. Достаточно добавить в приложение банковскую карту и оплачивать услуги с её помощью.
  3. Проверка баланса проездного. В приложении, вы можете не только пополнить счёт, но и отслеживать его.
  4. Доступ к истории операций “Тройки”. Приложение хранит историю совершённых с карты действий.
  5. Отображение оставшихся поездок на абонементах вашей “Тройки” привязка банковских карт для оплаты услуг с их помощью (система гарантирует безопасность).

Все скуд неудобные

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

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

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

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

Как записать билеты на карту «тройка»

Проездные абонементы записываются через представителей перевозчика.

Фото 6Пункты их записи зависят от конкретного билета:

  • Билет Единый: кассы метро, киоски Мосгортранса;
  • 90 минут – кассы метро, Мосгортранса;
  • ТАТ – киоски Мосгортранса.

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

В ином варианте можно использовать терминал Элекснет.

Инструкция записи билета в этом случае будет выглядеть так:

  • Нужно приложить пластик к считывающему устройству (оно представляет собой желтый круг).
  • На дисплее отобразится информация о существующих билетах. Нужно выбрать подходящий и оплатить его через купюроприемник.
  • Срок записи билета составляет 10-15 секунд, комиссии нет.

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

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

Как записать билеты?

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

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

Предлагаем посмотреть видео о том, как записать билеты:

Как пополнить баланс с активацией в метро и без?

Используем Apple Pay и карту Тройка в качестве пропуска на работу / ХабрУ пассажиров есть возможность пополнять карту «Тройка» онлайн. Не нужно искать жёлтые информаторы, ещё раз проверять баланс, чтоб удостовериться, что платёж прошёл и карта работает. Функция доступна только на смартфонах на базе Android (c поддержкой NFC). В приложении Google Play вы представлен полный список устройств, поддерживающих приложение.

После того, как вы положили деньги на «Тройку», приложите карту к задней крышке телефона, пополнение пройдёт автоматически через NFC. Приложение поможет вам в активации отложенного платежа, для этого необязательно спускаться в метро.

Как пополнить счет?

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

Это можно сделать следующими способами:

  • через терминал банка;
  • в кассе метрополитена либо наземного транспорта;
  • через онлайн-банкинг;
  • с электронных кошельков;
  • через мобильное приложение;
  • по СМС.

Как привязать карточку?

Как добавить карту в android pay? Для активации Тройки и её привязки к android pay нужно сделать следующее:

  1. Используем Apple Pay и карту Тройка в качестве пропуска на работу / ХабрВыбрать пункта «Добавить» в мобильном приложении.
  2. Ввести все требуемые регистрационные данные. Укажите номер объекта. Будьте внимательны при вводе данных.
  3. Активируйте карту.

Можно ли привязать карту, чтобы оплата проходила через телефон? Выполнив эти действия, вы привяжете карту к мобильному, однако для окончательного завершения процесса нужно:

  1. Получить на мобильный номер код с подтверждением.
  2. Ввести его в указанное поле в приложении.
  3. Дождаться активации внесённых данных. В течение нескольких минут поступит уведомление об успешной привязке информации на гаджет.

Как работает на андроиде?

Для начала вам пригодится мобильное устройство с операционной системой Android (Андроид) и поддержкой NFC. Дополнительное условие: NFC-контроллер вашего телефона должен поддерживать Mifare Classic для корректной работы.

Приложите карту “Тройка” к задней крышке устройства (у большинства телефонов NFC-антенна расположена там, уточнить информацию вы можете в инструкции к телефону). Не убирайте карту, пока не увидите на дисплее баланс (на это уйдёт несколько секунд).

Далее для проверки баланса карты “Тройка” вам не потребуется постоянный доступ к беспроводной сети Интернет. Возможно быстрое пополнение карт “Тройка”, не будет необходимости каждый раз спускаться в метрополитен, чтоб её активировать. Записывать купленные электронные билеты на вашу “Тройку” также можно через приложение.

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

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

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

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

Контроллер борей

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

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

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

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

Используем Apple Pay и карту Тройка в качестве пропуска на работу / Хабр
Плата контроллера БОРЕЙ в настенном корпусе

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

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

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

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

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

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

Кстати: как изменить список задач для данной nfc-метки

Шаг 1. Открываем приложение «Команды».

Шаг 2. Переходим в раздел программы «Автоматизация».

Шаг 3. Определяем автоматизацию, которую необходимо изменить.

Шаг 4. Выбираем перечень задач в меню «Сделать».

Шаг 5. Используем кнопку ㊉, чтобы добавить одну или несколько дополнительных задач, а также кнопку ⓧ, чтобы удалить ее.

Шаг 6. Нажимаем кнопку «Назад», чтобы вернуться к предыдущему меню, а также кнопку «Готово», чтобы сохранить изменение.

На ios

Как карту привязать к айфону? Долгое время владельцы гаджетов iphone (айфона) с операционной системой iOS не имели доступа к приложению, поскольку оно не поддерживалось. В обновленном приложении появилась возможность пополнять «Тройку» с помощью платежной системы Apple Pay и совершать некоторые из доступных операций, однако для активации оплаты необходимо приложить карту к жёлтому информатору на одной из станций метро. Совершая платёж через Apple Pay, вам необходимо будет подтвердить оплату паролем или с помощью Touch ID.

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

Напоследок: какие задачи можно назначить на nfc-метку

Исходящие вызовы. Сначала кажется, что в совершении исходящих вызовов с помощью NFC-меток нет ровным счетом никакого смысла. Тем не менее, и у этой возможности есть очень интересные сценарии использования. К примеру, многие механизмы для автоматического открытия ворот можно использовать не только с помощью пульта, но и по звонку.

Да, достаточно позвонить на заданный номер, и ворота начнут открываться. Если установить NFC-метку на удобное место в автомобиле, не нужно будет искать пульт или ковыряться в приложении «Телефон». Чтобы запустить механизм, достаточно будет лишь приложить iPhone к тегу.

Активация музыки. С помощью NFC-метки можно запустить воспроизведение альбома, плейлиста или любого другого перечня музыкальных записей и даже выбрать источник, через который это нужно сделать. Тег, как вариант, можно разместить аккурат на домашнем тренажере — например, на орбитреке, если такой имеется.

Приклеиваем метку на любое удобное место, становимся на указанный тренажер и тут же слушаем любимую музыку для тренировок. Можно даже редакторский плейлист из Apple Music для подобных целей использовать — в фирменном музыкальном стриминговом сервисе компании таких предостаточно.

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

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

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

Включение Apple TV. С помощью специального тега можно также активировать свою фирменную телевизионную приставку Apple, если она находится в режиме сна. Можно даже выполнить сразу две команды — сначала включить Apple TV, а потом запустить на iPhone пульт для ее управления.

Что же, в итоге получается, что этот и другие подобные сценарии действительно помогут избавить себя от внушительного числа рутинных действий и повысят комфорт жизни с iPhone в руке. Зачет.

Материалы по теме:

Обработка 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-номер, а может и не содержать. (офигеть)

Окей, продолжаем: как активировать работу nfc в iphone

Шаг 1. Открываем приложение «Команды».

Шаг 2. Переходим в раздел программы «Автоматизация».

Шаг 3. Выбираем возможность «Создать автоматизацию для себя».

Шаг 4. Смахиваем до меню «Настройки» и жмем на вариант NFC.

Шаг 5. Жмем на кнопку «Сканировать» в пункте «Тег NFC».

Шаг 6. Когда на экране появится соответствующая анимация с подписью «Готово к сканированию», подносим к задней части iPhone то, что станет NFC-меткой: банковская карта с поддержкой NFC, «Тройка» или что угодно, о чем я уже писал выше.

Шаг 7. Когда на экране появится всплывающее окно с предложением «Назовите этот тег», введите любое имя на свой вкус — например, «Тройка», если используете эту карту.

Шаг 8. Нажмите на кнопку «Далее», чтобы перейти в меню добавления действия.

Шаг 9. Нажмите на кнопку «Добавить действие», чтобы выбрать необходимую задачу, — после этого можете использовать кнопку ㊉, чтобы добавить одну или несколько дополнительных.

Шаг 10. Нажмите на кнопку «Далее», чтобы перейти в меню финальной настройки.

Шаг 11. В финальном меню создания автоматизации получится просмотреть условие (в нашем случае это использование NFC-метки), набор действий, а также выбрать необходимость подтверждения запуска с помощью переключателя «Спрашивать до запуска».

Шаг 12. Нажмите на кнопку «Готово», чтобы подтвердить создание автоматизации.

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

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

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

Читайте ещё про NFC:  Бесконтактная оплата банковской картой с чипами что это и как пользоваться

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

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

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

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

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

Поиск 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-номера можно изобразить в виде блок-схемы

Пополнение и запись на карту тройка с помощью смартфона с nfc-меткой

В Останкинском районном суде Москвы 24 августа прошло итоговое судебное заседание по делу о создании организованной группой вредоносного софта для мошенничества с картой «Тройка» и другими транспортными картами Москвы и Московской области. На скамье подсудимых — Денис Казьмин, Юрий Путин и Павел Андрюшин, которым инкриминируют причинение имущественного ущерба (ст. 165 УК РФ) ГУП «Мосгортранс» и Центральной пригородной пассажирской компании (ЦППК). Их суммарные потери, согласно обвинительному заключению, составили более 2 млн руб. Казьмина и Путина обвиняют также в неправомерном доступе к компьютерной информации (ст. 272 УК РФ) и создании и использовании вредоносных компьютерных программ (ст. 273 УК РФ).

Обвиняемые свою вину не признали, приговор будет вынесен 31 августа.

Согласно материалам обвинения, хакеры осуществили доступ к локальной сети ЦППК с помощью заранее созданной и внедренной вредоносной программы. Она предназначалась для несанкционированного копирования информации ЦППК, нейтрализации средства защиты данных, находящихся в памяти плат турникетов на станции «Москва-3». Так обвиняемые получили доступ к охраняемой законом информации, в том числе ключам шифрования, и произвели ее копирование, сообщил государственный обвинитель в ходе заседания. Для несанкционированного доступа использовался бэкдор (программа, с помощью которой злоумышленник может получить скрытый доступ к устройству), который якобы был заранее загружен на плату турникета.

В дальнейшем, утверждает обвинение, используя полученные данные, обвиняемые самостоятельно пополняли проездные билеты (в ходе следствия было изъято более 200 бесконтактных смарт-карт), которые затем продавали, а также использовали сами. В частности, значительная часть билетов была сделана для проезда по Горьковскому и Ярославскому направлениям, где живут двое из обвиняемых.

Эксперты отмечают, что мошенничество с транспортными картами — редкость, так как много на нем не заработать. «Принцип работы транспортных карт отличается от банковских, плюс к тому на них не хранятся значительные денежные средства. Пытаться похищать деньги с «Тройки» или других подобных карт технически сложно и дорого, и все это приводит к тому, что злоумышленникам выгоднее работать с банковскими картами. Что касается подделок числа поездок и абонементов, то их защита — это прерогатива и ответственность производителей карт. Обычно в них как минимум используется шифрование — так что, учитывая затраты на взлом защиты и производство, это тоже не самый выгодный криминальный бизнес», — говорит ведущий антивирусный эксперт «Лаборатории Касперского» Сергей Голованов.

Согласно данным на сайте «Тройки», к настоящему времени карту приобрели 12,8 млн пассажиров.

Представитель НИИ молекулярной электроники Алексей Дианов говорит, что стандартный способ программно-аппаратной защиты информации, применяемый в транспортных приложениях, — использование уникального ключа, то есть генерируемой случайной последовательности чисел. «Ключ, определяющий права доступа к информации на чипе, хранится у оператора сервиса и применяется в оборудовании для авторизации доступа. Для изменения информации на чипе, например для увеличения количества поездок, необходимо каким-либо способом получить этот ключ — непосредственно от оператора или из самой системы», — говорит Дианов. Он отмечает, что в картах «Тройка» используется чип Mifare. «Старые алгоритмы шифрования, которые до сих пор применяются иностранным производителем, были скомпрометированы еще в 2008 году», — сообщил Дианов. Тогда исследовательской группой голландского университета Radboud были опубликованы три статьи, касающиеся взлома карт Mifare Classic.

«Манипуляции с транспортными картами не слишком доходны: средств на них хранится немного, злоумышленников выявляют быстро. Кроме того, шифрование данных на транспортных картах и применение защищенных каналов передачи данных все-таки затрудняют для мошенников доступ. В общем, мошеннические операции с картами делятся на два типа: атака на клиентскую часть, то есть саму транспортную карту, или на серверную часть предприятия», — говорит аналитик центра мониторинга угроз информационной безопасности Solar JSOC Алексей Павлов.

Заместитель мэра Москвы по вопросам транспорта и развития дорожно-транспортной инфраструктуры города Максим Ликсутов ранее сообщал РБК, что в конце 2020-го — начале 2020 года появится персонализированная карта «Тройка», когда будет обновлена IT-инфраструктура. «Мы очень хотим это сделать. Но у нас есть, к сожалению, проблема, что наша IT-платформа для всей билетной инфраструктуры очень старая. Мы тестировали неоднократно возможности дополнительных обращений в эту систему запросов, связанных с персонализацией. И пока понимаем, что нам надо сначала обновить и подготовить билетную IT-инфраструктуру», — пояснял Ликсутов.

Подробнее на РБК:

http://www.rbc.ru/technology_and_media/25/08/2020/599f0c6e9a…

С помощью смартфона с nfc

Как уже упоминалось выше, у вас множество преимуществ, если база вашего телефон Android с NFC. Любую действие, в том числе проверку баланса, вы можете произвести через различные приложения (от официальных до не очень). Чаще всего для установления контакта карты с программой нужно расположить карту у задней крышки телефона (там находится антенна интерфейса беспроводной связи).

При выборе программы проверьте насколько достоверна предоставляемая информация. Для iOS нет приложений со схожими функциями, потому что эта операционная система не оборудована каналом NFC.

Системные требования для установки

При установке приложения должны быть выполнены следующие требования:

  1. ОС на вашем телефоне должна быть Android 4,0 и более.
  2. Постоянный доступ к интернету и свободное место в памяти устройства.
  3. Поддержка NFC.
  4. Система Mifare Classic.

Используем Apple Pay и карту Тройка в качестве пропуска на работу / ХабрНе все телефоны с поддержкой NFC имеют Mifare Classic, всё зависит от устройства. Информацию по этому поводу можно уточнить у производителя или найти в инструкции по эксплуатации сотового.

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

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

Старт платежного приложения — 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

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


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

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

Тройка и apple pay: можно ли привязать карту «тройка» и пополнить

На сегодняшний день, с помощью Apple Pay можно не только оплачивать покупки без наличии пластика в кармане и совершать денежные переводы через Apple Pay Cash.
Приложение Wallet работает в паре с самим платежным сервисов. Благодаря чему, в Соединенных Штатах и некоторых других странах пользователи могут использовать электронную версию проездных на метро, билетов на мероприятия и т.п.
В России таких возможности на продукции с IOS не было, но и нашу страну ждут изменения.

До конца года заработает цифровая версия транспортной карты «Тройка» в Apple Pay. С помощью нее вы сможете оплачивать проезд на общественном транспорте Москвы и области — достаточно иметь при себе смартфон.

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

Чтобы добавить карту «Тройка» в Apple Pay, достаточно внести ее в само приложение для оплаты и подтвердить личность отпечатком пальца/Face ID, приложив телефон к турникету.

«Тройка» на IOS заработает официально до конца 2020 года, там уже и можно будет ответить на вопросы: как именно добавить карту «Тройка» в Apple Pay, как пополнить «Тройку» и когда подобные решения будут приняты не только для столицы.
Разработчики не планируют ограничиваться лишь пользователями Apple. Поддержку электронных транспортных карт получат и Google Pay вместе с Samsung Pay.
Таким образом, можно будет не носить с собой карту, а платить за проезд точно так же, как в магазине.

Возможно, создатели ждут выхода IOS 13, чтобы пользователи Iphone могли сами оцифровывать «Тройку». Известно, что с выходом обновления ОС будет возможность для модуля ближнего поля. С ним просто нужно будет отсканировать транспортную карту с помощью NFS и сохранить в приложении Wallet.

Читайте ещё про NFC:  Xiaomi NFC: список телефонов Сяоми с поддержкой модуля, есть ли чип в смартфонах Redmi Note 5 и 4x, Mi5, Redmi 4x и 5 Plus, Mi A1, как работает?

Нововведения сэкономят жителям Москвы их и без того ценное время, особенно, касательно транспорта.
А вам удобнее платить за проезд со смартфона/часов или вы привыкли по старинке?

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

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

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

Используем Apple Pay и карту Тройка в качестве пропуска на работу / Хабр
Создание нового пропуска в веб-интерфейсе контроллера БОРЕЙ

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

Через приложение «мой проездной»

Используем Apple Pay и карту Тройка в качестве пропуска на работу / ХабрЧтобы использовать приложение «Мой проездной» необходим доступ к Интернету и поддержка вашим телефоном NFC. Установить «Мой проездной» можно только на Android из Play Market. После загрузки и установки приложения, запустите его и подержите карточку несколько секунд у задней панели мобильного телефона. После установления контакта система считает всю необходимую ей информацию.

Читаем 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, обработанный парсером:

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

Из всего этого нас интересует только идентификатор платежного приложения (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'

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

парсер

:

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

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

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

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

Данный парсер не скрывает байт длины после маркера, как это делает 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-номера можно изобразить в виде блок-схемы

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector