Как работают мобильные кошельки на примере приложения «Mir Pay»

Как известно, в 2015 году мы запустили в эксплуатацию платежную систему «Мир», и карты «Мир» в России принимаются повсеместно. Это, конечно, очень здорово, но сейчас набирает популярность использование мобильных кошельков для оплаты покупок. Согласно статистике, в 2019 году 19% всех операций составляют платежи при помощи смартфона. В 2017 году их было всего 3%. В 2018 году собственное платёжное приложение Mir Pay представила и платежная система «Мир». Mir Pay написан на Kotlin, может работать на телефонах с поддержкой NFC и операционной системой Android 6.0 и выше.

70-zzogfmnbymrec6xnuj2b-ofm.jpeg

Меня зовут Богданов Валерий, я являюсь руководителем группы тестирования в команде мобильных платежей департамента информационных технологий НСПК, и я расскажу о том, как работают мобильные кошельки на примере нашего приложения Mir Pay.

Сначала рассмотрим, как работает оплата с использованием пластиковой карты. В классическом случае карта выдается держателю банком-эмитентом. При этом карта в защищенной области памяти хранит общий с эмитентом ключ MK-AC (Application Cryptogram Master Key). Во время совершения оплаты (при online-операции) карта генерирует на основе MK-AC сессионный ключ SK-AC (Application Cryptogram Session Key) и на нем, с использованием данных карты и данных об операции, полученных с терминала, генерирует криптограмму ARQC (Authorization Request Cryptogram). В основе генерации криптограммы лежит алгоритм 3DES (Triple DES). В общем случае данные по операции поступают от карты к терминалу, далее на хост банка-эквайрера (т.е. обслуживающего торговую точку), затем к платежной системе и на самом последнем этапе к банку-эмитенту (т.е. выдавшему карту) для авторизации.

7lbp_ucooymbdz0el6ecowozx-m.jpeg

Эмитент проверяет криптограмму, сгенерировав ее сам на основе данных об операции, пришедших вместе с ARQC и сравнив ее со значением из полученных данных. Банк-эмитент может одобрить или отклонить операцию по результатам анализа карточных данных, криптограммы, установленных лимитов, оценки рисков, а также других параметров.

А теперь рассмотрим, чем отличается оплата с помощью мобильного кошелька. Здесь банк-эмитент ничего держателю кошелька не выдает (кроме карты, конечно, но она непосредственного участия в оплате не принимает), вместо этого держатель карты вносит ее данные в кошелек, и она в нем «появляется», точнее не она, а специальный токен-профайл, сгенерированный на базе этой карты. Уже сейчас понятно, что организовать оплату, как в классическом случае не получится, так как в телефоне отсутствуют карточные данные и ключ эмитента MK-AC — вместо них используется токен-профайл и его специальные ключи. Перед тем как разбираться с оплатой, давайте поймем, что происходит, когда карта «добавляется» в мобильный кошелек.

lylzmues-j8v8iwxdg5m2qpld5i.jpeg

Держатель карты вводит данные в приложение (1), которое передает их в зашифрованном виде (об этом чуть позже) через хосты поставщика услуг мобильного кошелька (WSP — Wallet Service Provider) в платежную систему. В случае с Mir Pay поставщиком услуг кошелька является НСПК, поэтому данные сразу попадают в платежную систему (2). Далее обработка происходит на платформе мобильных платежей (ПМП). ПМП расшифровывает данные, по номеру карты определяет, каким эмитентом она была выдана, и запрашивает у него подтверждение на возможность добавления карты в кошелек (3). В случае положительного ответа (4) для данной карты происходит процедура генерации токен-профайла (5) и отправка его на телефон (6). Таким образом, вместо карточных данных на мобильном устройстве будет храниться токен-профайл, привязанный к данной карте и данному устройству. Отметим, что преобразование токен-профайла в исходные карточные данные вне платформы мобильных платежей невозможно. После сохранения токен-профайла на устройстве пользователя Mir Pay запрашивает у ПМП (7) пачку одноразовых ключей, которые будут использоваться приложением при совершении покупки в качестве сессионных ключей, аналогичных упомянутым выше SK-AC. Как видно из названия, одноразовый ключ не может быть применен более одного раза, поэтому в процессе использования приложение Mir Pay периодически подгружает из ПМП новые порции ключей. На этом добавление карты в приложение завершается.

Теперь рассмотрим, как изменился процесс оплаты по сравнению с оплатой по пластиковой карте.

s6elikamzkvcmuqsqsimayjojh0.jpeg

Первый этап почти такой же, только вместо данных карты используются данные токен-профайла, а криптограмма ARQC генерируется на одноразовом ключе, полученном от ПМП в качестве сессионного SK-AC. Еще одно отличие Mir Pay от пластиковых карт состоит в том, что при генерации криптограммы вместо 3DES используется более современный симметричный алгоритм блочного шифрования AES (Advanced Encryption Standard).

Далее, данные об операции так же проходят через терминал, хост банка-эквайрера и попадают в платежную систему. По номеру токена (из токен-профайла) платежная система определяет, что имеет дело не с обычной картой, а именно с токеном, и направляет операцию в ПМП для проверки криптограммы и так называемой детокенизации — превращения токена обратно в данные реальной карты. Да, криптограмма теперь проверяется не эмитентом, а ПМП, так как именно в недрах платформы генерируются те самые одноразовые ключи и токен-профайл. Далее операция с уже карточными данными направляются банку-эмитенту на авторизацию. На обратном пути — обратное преобразование.

В Mir Pay используется схема с одноразовыми ключами, но существует и другой подход — хранение одного ключа на устройстве. Такой подход требует наличия элемента безопасности на устройстве и некоторые кошельки могут его применять с учетом того, что на определенных устройствах такой элемент безопасности присутствует. В нашем случае, учитывая огромное многообразие телефонов с ОС Android это просто не достижимо. Данная специфика и объясняет выбранную схему.

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

Для обмена конфиденциальными данными ПМП и Mir Pay генерируют ключевые пары и обмениваются публичными компонентами. В силу того, что мы не можем на 100% доверять встроенному хранилищу ключей, была разработана схема с хранением разных ключевых компонент в разных местах: как в ключевом хранилище, так и в оперативной памяти. То есть для инициирования мошеннической операции необходимо, во-первых, извлечь криптограммы всех этих ключей, а во-вторых их нужно еще и расшифровать! Но это не так-то просто и не особо эффективно, поскольку для проведения операций используются строго одноразовые ключи. И только после того, как Mir Pay и ПМП обменялись публичными ключами, то есть фактически создали защищенный канал, допускается передача чувствительных данных, которые шифруются крипто-стойкими алгоритмами. По этому механизму на устройство пользователя доставляются и токен-профайл, и одноразовые ключи для проведения операций, и данные по уже совершенным операциям.

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

На текущий момент разработка Mir Pay продолжается — выпустив в сжатые сроки первые версии, мы уже внедряем новые разработки в приложение, не забывая улучшать то, что уже сделано.

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

© Habrahabr.ru