Карта «Тройка» стала персонализированной / Новости города / Сайт Москвы

«город» – программа лояльности карты «тройка»

Необходимо обратиться в службу поддержки Города по телефону 7 495 374 74 28 или отправить запрос на contact@nfcexpert.ru с указанием старого номера и нового.

Необходимо обратиться в службу поддержки Города по телефону 7 495 374 74 28.

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

При оплате покажите ее виртуальный аналог в приложении Город. Для этого откройте раздел «Мои карты» на главном экране. В нем находятся номер «Тройки», штрихкод и QR-код.

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

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

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

Необходимо обратиться в службу поддержки Города по телефону 7 800 555 17 30 или отправить запрос на contact@nfcexpert.ru с указанием старого номера и нового.

Необходимо обратиться в службу поддержки Города по телефону 7 800 555 17 30.

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

Нет, их можно только списывать на услуги и скидки в Городе, а также в счет чека у ряда партнеров приложения по курсу 1 бонус = 1 рубль.

Бонусы доступны в течение 2 лет с момента начисления, после чего аннулируются, если не использованы.

Любой резидент РФ старше 18 лет, являющийся физическим лицом — держателем карты «Тройка».

Необходимо обратиться в службу поддержки Города по телефону 7 495 374 74 28.

В истории операций отображаются только покупки с применением «Тройки» у партнеров Города.

Добавьте перед номером «Тройки» необходимое количество нулей, чтобы в итоге получилось 10 цифр. Например: 0001234567.

Необходимо обратиться в службу поддержки Города по телефону 7 495 374 74 28.

Как проверить баланс счета

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

  1. Желтый терминал.

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

  2. Официальные приложения от разработчиков: «Тройка Проверка баланса», «Транспортные карты Москвы», «Мой проездной».

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

  3. Опция «Мобильный билет».

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

  4. SMS-сообщение. Мобильные операторы МТС, Билайн и Мегафон ввели для своих абонентов специальный короткий номер для проверки баланса и оставшегося количества поездок по действующему абонементу. На номер 3210 посылается СМС со словом – баланс – после чего абонент получает интересующие сведения в ответном SMS-сообщении.

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

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

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

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

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

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

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

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

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

Карту «тройка» теперь можно добавить в samsung pay

Карта «Тройка» стала персонализированной / Новости города / Сайт Москвы

ВТБ, Мосметро, Samsung, Google и Mastercard в ходе тестирования виртуальной «Тройки» добавили возможность её загрузки в систему Samsung Pay. Оплата проезда будет совершаться автоматически при поднесении телефона к турникету или валидатору, без необходимости разблокировки телефона. Кроме того, для фокус-группы ввели ряд скидок на абонементы. Об этом сообщила пресс-служба Samsung.

Скидки распространяются на три вида абонемента «Единый»:

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

Дептранс объявил о начале испытаний виртуальной «Тройки» в начале августа этого года. Члены фокус-группы (изначально 500 человек) получают на почту разного рода задания по поездкам в метро. По итогам тестирования ведомство обещает наградить лучших участников персонализированными транспортными картами и абонементами на месяц поездок.

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

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

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

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

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

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

Карта «Тройка» стала персонализированной / Новости города / Сайт Москвы
Плата контроллера БОРЕЙ в настенном корпусе

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

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

Читайте ещё про NFC:  Как пользоваться картой ВТБ "Тройка" - как пополнить онлайн, условия мультикарты тройка

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

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

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

Обработка 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 без желтого валидатора

Через приложение «Метро Москвы» пассажиры теперь могут пополнить карту «Тройка» полностью в режиме онлайн. Им не придется дополнительно прикладывать карту к желтым валидаторам в метро. Функция стала доступна для пользователей смартфонов на базе Android c поддержкой NFC. Список моделей гаджетов с этой возможностью опубликован на странице приложения в Google Play.

«После того как пассажиры зачислят деньги на счет “Тройки”, им будет достаточно приложить карту к мобильному телефону, и пополнение счета пройдет через NFC-соединение. Благодаря этому можно пополнить счет, например, по дороге на работу, что сэкономит время в пути», — рассказал заместитель Мэра Москвы, руководитель Департамента транспорта и развития дорожно-транспортной инфраструктуры Максим Ликсутов.

Он отметил, что теперь приложение «Метро Москвы» можно использовать для активации отложенного платежа, не прикладывая «Тройку» к желтым валидаторам на станциях подземки. Даже если пассажир пополнит карту любым другим способом, включая «Яндекс.Деньги», Qiwi и Webmoney, он сможет воспользоваться приложением «Метро Москвы» и с помощью NFC-соединения активировать платеж.

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

Обновленную версию приложения уже можно скачать в App Store и Google Play.

«Мы постоянно расширяем возможности оплаты проезда и добавляем самые инновационные способы. Например, совместно с Apple мы запустили новый способ пополнения “Тройки” через наше приложение “Метро Москвы” с помощью Apple Pay», — отметил Максим Ликсутов.

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

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

В новом релизе приложения «Метро Москвы» также появился раздел для болельщиков Кубка конфедераций.

Читайте ещё про NFC:  8 способов пополнения транспортной карты Стрелка

«К Кубку конфедераций ФИФА — 2021 мы добавили для болельщиков специальный раздел на русском, английском, испанском и немецком языках. В нем собрана вся полезная информация для приезжающих на игры Кубка гостей. Это расписание матчей, описание команд-участниц, правила бесплатного проезда в московском транспорте и другая информация», — рассказал Максим Ликсутов.

Метро станет одним из основных видов транспорта для болельщиков, которые приедут на матчи Кубка конфедераций. Турнир пройдет с 17 июня по 2 июля в четырех городах России. Для удобства туристов названия станций на всех линиях метро дублируются на английском языке. Кассы с англоязычными сотрудниками на популярных среди иностранных гостей станциях отметили специальными стикерами. Кроме того, в терминалы метро для покупки билетов загрузили программное обеспечение с дублированием основных функций на английском.

Мобильное приложение «Метро Москвы» появилось в App Store и Google Play в этом году. Его скачали уже более 375 тысяч пользователей.

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

Преимущества и возможности сервиса

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

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

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

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

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

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

Старт платежного приложения — select aid

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

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

'6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00'

Для удобства проанализируем ответ с помощью онлайн-парсера формата TVL

. Тот же ответ карты VISA, обработанный парсером:

Из всего этого нас интересует только идентификатор платежного приложения (AID). В данном случае, это значение A0000000031010, означающее Visa International.

AID помечается маркером 4F. Вторым битом после маркера следует длина данных, в нем содержащихся. Несмотря на то, что длина AID может варьироваться от 5 до 16 байт, в большинстве случаев она равна 7 байтам. Поэтому для простоты поиска AID в ответе, мы будем искать маркер 4F 07 и считать 7 байт после него как AID.

Такой подход очень примитивный и может не работать в случаях, если длина AID будет другой, но для нашей задачи это не важно, так мы скорее всего никогда не столкнемся с картами, отличными от Visa и MasterCard. Поэтому наш самодельный парсер PPSE-ответа можно упростить до такой логики: если ответ начинается с 6F, заканчивается на 90 00 и содержит внутри последовательность 4F 07, ответ считается корректным.

Полный список AID: eftlab.co.uk/knowledge-base/211-emv-aid-rid-pix

Некоторые популярные AID

A0000000031010 Visa International
A0000000032020 Visa International
A0000000041010 Mastercard International
A0000000043060 Mastercard International United States Maestro (Debit)

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

APDU-команда SELECT AID

'00 A4 04 00 07 A0 00 00 00 03 10 10'
  00 A4 04 00 // команда select 
   07 // длина command data (7 байт)
    A0 00 00 00 03 10 10 // AID Visa International

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


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

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

Читаем банковские карты на коленке с примерами. (Много текста)

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

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

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

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

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

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

// Программа для чтения UID карты
begin
  APDU('FF CA 00 00 00');
end.

Начало коммуникации — команда select (ppse)

Официальное описание: EMV Contactless Specifications — PPSE and Application Management for Secure Element

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

APDU-команда SELECT PPSE

'00 A4 04 00 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00'
  00 A4 04 00 // команда select 
   0E // длина command data (14 байт)
    32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 // command data 2PAY.SYS.DDF01
    00 // завершающий маркер

Старт платежного приложения — select aid

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

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

'6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00'

Для удобства проанализируем ответ с помощью онлайн-парсера формата TVL

Читайте ещё про NFC:  Вне очереди: как пополнять карту "Тройка" удаленно

emvlab.org/tlvutils/

. Тот же ответ карты VISA, обработанный парсером:

Карта «Тройка» стала персонализированной / Новости города / Сайт Москвы

Из всего этого нас интересует только идентификатор платежного приложения (AID). В данном случае, это значение A0000000031010, означающее Visa International.

AID помечается маркером 4F. Вторым битом после маркера следует длина данных, в нем содержащихся. Несмотря на то, что длина AID может варьироваться от 5 до 16 байт, в большинстве случаев она равна 7 байтам. Поэтому для простоты поиска AID в ответе, мы будем искать маркер 4F 07 и считать 7 байт после него как AID. Такой подход очень примитивный и может не работать в случаях, если длина AID будет другой, но для нашей задачи это не важно, так мы скорее всего никогда не столкнемся с картами, отличными от Visa и MasterCard. Поэтому наш самодельный парсер PPSE-ответа можно упростить до такой логики: если ответ начинается с 6F, заканчивается на 90 00 и содержит внутри последовательность 4F 07, ответ считается корректным.

Полный список AID: eftlab.co.uk/knowledge-base/211-emv-aid-rid-pix

Некоторые популярные AID

A0000000031010 Visa International
A0000000032020 Visa International
A0000000041010 Mastercard International
A0000000043060 Mastercard International United States Maestro (Debit)

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

APDU-команда SELECT AID

'00 A4 04 00 07 A0 00 00 00 03 10 10'
  00 A4 04 00 // команда select 
   07 // длина command data (7 байт)
    A0 00 00 00 03 10 10 // AID Visa International

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

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

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

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

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

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

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

парсер

:

Карта «Тройка» стала персонализированной / Новости города / Сайт Москвы

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

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

Карта «Тройка» стала персонализированной / Новости города / Сайт Москвы

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

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

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

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

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

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

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

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

'F0 00 00 00'

Подробнее про формат TTQ

здесь

.

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

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

'80A80000238321F0000000000000000000000000000000000000000000000000000000000000000000'
 80 A8 00 00 // Команда GET PROCESSING OPTIONS (GPO)
  23 // длина всего запроса (35 байт)
   83 // маркер PDOL-ответ
    21 // длина PDOL-ответа (33 байта)
     F0 00 00 00 // Terminal Transaction Qualifiers (TTQ)
      00 00 00 00 00 00 // Сумма списания
       00 00 00 00 00 00 // Вторая сумма
        00 00 // Код страны считывателя
         00 00 00 00 00 // Terminal Verification Results (TVR)
          00 00 // Валюта
           00 00 00 // дата 
            00 // тип транзакции
             00 00 00 00 // Случайное число 

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

77

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

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

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

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

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

'00 b2 01 1c 00'
'00 b2 01 0c 00'
'00 b2 02 0c 00'
'00 b2 01 14 00'
'00 b2 02 14 00'
'00 b2 04 14 00'

И парсим все ответы на предмет маркеров

57 13

либо

5A 08

. Найденные 8 байт карты можно дополнительно чекнуть на контрольную сумму с помощью

Алгоритма Луна

.

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

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

Карта «Тройка» стала персонализированной / Новости города / Сайт Москвы

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

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

Adblock
detector