Карту «Тройка» можно будет добавить в Apple Pay |

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

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

  1. Передача сигнала у карт «Тройка» незначительна. Работают они на очень близком расстоянии. Чтобы транзакция осуществилась, придется класть карточку к турникету вплотную. Чехлы же не позволяют это сделать. Отсюда и проблемы со считыванием данных. Прежде чем платеж пройдет, человек обратит на себя всеобщее внимание, так как специальный сигнал будет звучать и слышим окружающими.
  2. Внушительный размер карточки. Не под каждый чехол «Тройка» вместится, так как ее размер такой же как кредитка. Нередко края карты остаются снаружи и чехол не удается закрепить на гаджете так как нужно. Некоторые лица ухитряются уменьшать платежное средство, но после такой махинации оно уже не работает полноценно. Практически по всей карте идут «дорожки» НФС-чипа и задев одну из них вы рискуете испортить карту.
  3. Блокировка работы бесконтактных сервисов. Если вы пользуетесь Apple/Android/Samsung Pay, то установка «Тройки» на задней части корпуса смартфона станет причиной постоянных сбоев как при оплате проезда, так и покупок.

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

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

Applepay: плюсы и минусы

К преимуществам сервиса от известной компании
относят:

  1. Удобство — больше не нужно таскать с собой кредитки или наличные, чтобы оплатить товар. Нужен лишь мобильный телефон. При потере смартфона добавление карточек на новый займет несколько минут. Переоформление утерянных кредиток может растянуться на несколько дней.
  2. Умная система сортировки — все банковские карточки будут видны в 1 приложении вне зависимости от организации, которая выдала вам кредитку. К Apple Pay можно привязать карту «Тройка», Тинькофф Black, универсальную от Сбербанка и т.д.
  3. Постоянное развитие — компания подумывает о возможности оформления кредита через Wallet. Это одна из функций, которые корпорация планирует добавить в приложение.
  4. Выгодно — благодаря эппл пэй можно мониторить свои затраты, оптимизировать расходы. В грамотных руках приложение — мощный инструмент для контроля средств и развития финансовой грамотности.
  5. Интуитивно понятный — дизайнеры компании постарались сделать оформление как можно более простым для обычного пользователя. Разобраться можно за несколько минут.
  6. Бесплатность — приложение полностью бесплатно и не требует каких-либо взносов. Остерегайтесь мошенников, которые могут вымогать деньги под видом установки Apple Wallet на ваш смартфон.

Известные недостатки Apple Pay:

  1. Не всегда под рукой — мобильные телефоны могут разрядиться в самый неподходящий момент. Смартфон также можно просто потерять, тогда все карты придется привязывать заново.
  2. Подойдет не всегда — если банковский терминал не принимает бесконтактные платежи от ApplePay, придется воспользоваться привычной карточкой.
  3. Уязвимости — технология новая, но ее перспективность омрачает возможность взлома и траты средств с карточки. Компания постоянно совершенствует механизмы защиты, но опытные хакеры все равно могут воспользоваться дырами.
  4. Непонимание людей — в небольших городах консерватизм населения может вынуждать пользоваться обычными банковскими картами или наличными. Страх также подкрепляется багами и другими слабыми местами перспективной разработки.

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

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

  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 есть в главе «Первый прототип».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте ещё про NFC:  NFC в телефоне - что это и как пользоваться функцией

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

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

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

Мой проездной — удобное приложение для работы проездными картами — ресурсы — mi community — xiaomi

Привет Ми-Фаны!

Давно от меня ничего не было, простите, постараюсь в ближайшее время исправиться. Приступаю!

Вчера возникла такая трудность, на карте «Тройка» осталась всего 1 поездка на метро, а больше всего на свете я ненавижу стоять в очередях в кассу. Недавно на Хабре наткнуся на описание приложения «Мой проездной» и заинтересовался.

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

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

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

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

После входа, видим приветственное окно, которое просит нас поднести карту к NFC чипу

А далее, мы попадаем в меню карты

где при нажатии на кнопку Р, можно пополнить её баланс

Всё делается «не отходя от кассы». Не нужны ни какие валидаторы, ВСЁ прямо с телефона.

Меню в целом не обладает большой фцнкциональностью:

Разве что очень понравился момент добавления кредитных карт. Можно добавить несколько для ЕЩЁ более быстрой оплаты:

В конце моего маленького обзора покажу меню настроек:

И несколько важных вырезок из ГуглПлэя:

Смарфоны Xiaomi: Все Xiaomi с NFC-модулем или NFC-ридером

Ограничения:
1.        Для работы мобильного приложения необходимо мобильное устройство с операционной системой Android 4.0 и выше, доступ в интернет, поддержка технологий NFC и Mifare Classic.
2.        Если Ваш телефон не поддерживает технологию Mifare Classic, то вам доступно только отложенное пополнение Кошелька карты Тройка и чтение одноразовых проездных билетов метро, наземного транспорта и пригородных электричек. При этом после отложенного пополнения Кошелька ОБЯЗАТЕЛЬНО воспользуйтесь жёлтым терминалом, установленным в вестибюле каждой станции метро, для актуализации баланса карты Тройка.
3.        Для покупки и записи билета в транспортное приложение, размещенное на SIM карте, воспользуйтесь вторым телефоном с установленным приложением «Мой проездной» (важно, чтобы данный телефон поддерживал технологию Mifare Classic), приложите его к телефону с SIM картой, поддерживающей транспортное приложение, оплатите нужный вам тип билета и запишите его на телефон со специальной SIM картой. Внимание! В момент чтения и записи телефоны прикладываются друг к другу задними крышками!
4.        Услуги оказываются только при наличии технической возможности их оказания в конкретный момент времени, в т.ч. и на стороне технологических партнеров Банка.
5.        В приложении используется расписание на пригородные электрички, предоставляемое ОАО ЦППК на момент запроса.
6.        НЕ ВСЕ телефоны с NFC поддерживают карты Mifare Classic (карта Тройка). И дело здесь не в том, является Ваш смартфон флагманским или нет, особенно это относится к смартфонам Samsung.

Официальная ссылка: https://play.google.com/store/ap … transport&hl=ru

Настройка карты в приложении wallet для использования в качестве транспортной экспресс-карты

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

Настройка новой транспортной карты в приложении wallet

Новую транспортную карту можно настроить для использования в качестве транспортной экспресс-карты с оплатой через Apple Pay в приложении Wallet:

  1. Убедитесь, что на устройстве выбран верный регион.
    • На устройстве iPhone: перейдите в меню «Настройки» > «Основные» > «Язык и регион», затем прокрутите вниз до пункта «Регион».
    • На часах Apple Watch: откройте приложение Watch на iPhone и перейдите на вкладку «Мои часы». Затем выберите раздел «Основные» > «Язык и регион» и проверьте регион.
  2. Откройте приложение Wallet на iPhone.
  3. Нажмите кнопку «Добавить» кнопка «Добавить», затем — «Продолжить».
  4. Выберите транспортную карту вашего города, затем сумму, которую необходимо перевести на карту, и нажмите «Добавить»4.
  5. Следуйте инструкциям по созданию транспортной карты на iPhone.
  6. Включите режим транспортной экспресс-карты для вашей новой транспортной карты.

Использование транспортных карт может быть ограничено в зависимости от региона. Некоторые транспортные карты могут быть недоступны в вашем регионе. Возможно, вам придется обратиться в местное транспортное агентство, чтобы узнать, поддерживается ли в вашем городе или регионе добавление транспортных карт в приложение Wallet.

Настройка приложения для оплаты nfc

Моя рекомендация – используйте проверенное временем и надежное приложение для бесконтактной оплаты Google Pay. Скажу сразу — настройка чуть более замороченная, чем с тем же NFC на Honor 10 Lite.

Полная инструкция настройки выглядит так:

  1. Зайдите в приложение Play Market и подключите к телефону Google профиль.

    Как записать “Тройку” на телефон NFC

  2. Согласитесь (на свое усмотрение) с применением резервных копий и жмите «Ещё».

    Как записать “Тройку” на телефон NFC

  3. Найдите через поиск в Play Market приложение Google Pay.

    Как записать “Тройку” на телефон NFC

  4. Установите его и запустите.

    Как записать “Тройку” на телефон NFC

  5. Нажмите «Начать» для привязки карты.

    Как записать “Тройку” на телефон NFC

  6. Разрешите приложению все доступы, для правильной работы.

    Как записать “Тройку” на телефон NFC

  7. Временно выйдите из программы и зайдите в «Настройки».

    Как записать “Тройку” на телефон NFC

  8. Откройте «Подключение и общий доступ» и зайдите в раздел «Бесконтактная оплата».

    Как записать “Тройку” на телефон NFC

  9. Нажмите «Оплата по умолчанию».

    Как записать “Тройку” на телефон NFC

  10. Выставите только что установленный «Google Pay».

    Как записать “Тройку” на телефон NFC

  11. Вернитесь в приложение Google Pay и жмите «Настроить».

    Как записать “Тройку” на телефон NFC

  12. На этом этапе введите персональные данные своей карты (номер, год и месяц и CVV2). По условиям безопасности программа не разрешает скринить эту страницу с данными. Затем жмите «Продолжить». Ожидайте, пока подтянуться данные.

    Как записать “Тройку” на телефон NFC

  13. Ознакомьтесь с условиями использования.

    Как записать “Тройку” на телефон NFC

  14. Согласитесь с ними для продолжения.

    Как записать “Тройку” на телефон NFC

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

    Как записать “Тройку” на телефон NFC

  16. Жмите «Настроить» и выберите один из способов защиты (пароль предпочтительнее).

    Как записать “Тройку” на телефон NFC

  17. Обязательно его запомните.

    Как записать “Тройку” на телефон NFC

  18. Задайте пароль и повторите его в следующем поле.

    Как записать “Тройку” на телефон NFC

  19. Далее подтвердите данные карты.

    Как записать “Тройку” на телефон NFC

  20. На телефон, указанный в банке-эмитенте как финансовый, придет SMS с кодом. Этот код введите в поле для подтверждения.

    Как записать “Тройку” на телефон NFC

  21. Готово, карта привязана и практически готова к применению.

    Как записать “Тройку” на телефон NFC

Обработка 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 можно найти в

Читайте ещё про NFC:  Поддерживает ли NFC ваш телефон? Как узнать есть ли модуль NFC

Карта ожидает ответ на 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.

Предоставление разрешений на оплату nfc

После настройки в Xiaomi Redmi Note 8T нужно выставить разрешения на оплату телефоном через Google Pay:

  1. Через шторку уведомлений долгим тапом нажмите на NFC.

    Как записать “Тройку” на телефон NFC

  2. В открывшихся настройках выберите появившийся раздел «Расположение элемента безопасности».

    Как записать “Тройку” на телефон NFC

  3. Вместо SIM выберите «Кошелек HCE».

    Как записать “Тройку” на телефон NFC

  4. Готово.

    Как записать “Тройку” на телефон NFC

Следующий этап – предоставить доступ к аппаратным компонентам NFC:

  1. Зайдите в «Настройки» и кликните «Приложения».

    Как записать “Тройку” на телефон NFC

  2. Откройте раздел «Все приложения».

    Как записать “Тройку” на телефон NFC

  3. Отыщите и откройте «Google Pay», выберите «Другие разрешения».

    Как записать “Тройку” на телефон NFC

  4. Нажмите на пункт «NFC».

    Как записать “Тройку” на телефон NFC

  5. Выберите «Разрешить».

    Как записать “Тройку” на телефон NFC

  6. Готово.

    Как записать “Тройку” на телефон NFC

Если проделать все эти операции от начала до конца, то получится настроить NFC на Xiaomi Redmi Note 8T и оплачивать им покупки.

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

Читайте ещё про NFC:  Nfs функция в телефоне что это

APDU-команда SELECT PPSE

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

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

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

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

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

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

emvlab.org/tlvutils/

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

Карту «Тройка» можно будет добавить в Apple Pay |

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

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

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

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

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

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

APDU-команда SELECT AID

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

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

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

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

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

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

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

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

парсер

:

Карту «Тройка» можно будет добавить в Apple Pay |

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

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

Карту «Тройка» можно будет добавить в Apple Pay |

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

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

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

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

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

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

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

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

'F0 00 00 00'

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

здесь

.

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

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

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

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

77

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

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

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

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

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

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

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

57 13

либо

5A 08

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

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

.

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

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

Карту «Тройка» можно будет добавить в Apple Pay |

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

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

Adblock
detector