Как записать карту «Тройка» на мобильный телефон с NFC модулем для оплаты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мобильные телефоны: используем специальное приложение

Это приложение – единственный вариант расплатиться за покупку, не используя специальные терминалы, установленные на железнодорожных вокзалах либо в метро. Первый шаг – установка программы под названием «Мой проездной». В интернет-сервисах Play-market найти это решение сможет любой пользователь. Затем переходим к настройкам программы, выполняем включение NFC.

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

  1. Код, используемый для дальнейшего входа в программу.
  2. Пароль для авторизации.
  3. Электронная почта.
  4. Телефонный номер.
  5. ФИО.

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

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

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

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

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

Затем купленный билет записывают. Это действие доступно в специальных инфоматах, которые устанавливаются на всех станциях метрополитена.

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

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

Для проведения платежа нужно внести полные данные карты (включая CSV-код). Опасаться об утечке данных не стоит – сайты не запоминают секретную информацию, при входе на них используется защищенное соединение.

Обработка pdol (processing options data object list)

В ответ на запуск платежного приложения карта может затребовать от считывателя PDOL (Processing Options Data Object List). Это набор параметров POS-терминала — поддерживаемые протоколы и стандарты, валюта, в которой будет производиться расчет, дата, случайное число для криптографии, и так далее.

Список PDOL может различаться у разных карт. Общее число параметров PDOL — несколько десятков. Полный список параметров PDOL можно посмотреть здесь: eftlab.co.uk/index.php/site-map/knowledge-base/145-emv-nfc-tags.Сложность состоит в том, что список PDOL у разных карт, даже выпущенных одним банком в разное время, может существенно различаться. Некоторые карты запрашивают два-три параметра, другие — десяток.

Это очень важный момент, так как некоторые карты могут отказаться работать без корректного ответа PDOL. Поэтому, для получения PAN-номера от всех карт, нам придется прикинуться настоящим POS-терминалом. Напомню, что единственной нашей целью является получения PAN-номера. Поэтому попытаемся сформировать максимально простой, но при этом корректный ответ PDOL.

Ответ карты на старт платежного приложения. Содержит запрос PDOL.

'6F 31 84 07 A0 00 00 00 03 10 10 A5 26 9F 38 18 9F 66 04 9F 02 06 9F 03 06 9F 1A 02 95 05 5F 2A 02 9A 03 9C 01 9F 37 04 BF 0C 08 9F 5A 05 60 08 40 06 43 90 00'

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

парсер

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

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

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

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

9F 38 18 // Маркер начала PDOL. Длина 18 (24 байта) 
 9F 66 (длина 04) // Terminal Transaction Qualifiers (TTQ). Параметры платежного терминала 
  9F 02 (длина 06) // Сумма списания
   9F 03 (длина 06) // вторая сумма
   9F 1A (длина 02) // Код странцы в формате ISO3166-1
   95 (длина 05) // Terminal Verification Results
    5F 2A (длина 02) // Код валюты, в которой работает терминал, в формате ISO4217
     9A (длина 03) // Дата в формате YYMMDD
      9C (длина 01) // Тип транзакции 
       9F 37 (длина 04) // Случайное число для криптографии

Подробное описание всех возможных параметров PDOL можно найти в

EMV Contactless Specifications Book C-1/2/3 Kernel 1/2/3 Specification.

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

Читайте ещё про NFC:  Чем хорош киви кошелек

Так как мы не собираемся списывать с карты деньги, наша задача — сформировать самый простой из возможных ответ 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 // Случайное число 

Если наш ответ удовлетворил карту, мы получим сообщение, начинающееся с маркера

с кодом SW2=9000. Этот ответ может содержать нужный нам PAN-номер, а может и не содержать. (офигеть)

Пополнение «тройки» через приложение «город»

На входе в метро установлены терминалы для внесения денег. Если есть необходимость внести деньги в кошелек, достаточно следовать простой инструкции:

Деньги поступают на карту мгновенно, можно сразу же оплатить поездку на транспорте. Зачисление происходит без комиссий, на счет попадает внесенная сумма в полном объеме. Наибольшая сумма, которая может лежать на Тройке – 3 000 рублей.

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

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

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

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

Пошаговая процедура перевода денег через Сбербанк Онлайн аналогична процедуре с помощью мобильного банка. Для начала потребуется авторизация в интернет-банке.

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

Что нужно

Подключённый Мобильный банк

Как пополнить

Отправьте на номер 900 СМС с названием карты, её номером и суммой. 

Тройка 1234567890 300,где 1234567890 — номер Тройки, а 300 — сумма пополнения. Подтвердите платёж с помощью СМС-пароля.

Правительство Москвы активно развивает интерактивное направление оплаты различных услуг. Пополнить Тройку также можно воспользовавшись приложением «Метро Москвы».

Следует обратить внимание, что способов оплаты здесь гораздо больше. Можно использовать и электронные платежные системы Вебмани, Яндекс.Деньги.

Комиссия не берется, как и в двух предыдущих случаях.

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

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

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

Удобство заключается в возможности проверять баланс карточки и всегда иметь представление об остатке денег.

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

Бесплатно пополнить «Тройку» на Андроиде возможно только после установки специального приложения «Метро Москвы». На данный момент сервисом пользуются более миллиона человек. Стачивают его абсолютно бесплатно из магазина приложений Андроид для операционной системы. Весит около 30 мегабайт, поэтому много места не займет в памяти гаджета.

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

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

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

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

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

Пополнить карту «Тройка» через приложение «Город» также можно по похожему алгоритму. В любом случае, понадобится активация пластика или брелка с носителем в автомате метрополитена (если в телефоне нет технологии НФС). Другой доступный вариант пополнения счета — это сервис Сбербанк Онлайн.

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

Еще один универсальный способ пополнить проездной билет в столице — зайти в свой аккаунт через приложение «Город». Скачивается оно таким же образом, что и стандартное, есть в магазинах операционных систем. Можно не только пополнять счета через это приложение, но и оплачивать связь, например, МТС или Билайн, переводить деньги на свой проездной и тому подобное. Алгоритм следующий:

  • открыть приложение;
  • выбрать пункт «Транспорт»;
  • перейти во вкладку «Тройка»;
  • нажать на пункт «Пополнить и выбрать способ»;
  • перевести деньги или бонусы.

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

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

«Сейчас карта полноценно работает в Туле. Мы также тестируем ее на 2 маршрутах в Московской области и ведем переговоры с более чем 25 регионами РФ».

Читайте ещё про NFC:  Как без комиссии вывести деньги с QIWI кошелька на карту Сбербанка: инструкция по транзакции без процентов

Тройка. пополнение и проверка

Во-первых

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

Во-вторых, убедитесь, что Вы точно прикладываете карту «Тройка» к NFC-антенне.

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

На чувствительность антенны и надежность считывания может влиять чехол (снимите его). Причем, бывает случаи, что читаться в чехле карта может хороша, а записывать не получается (потому что мощность сигнала для чтения и записи — разные).

В-третьих, убедитесь, что Вы убираете карте «Тройка» только после того, как она была прочитана.

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

Если появилось сообщение, что данные на карты прочитать не удалось, нажмите «ОК» и попробуйте снова.

Кроме того, на некоторых устройствах наблюдаются аппаратные и программные ошибки, которые приводят к нестабильному чтению карт (ошибки в NFC-модуле, неправильно настроенная антенна, ошибки в прошивке).

Приложение здесь ни при чем: оно, упрощенно говоря, всего лишь получает данные со смартфона и отправляет данные на него.

Это не зависит от производителя смартфона или его стоимости. Бывает, что дорогие смартфоны имеют проблемы, а дешевый с NFC — читает «Тройку» без проблем. Бывает, что один смартфон в линейке плохо читает карты, а его обновленная, более свежая версия — хорошо (и наоборот, более дешевая версия в линейке работает с «Тройкой» более стабильно, чем дорогая).

Есть известные проблемы на некоторых устройствах. Мы даже написали соответствующие статьи и сняли видео об этом. Например:

Проблемы с Asus ZenFone Max Pro (M1 и M2)
Проблемы со смартфонами Samsung линейки S
Проблемы с Xiaomi Redmi Note 20 Pro (а также Mi 9T, K20 и т. д.)

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

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

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

Читаем 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:  Лучшие телефоны с NFC до 15000 рублей в 2019 в июле 2019

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