Как привязать карту Тройка к мобильному телефону

Возможна ли оплата в метро с айфона

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

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

Система постоянно совершенствуется и можно отметить ряд преимуществ:

  • расчет при помощи Apple Pay возможно совершать не только на считывающих аппаратах, но и в кассах,
  • терминалах метрополитена;
  • необходимые аппараты для считывания установлены на всей станциях метро;
  • при приобретении билета данным методом распространяется скидка 20% на трансфер.

https://www.youtube.com/watch?v=K_jd5UuhfYM

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

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

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

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

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

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

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

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

Как только iPhone позволит нам положить карту «Тройку», мы это немедленно сделаем. Мало того, нам Apple обещала, что карта «Тройка» будет первой в мире транспортных карт, которой не разрешат доступ к своей платежной системе. Это политика компании, которая пока подсоединяет банки, которые крайне консервативно относятся.
— заместитель мэра Москвы по вопросам транспорта Максим Ликсутов в интервью Эхо Москвы

Дептранс Москвы сообщил, что активно работает над интеграцией цифровой версии проездных «Тройка» в Apple Pay.

Предположительно, она будет совместима с режимом Транспортной экспресс-карты. Это значит, что не нужно будет использовать Face ID или код-пароль для оплаты проезда.

https://www.youtube.com/watch?v=6-aHg33pOLs

Точные сроки не называются, но отмечается, что ведётся «большая и сложная работа».

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

Как только iPhone позволит нам положить карту «Тройку», мы это немедленно сделаем. Мало того, нам Apple обещала, что карта «Тройка» будет первой в мире транспортных карт, которой не разрешат доступ к своей платежной системе. Это политика компании, которая пока подсоединяет банки, которые крайне консервативно относятся. — заместитель мэра Москвы по вопросам транспорта Максим Ликсутов в интервью Эхо Москвы

Кроме того, в этом месяце пройдёт закрытое тестирование Тройки для Android Pay и Samsung Pay.

@Mice , Возможно это(замена всех терминалов) и является локомотивом всей этой истории! На этом ведь можно озолотиться!;)

Обработка 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 // Случайное число 

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

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

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

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

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

troika.jpg

Карту «Тройка» с транспортным приложением «Стрелка» можно получить в кассах ГУП «Московский метрополитен». Карта «Стрелка» с установленным приложением «Тройка» доступна в кассах ГУП МО «Мострансавто». Карты с объединённым функционалом имеют ту же залоговую стоимость, что и обычные карты.

Пополнить баланс объединённой транспортной карты можно с помощью агентской сети пополнения карты «Тройка» и карты «Стрелка», например, в салонах связи «Связной» и «Евросеть», терминалах «Элекснет», кассах и терминалах ОАО «Центральная ППК» и других. Полный список точек пополнения объединённых транспортных карт опубликован на Едином Транспортном Портале и на Официальном сайте транспортной карты «Стрелка».

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

Карты «Тройка» с транспортным приложением «Стрелка» можно приобрести в кассах метрополитена на станциях: «Юго-западная», «Теплый стан», «Бульвар Дмитрия Донского», «Южная», «Выхино», «Котельники», «Косино», «Новокосино», «Новогиреево», «Партизанская», «Щелковская», «ВДНХ», «Медведково», «Тимирязевская», «Речной вокзал», «Ховрино», «Белорусская» Замоскворецкой линии, «Белорусская» Кольцевой линии, «Планерная», «Сходненская», «Тушинская», «Курская» Арбатско-Покровской линии, «Курская» Кольцевой линии, «Павелецкая» Замоскворецкой линии, «Комсомольская» Сокольнический линии, «Комсомольская» Кольцевой линии «Домодедовская», «Кантемировская», «Киевская» Арбатско-Покровской линии, «Киевская» Кольцевой линии, «Парк Победы» Арбатско-Покровской линии.

Билеты, реализуемые на бумажных носителях, также могут быть записаны на карту «Тройка»!

Тарифы МЦД

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

Порядок использования проездных билетов.

Пополнение баланса билета «Кошелёк» карты «Тройка» доступно напрямую из официального мобильного приложения «Метро Москвы»*

* — на мобильных устройствах с поддержкой технологии NFC.

Дает право на совершение поездок в пределах зачисленной суммы по фиксированным тарифам. Карту можно пополнить на сумму до 3 000 руб.

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

Бесплатная пересадка при поездках на МЦД – только на метро, монорельс и МЦК (и обратно). Пересадка на наземный транспорт – платная.

На наземном транспорте бесплатная пересадка возможна в течение 90 минут с начала поездки между разными маршрутами автобуса, электробуса или трамвая.

Пересесть бесплатно в наземном транспорте можно по карте «Тройка», привязанной к личному кабинету в приложении «Метро Москвы» или на сайте nfcexpert.ru.
Как это сделать?

Одна поездка на метро, монорельсе, МЦК, МЦД зона «Центральная» или неограниченное количество поездок на наземном транспорте в течение 90 минут42
Поездка на метро, монорельсе, МЦК и МЦД зоны «Центральная», «Пригород»50
Поездка на метро, монорельсе, МЦК, МЦД зона «Центральная» неограниченное число пересадок на наземном транспорте в течение 90 минут65

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

APDU-команда SELECT PPSE

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

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

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

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

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

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

emvlab.org/tlvutils/

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

Тройка и Apple Pay: можно ли привязать карту "Тройка" и пополнить

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

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

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

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

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

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

APDU-команда SELECT AID

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

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

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

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

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

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

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

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

парсер

:

Тройка и Apple Pay: можно ли привязать карту "Тройка" и пополнить

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

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

Тройка и Apple Pay: можно ли привязать карту "Тройка" и пополнить

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

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

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

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

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

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

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

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

'F0 00 00 00'

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

здесь

.

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

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

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

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

77

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

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

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

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

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

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

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

57 13

либо

5A 08

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

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

.

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

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

Тройка и Apple Pay: можно ли привязать карту "Тройка" и пополнить

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

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