Пропуск у партер – як запускалися Apple Pay і Samsung Pay в Яндекс.Гроші

<img src=«habrastorage.org/files/5bf/648/b0c/5bf648b0c0114394a8f7e45f10cf2e0f.jpg» alt=«image» alt text"/>
На хвилі загального захоплення безконтактної оплатою хочу поділитися підкапотним досвідом Яндекс.Грошей по запуску Apple Pay і Samsung Pay. Нашій команді довелося координувати зусилля з MasterCard і виробниками смартфонів. Подружити цю компанію і не зійти з розуму – завдання саме по собі нетривіальна. До того ж ми були в першій хвилі тих, хто прийшов на "свято", і багато рішень довелося обкатувати на ходу.
Під катом подробиці про підключення безконтактних платежів в Яндекс.Гроші, тестуванні та особливості роботи систем безпеки з новим типом платежів.
У цьому пості мова піде про платіжних системах Apple Pay і Samsung Pay, які базуються на схожих принципах і відрізняються в деталях. Для простоти я буду називати їх просто *Pay скрізь, де деталі не принципові.
Навіщо все це
Оплатити товар з телефону можна давно – досить встановити мобільний додаток вашого банку, в якому повинна бути опція безконтактної оплати (додаток Яндекс.Грошей теж підійде, до речі). Дані про картці зберігаються в захищеному вигляді на пристрої користувача і доступні за технологією HCE – це програмний аналог чіпа банківської карти.
Є й окремі програми на кшталт Гаманця, які пропонують можливості бездротового оплати для банків-партнерів і, як бонус, зберігання дисконтних карток.
Ось чому раніше для безконтактної оплати потрібні додаткові "прошарку":
  1. Власники iPhone не могли платити безконтактно, тому що інтерфейс NFC в смартфонах Apple не можна безпосередньо використовувати для оплати в сторонніх додатках. До того ж NFC з'явився тільки в iPhone 6 і SE.
  2. На багатьох сучасних смартфонах з'явилося окреме пристрій Secure Element (SE), яке виконує функції EMV-чіпа банківської картки і не прив'язане до конкретного банку або карті. Таке уніфіковане рішення користувачеві зручніше і простіше в реалізації банку, у якого до цього не було оплати зі смартфона.
Apple Pay і Samsung Pay потрібні в першу чергу для того, щоб оплата зі смартфона через NFC стала стандартизованої і безпечною.
Невеликий екскурс в появу Secure Element і безпека картокСпочатку платіжні картки випускалися тільки з магнітною смугою, на якій був записаний номер карти. Природно, номер легко копіювався, тому за справу взялася організація EMVCo, яка розробила більш потужний чіп EMV. Ця міра дозволила істотно скоротити число шахрайських операцій, але повністю проблему не вирішила. Крім того, процес оплати був недосконалий і тому тривали роботи над подальшими поліпшеннями.
Далі з'явилися безконтактні платежі на пластику (MasterCard PayPass, VISA PayWave), а потім платіжні функції карти стали частково переходити на мобільні пристрої.
Шлях був тернистим, і серед інших платіжні системи пробували наступні варіанти:
  • SIM-карта з вбудованим чіпом Secure Element, що випускається спільно стільниковим оператором і банком-емітентом;
  • наклейка на телефон з вбудованим бездротовим модулем і Secure Element;
  • використання вбудованого в телефон NFC-адаптера і програмної емуляції Secure Element (HCE).
В кінцевому рахунку MasterCard "перетасував карти" і закріпив за виробниками мобільних пристроїв функції зберігання карткових даних і проведення оплати. Так з'явився MasterCard Digital Enablement Service (MDES) від MasterCard, а потім і *Pay.
Але HCE все одно повністю не зникла, так як дозволяє банкам використовувати власні мобільні додатки для безконтактної оплати. Тобто банк може самостійно додати в свій додаток функцію оплати з карти. Плюс до того, у додатку можна реалізувати якісь фірмові зручності начебто оплати ЖКГ.
до Речі, мобільні Яндекс.Гроші теж залишилася опція безконтактної оплати через HCE — для всіх тих, хто з різних причин не може скористатися *Pay.
Подружити всіх з усіма
Сподіваюся, тепер всі причинно-наслідкові зв'язки відновлені, тому повернемося до проекту безконтактної оплати Яндекс.Грошей.
Якщо все одно щось залишилось туманним – обов'язково запитуйте в коментарях.
Всі подальші сценарії буду ілюструвати на прикладі карт Яндекс.Грошей, по яких набралося більше всього інформації.
Щоб користувач міг невимушено оплатити товар з телефону, потрібна тісна співпраця чотирьох сторін:
  1. сервісу безконтактних платежів від виробника смартфона Apple Pay і Samsung Pay);
  2. платіжної системи (MasterCard);
  3. емітента картки (Яндекс.Гроші);
  4. банка-еквайєра продавця.
Таким чином, команді Яндекс.Грошей потрібно було домовитися з Apple, Samsung, Mastercard і реалізувати підтримку оновлених платіжних протоколів на своїй стороні. Ще потрібно додати прийом платежів через Apple Pay і Samsung Pay в Яндекс.Касу – платіжне рішення для бізнесу. Але це вже інша історія.
<img src=«habrastorage.org/files/b66/540/2ae/b665402ae8b64ba28848c2f944b0f3c6.jpg» alt=«image» alt text"/>
На ілюстрації не вистачає банку-еквайєра – прибрав його для простоти.
Коли користувач додає карту в гаманець, Apple Wallet формує криптограмму з зашифрованими даними карти і цифровим підписом, а потім відправляє її в MasterCard. Там криптограма розшифровується і відбувається токенизация. Токенизация – це формування номери DPAN, який являє собою синонім оригінальної карти, унікальний для кожного фізичного пристрою.
Пам'ять про DPAN і його особливостіDigital Primary Account Number (DPAN) – це спеціальний номер-маркер, який платіжна система видає конкретного пристрою для використання однієї з карт користувача. Такий номер є унікальним для кожного пристрою і тому генерується кожен раз при додаванні однієї і тієї ж карти в гаманець чергового пристрою.
Токен потрібен для того, щоб не зберігати на мобільному пристрої реальних платіжних даних.
Але DPAN не буде згенеровано, поки MasterCard не перевірить підтримку *Pay на боці емітента, тобто Яндекс.Грошей. Для цього необхідно:
  1. Дочекатися перевірки Apple або Samsung можливості використовувати пристрій в якості оплати (не вкрадений телефон, є права Root і т. д.).
  2. Підключитися до MasterCard Digital Enablement Service (MDES). Подробиці про подібних програмах чи не повністю підпадають під NDA, тому бажаючим доведеться запитувати документацію безпосередньо у MasterCard.
  3. Реалізувати підтримку специфічних запитів *Pay.
  4. Протестувати систему з Apple, Samsung і MasterCard. Тестування частково виїзне, тому тут все не так просто, як може здатися.
Але користувач може захотіти додати карту не вручну, а з додатка Яндекс.Грошей. Така можливість є, але використовується трохи інший механізм.
Червоний, жовтий, зелений
Коли користувач додає картку в гаманець телефону, запускається один із трьох сценаріїв подальшого розвитку подій, залежно від ступеня ризику:
  • Зелений. Використовується коли запит на додавання карти приходить від мобільного додатку емітента (Яндекс.Гроші) і в ньому є спеціальний ключ, що підтверджує аутентифікацію користувача в банківському додатку. Додаткових перевірок не потрібно.
  • Жовтий. Зазвичай використовується при додаванні картки вручну або за допомогою камери телефону (OCR). Гаманець запитає CVV-код картки та додатковою аутентифікацію.
  • Помаранчевий. Фактично означає відмову в додаванні карти.
Якщо у вас ще немає пластикової карти Яндекс.Грошей, то для проби пера можна випустити віртуальну прямо в додатку.
Але ми живемо не в ідеальному сферичному світі, тому часто буде використовуватися саме жовтий шлях. Щоб він теж проходив гладко і на етапі розпізнавання реквізитів карти камерою не було проблем, ми відправили в Apple більше 200 фото тестових карток. Без цього навчання алгоритм розпізнавання періодично помилявся і намагався додати в гаманець карту з невірними даними.
Передполітна підготовка
Коли необхідний софт на бэкенде був готовий, а бета-версія Яндекс.Грошей навчена премудростям Apple Pay (для Samsung Pay опція токенизации через наше мобільний додаток поки недоступна), настала важка пора тестування.
до Речі, для підключення до "банкету" недостатньо все реалізувати і повідомити MasterCard про готовність – платіжна система і виробники телефонів обов'язково перевірять вас особисто. Наприклад, з приводу Apple Pay до нас приїхав товариш з компанії UL з набором всіляких гаджетів Apple. Одних тільки iPhone у нього було 6 штук — 3 покоління в 2 версіях (проста й Plus). З їх допомогою аудитор перевірив безліч сценаріїв оплати, включаючи повернення коштів.
Оновлений процесинг Яндекс.Грошей працював в ізольованому тестовому сегменті, тому для перевірки використовувався "білий список" карт – для них MasterCard просто включив платежі *Pay. Але ось з тестовою середовищем від Apple були деякі складності.
Наприклад, окремої платіжної інфраструктури для обкатки не було, тому тестувальникам Яндекс.Грошей довелося перевести свої смартфони і Apple ID регіон "США" і підбирати відповіді на деякі запити самостійно.
Але диявол криється в деталях, а помилки – на останній милі. Виявилося, що далеко не всі банки стежать за оновленням прошивки своїх терміналів, а касирам здебільшого чужі сучасні технології.
<img src=«habrastorage.org/files/4b3/a09/a80/4b3a09a80e48424e9688ec6fab61ad4f.jpg» alt=«image» alt text"/>
Мапу давайте...
Моделей платіжних терміналів і прошивок до них досить багато, і у найдавніших з них мізки сходили з розуму від *Pay. Довелося розуміти і прощати, попутно повідомляючи в підтримку відповідних банків про «невеликі складнощі з POS-терміналом».
Коли всі вже начебто працювало, за деякими транзакцій в мобільний гаманець стали приходити суми з прочерком. Це явно означало проблеми поза систем Яндекс.Грошей. Звичайно, на саму оплату такі звіти не впливали, але когнітивний дисонанс був присутній.
(Не)лазівка для шахраїв
Токенизация карт з боку Яндекс.Грошей, як і інших банків, супроводжується перевіркою таких запитів на шахрайські патерни. Для цього в Яндекс.Гроші існує окремий механізм зі своєю складною логікою і повноваженнями блокувати вкрай підозрілі операції – система антифрода.
Так як система працює на основі певних правил, виявилася потенційна проблема з безпекою при токенизации чужої картки на пристрій. Для цього потрібні номер картки, термін дії та CVC2. Так, емітент напевно додатковою валідацію, але навіть у випадку з SMS-паролем фішинг і соціальна інженерія працюють. При сумі оплати до 1000 рублів термінал навіть пін-код не запитає, а SMS-оповіщення включені до цих пір не у всіх власників карт.
З такими погрозами можна боротися на рівні процесингу. Кожна дія користувача зі своїм рахунком або картою розглядається в режимі онлайн фрод-машиною: якщо спрацює хоча б одне блокуючу правило, то транзакція буде відхилена.
Для кожного користувача Яндекс.Грошей формується індивідуальний поведінковий профіль: що він любить і не любить, як і коли зазвичай платить, типові періоди активності і безліч інших ознак. На основі цієї інформації і з допомогою машинного навчання будується прогноз майбутніх значень, тобто найбільш ймовірних дій людини. Якщо антифрод помічає відхилення фактичних показників від їх прогнозу, то може запитати додаткову аутентификацию або відхилити транзакцію.
Про машинне навчання в системах безпеки можна багато цікавого розповісти у зв'язку з його давнім впровадженням в Яндекс.Грошах, але це вже тема окремої статті.
Якщо ви по роботі стикалися з іншими нюансами підключення до *Pay – поділіться в коментарях, багатьом буде цікаво.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.