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

Почему нельзя просто подложить карту «тройка» под чехол?

Я пробовал. Такой вариант создает слишком много проблем, а работает очень плохо.

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

Во-вторых, карты «Тройка» слишком крупные. Размером с кредитку. Они поместятся под чехол, но тот будет выпирать или может не защёлкнуться. Их также не получится «обрезать» без потери функциональности: большая часть внутренней части карты занята «дорожками» NFC-модуля, и если их задеть, карта просто перестанет работать.

В-третьих, карты «Тройка» блокируют работу Apple Pay. Антенна NFC в iPhone расположена на задней панели в верхней части корпуса. Карта, будучи под чехлом, мешает корректной работе антенны и сбивает с толку терминалы в магазинах. Вы просто не сможете платить через Apple Pay, пока не достанете «Тройку».

И в-четвертых, карты «Тройка» мешают корректной работе iPhone. Карта периодически возбуждает (простите) NFC-модуль айфона. Внезапно появляется окно Apple Pay с ошибкой оплаты. Еще айфон перестаёт автоматически затемнять и блокировать экран. Это бесит: включили экран, чтобы посмотреть время или уведомления – а он не выключается, пока вручную не заблокировать телефон через кнопку.

Так что в топку бумажную «Тройку», она не подойдет.

P.S. В iOS 11 Apple открыла доступ разработчикам к некоторым функциям NFC-модуля айфона. Но пока чуда не случилось. Похожу со своим колхозным брелоком.

Карта тройка nfc iphone4.38 из 5, оценили: 8)

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

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

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

Баланс карты «тройка» – проверка с помощью интернета

Проверить баланс карты Тройка по номеру карты через интернет невозможно. Но если у вас есть телефон на базе Android с поддержкой функции NFC, то вы можете воспользоваться следующим способом для проверки баланса.

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

Если вы до сих пор не знаете, как проверить баланс карты Тройка, то сделать этом можно на терминале в метро, которые установлены на каждой станции подземки.

Чтобы узнать баланс карты Тройка с помощью терминала на станции метро, вам необходимо приложить карту к жёлтому кругу на его лицевой панели и подождать несколько секунд (см. рисунок выше). На экране появится информация:

  • остаток денежных средств на карте Тройка;
  • записан ли на карту какой-либо проездной (если записан, то отобразится количество оставшихся поездок и срок действия).

Также вы можете в любое время дня и ночи проверить баланс карты Тройка через Интернет, используя мобильное приложение на своём смартфоне или планшете. Для этого необходимо установить приложение для Android, позволяющее проверить баланс тройки. Но здесь существует определённое ограничение — ваше устройство должно поддерживать бесконтактную технологию NFC.

Узнать баланс карты Тройка через Интернет

Приложение «Мой проездной» обладает следующими функциями:

  • запись абонементов;
  • пополнение баланса карточки;
  • проверка состояния счета проездного;
  • доступ к истории совершенных с помощью «Тройки» операций;
  • предоставление остатка поездок на приобретенных абонементах;
  • привязка любого количества банковских карт, выданных в России, для безопасности операций с деньгами.

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

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

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

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

Кроме этого, вы можете проверить свою карточку в пунктах «Мострансавто», через терминалы официальных партнеров: «Мегафон», «Элекснет» или же в кассе Аэроэкспресса.

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

Чтобы иметь возможность в любое удобное время проверять состояние карты, установите приложение «Мой проездной». Однако здесь есть некоторые нюансы: приложение работает только на телефонах с ОС Андроид и поддержкой технологии NFC. Кроме того, телефон должен быть подключен к интернету.

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

Существует еще один удобный сервис, который называется «Мобильный билет». Он тоже устанавливается на телефоны с поддержкой NFC. Чтобы подключить его, необходимо заключить договор в салоне сотовой связи. Преимущество состоит в том, что теперь вам не нужно иметь при себе пластиковую карту. Для оплаты проезда вам понадобится только ваш смартфон.

Оба этих способа просты и удобны, но подойдут не всем. Если ваш телефон не поддерживает технологию NFC или не подключен к интернету, то вам придется выбрать другой способ проверки баланса. То же самое касается владельцев телефонов на ОС iOS.

Если ваш смартфон не имеет доступа к интернету или в нем не установлено приложение, контролировать баланс можно по номеру карточки. Вам нужно сделать следующее:

  1. Наберите номер службы поддержки
  2. Для связи с оператором нажмите 4
  3. После соединения с оператором узнайте состояние вашего счета

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

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

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

Читайте ещё про NFC:  Что такое карта Visa PayWave. Как пользоваться бесконтактной оплатой PayWave.

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

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

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

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

Итак, если все в наличии, то следует действовать по такому алгоритму:

  1. Найти в Google Play программу для мобильных устройств «Тройка. Проверка баланса».Тройка
  2. Установить приложение на гаджет.
  3. Приложить карту к оборотной стороне телефона либо планшета, на котором инсталлирована программа.
  4. Ожидать появления информации на экране мобильного устройства.

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

Для этой же цели можно использовать приложение «Мой проездной». Ему также необходима технология NFC и наличие интернета. Программу можно установить через Play Market. После запуска приложения требуется приложить транспортную карту к задней части гаджета на несколько секунд. Доступная к использованию сумма появится на экране смартфона.

Запись в приложении

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

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

Как записать билет на карту Тройка? Нужно:

  1. Попросить выполнить данную процедуру в кассе.
  2. Воспользоваться устройством для печати на станции. В меню вы найдете соответствующий пункт.
  3. Носитель прикладывается к специальному элементу, на установленный внутри чип вносится информация.

Существуют специальные программы для записи, которые устанавливаются на смартфон. Но у них есть ряд недостатков:

  • Нужно иметь NFC, чтобы выполнить запись билета или абонента. Без чипа приложение бесполезно.
  • Программы пока не слишком хорошо проработаны, возникают трудности при использовании.
  • Нередко приходится сталкиваться со сбоями.

Поэтому большинству клиентов проще пользоваться стандартными способами записи. Они надежны, не надо иметь смартфон с определенными параметрами.

Платежный спеллер “Мобильный билет” предназначен для бесконтактной оплаты проезда в городском транспорте: метрополитене, автобусах, пригородных электропоездах.

Услуга разработана “большой тройкой” российских операторов мобильной связи МТС, Мегафон и Билайн в 2021 году. Процедура подключения одинакова для всех операторов, участвующих в программе:

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

Чтобы воспользоваться сервисом “оплаты в одно касание” в транспорте, необходим смартфон со встроенным NFC-чипом и сим-карта с аналогичной микросхемой. Кстати, если телефон не оборудован микросхемой NFC “из коробки”, подойдет внешняя антенна, которая крепится под аккумулятор или на заднюю панель смартфона. Подойдет чипсет в виде стикера. Он клеится под съемную крышку или сверху.

Продаются антенны, которые устанавливаются под аккумулятор. Такие чипы состоят из двух частей: микросхема крепится к сим-карте и придавливается батареей, а часть с антенной накладывается сверху на АКБ и закрывается крышкой. Однако этот вид антенны не подходит смартфонам с несъемной панелью.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте ещё про NFC:  Как подключить Apple Pay на iPhone: как установить и настроить платежную систему

Ответ карты на старт платежного приложения. Содержит запрос 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-номер, а может и не содержать. (офигеть)

Оплата проезда

Apple Pay с Mastercard или Visa: простой и удобный способ оплаты.
Оплатить проезд в метро, МЦК и на МЦД с помощью Apple Pay можно в кассах, автоматах по продаже билетов, а также прямо на турникетах.

Оплата с iPhone:

Убедитесь, что вы подключили свою карту Mastercard или Visa к Apple Pay (c помощью приложения Wallet на вашем iPhone).

1. Чтобы быстро оплатить поездку метро с Apple Pay, достаньте ваш iPhone до того, как подойдете к турникету. Разблокируйте телефон, дважды нажав на кнопку «Домой».

2. Появится интерфейс Apple Pay. Теперь еще раз прикоснитесь к кнопке «Домой» для сканирования отпечатка пальца.

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

Оплата с Apple Watch:

Убедитесь, что вы подключили свою карту Mastercard или Visa к Apple Pay на ваших Apple Watch (c помощью приложения Wallet на вашем iPhone).

1. Дважды нажмите боковую кнопку и поверните Apple Watch дисплеем к турникету.

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

Купить билет с помощью ApplePay можно на всех станциях метро и МЦК.

Безопасность и конфиденциальность лежат в основе Apple Pay. Когда вы добавляете кредитную или дебетовую карту в Apple Pay, сам номер карты не хранится ни на устройстве, ни на серверах Apple. Вместо этого присваивается уникальный номер учётной записи устройства, который шифруется и безопасно хранится в чипе «Безопасный Элемент» вашего устройства. Каждая транзакция авторизуется благодаря уникальному одноразовому секретному коду, который генерируется динамически.

Apple Pay позволяет очень просто совершать оплату поездки: больше нет необходимости покупать билеты или пополнять транспортные карты. Apple Pay позволяет оплатить поездку, задействуя iPhone 6 и более новые модели, а также Apple Watch. Для работы Apple Pay не требуется интернет-соединения на вашем iPhone или Apple Watch, а значит, транзакции можно осуществлять даже там, где 3G соединение нестабильно или отсутствует.

Оплата поездки на специально оборудованном турникете в метро, монорельсе, МЦК и МЦД зона «Центральная» или наземном транспорте — 46 ₽

Оплата поездки на специально оборудованном турникете в метро, монорельсе, МЦК и МЦД зоны «Центральная» и «Пригород» — 54 


*Расплачиваться с помощью ApplePay можно с iPhone SE, iPhone 6 и более новых моделей, а также с AppleWatch.

Читаем 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) карта может содержать неплатежные приложения, используемые для других нужд.

Читайте ещё про NFC:  Технология Android Pay для бесконтактных платежей на смартфонах Xiaomi

Ответ карты 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