Как известно, в 2015 году мы запустили в эксплуатацию платежную
систему Мир, и карты Мир в России принимаются повсеместно. Это,
конечно, очень здорово, но сейчас набирает популярность
использование мобильных кошельков для оплаты покупок. Согласно
статистике, в 2019 году 19% всех операций составляют платежи при
помощи смартфона. В 2017 году их было всего 3%. В 2018 году
собственное платёжное приложение Mir Pay
представила и платежная система Мир. Mir Pay написан на
Kotlin, может работать на телефонах с поддержкой NFC
и операционной системой Android 6.0 и выше.
Меня зовут Богданов Валерий, я являюсь руководителем группы
тестирования в команде мобильных платежей департамента
информационных технологий НСПК, и я расскажу о том, как работают
мобильные кошельки на примере нашего приложения Mir
Pay.
Сначала рассмотрим, как работает оплата с использованием
пластиковой карты. В классическом случае карта выдается держателю
банком-эмитентом. При этом карта в защищенной области памяти хранит
общий с эмитентом ключ MK-AC (Application Cryptogram
Master Key). Во время совершения оплаты (при
online-операции) карта генерирует на основе MK-AC
сессионный ключ SK-AC (Application Cryptogram Session
Key) и на нем, с использованием данных карты и данных об
операции, полученных с терминала, генерирует криптограмму
ARQC (Authorization Request Cryptogram). В основе
генерации криптограммы лежит алгоритм 3DES (Triple
DES). В общем случае данные по операции поступают от карты к
терминалу, далее на хост банка-эквайрера (т.е. обслуживающего
торговую точку), затем к платежной системе и на самом последнем
этапе к банку-эмитенту (т.е. выдавшему карту) для авторизации.
Эмитент проверяет криптограмму, сгенерировав ее сам на основе
данных об операции, пришедших вместе с ARQC и сравнив ее со
значением из полученных данных. Банк-эмитент может одобрить или
отклонить операцию по результатам анализа карточных данных,
криптограммы, установленных лимитов, оценки рисков, а также других
параметров.
А теперь рассмотрим, чем отличается оплата с помощью мобильного
кошелька. Здесь банк-эмитент ничего держателю кошелька не выдает
(кроме карты, конечно, но она непосредственного участия в оплате не
принимает), вместо этого держатель карты вносит ее данные в
кошелек, и она в нем появляется, точнее не она, а специальный
токен-профайл, сгенерированный на базе этой карты. Уже сейчас
понятно, что организовать оплату, как в классическом случае не
получится, так как в телефоне отсутствуют карточные данные и ключ
эмитента MK-AC вместо них используется токен-профайл и его
специальные ключи. Перед тем как разбираться с оплатой, давайте
поймем, что происходит, когда карта добавляется в мобильный
кошелек.
Держатель карты вводит данные в приложение (1), которое
передает их в зашифрованном виде (об этом чуть позже) через хосты
поставщика услуг мобильного кошелька (WSP Wallet Service
Provider) в платежную систему. В случае с Mir Pay
поставщиком услуг кошелька является НСПК, поэтому данные сразу
попадают в платежную систему (2). Далее обработка происходит
на платформе мобильных платежей (ПМП). ПМП расшифровывает данные,
по номеру карты определяет, каким эмитентом она была выдана, и
запрашивает у него подтверждение на возможность добавления карты в
кошелек (3). В случае положительного ответа (4) для
данной карты происходит процедура генерации токен-профайла
(5) и отправка его на телефон (6). Таким образом,
вместо карточных данных на мобильном устройстве будет храниться
токен-профайл, привязанный к данной карте и данному устройству.
Отметим, что преобразование токен-профайла в исходные карточные
данные вне платформы мобильных платежей невозможно. После
сохранения токен-профайла на устройстве пользователя Mir Pay
запрашивает у ПМП (7) пачку одноразовых ключей, которые
будут использоваться приложением при совершении покупки в качестве
сессионных ключей, аналогичных упомянутым выше SK-AC. Как
видно из названия, одноразовый ключ не может быть применен более
одного раза, поэтому в процессе использования приложение Mir
Pay периодически подгружает из ПМП новые порции ключей. На этом
добавление карты в приложение завершается.
Теперь рассмотрим, как изменился процесс оплаты по сравнению с
оплатой по пластиковой карте.
Первый этап почти такой же, только вместо данных карты используются
данные токен-профайла, а криптограмма ARQC генерируется на
одноразовом ключе, полученном от ПМП в качестве сессионного
SK-AC. Еще одно отличие Mir Pay от пластиковых карт
состоит в том, что при генерации криптограммы вместо 3DES
используется более современный симметричный алгоритм блочного
шифрования AES (Advanced Encryption Standard).
Далее, данные об операции так же проходят через терминал, хост
банка-эквайрера и попадают в платежную систему. По номеру токена
(из токен-профайла) платежная система определяет, что имеет дело не
с обычной картой, а именно с токеном, и направляет операцию в ПМП
для проверки криптограммы и так называемой детокенизации
превращения токена обратно в данные реальной карты. Да,
криптограмма теперь проверяется не эмитентом, а ПМП, так как именно
в недрах платформы генерируются те самые одноразовые ключи и
токен-профайл. Далее операция с уже карточными данными направляются
банку-эмитенту на авторизацию. На обратном пути обратное
преобразование.
В Mir Pay используется схема с одноразовыми ключами, но
существует и другой подход хранение одного ключа на устройстве.
Такой подход требует наличия элемента безопасности на устройстве и
некоторые кошельки могут его применять с учетом того, что на
определенных устройствах такой элемент безопасности присутствует. В
нашем случае, учитывая огромное многообразие телефонов с ОС
Android это просто не достижимо. Данная специфика и
объясняет выбранную схему.
Рассматривая процесс токенизации, описанный выше, можно заметить
один тонкий момент: при оплате кошельком используются данные
токен-профайла, однако при добавлении карты ее данные отправляются
на хосты платежной системы, а эти данные являются строго
конфиденциальными. Для защиты карточных данных в Mir Pay
предусмотрена многоступенчатая система защиты. При запуске
автоматически включается механизм контроля целостности приложения и
проверки окружения, не допускающий использование подложного
приложения, модифицированного посторонними лицами. В случае
обнаружения существенного риска, приложение сообщает об этом
пользователю и автоматически удаляет все хранимые токен-профайлы.
Дополнительно результаты данных проверок анализируются еще и на
стороне ПМП.
Для обмена конфиденциальными данными ПМП и Mir Pay
генерируют ключевые пары и обмениваются публичными компонентами. В
силу того, что мы не можем на 100% доверять встроенному хранилищу
ключей, была разработана схема с хранением разных ключевых
компонент в разных местах: как в ключевом хранилище, так и в
оперативной памяти. То есть для инициирования мошеннической
операции необходимо, во-первых, извлечь криптограммы всех этих
ключей, а во-вторых их нужно еще и расшифровать! Но это не так-то
просто и не особо эффективно, поскольку для проведения операций
используются строго одноразовые ключи. И только после того, как
Mir Pay и ПМП обменялись публичными ключами, то есть
фактически создали защищенный канал, допускается передача
чувствительных данных, которые шифруются крипто-стойкими
алгоритмами. По этому механизму на устройство пользователя
доставляются и токен-профайл, и одноразовые ключи для проведения
операций, и данные по уже совершенным операциям.
Как видно из этого описания, безопасность платежей на базе
мобильных кошельков не только сохраняется на уровне пластиковых
карт, а в некоторых случаях даже его превосходит! Приложение Mir
Pay соответствует международным и отечественным требованиям к
безопасности и позволяет держателям карт Мир использовать мобильный
телефон для оплаты, не опасаясь утечки личных данных.
На текущий момент разработка Mir Pay продолжается выпустив в
сжатые сроки первые версии, мы уже внедряем новые разработки в
приложение, не забывая улучшать то, что уже сделано.
Ряд моментов требует развития, нужно учитывать вышедшие недавно и
планируемые к выпуску модели смартфонов, лишенные гуглосервисов,
перейти на российские аналоги или разработать собственное
решение.