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

    Как известно, в 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 продолжается – выпустив в сжатые сроки первые версии, мы уже внедряем новые разработки в приложение, не забывая улучшать то, что уже сделано.

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

    Комментарии 27

      0
      А можно помимо Мира добавить и карты других системы? Visa и Mastercard?
      Технически возможно? только стратегически не делаете?

      Почему вопрос, в июле был в небезызвестном регионе, и потребовалась оплата телефоном, и с удивлением обнаружил, что приложение то есть, но карт системы Мир у меня нет в текущий момент (решил конечно потом оперативно через выпуск виртуалки), хотя на кассах Виза-Мастеркард вполне себе работают NFC.
        +1
        Mir Pay – это разработка платежной системы «Мир» для оплаты с помощью Android-смартфона, независимо от производителя. Привязать к кошельку можно карты именно платежной системы «Мир».
        0
        В Mir Pay используется схема с одноразовыми ключами, но существует и другой подход – хранение одного ключа на устройстве. Такой подход требует наличия элемента безопасности на устройстве и некоторые кошельки могут его применять с учетом того, что на определенных устройствах такой элемент безопасности присутствует. В нашем случае, учитывая огромное многообразие телефонов с ОС Android это просто не достижимо.

        А разве Android Keystore не обеспечивает защиту и неизвлекаемость ключей?
          +2
          Дело в том, что в AKS ключи могут быть достаточно надежно защищены, если в телефоне использутеся аппаратные элементы безопасности (например TEE (Trusted Execution Environment) или SE (Secure Element)), и в большинстве телефонов они есть, но их наличие не обязательно, и, если их нет, то используется порграммно-реализуемое хранилище, которое мы не можем считать достаточно надежным «из коробки». К такому хранилищу, при должном упорстве все же доступ получить куда проще чем к данным в аппаратном элементе, в силу этого и была разработана схема хранения ключей дополняющая AKS.
            +2
            Но в случае если TEE/SE есть — они используются?
              +2
              Обязательно.
              0
              А почему не использовать как SE чип который по определению есть во всех телефонах? Я имею в виду SIM-карту. Ну или eUICC как сейчас модно?
                +1
                потому что нужна инфраструктура безопасного провиженинга апплетов на карту? и кому это надо? за чей счет банкет? идея-то не нова. но это перекраивать и операторскую инфраструктуру, и банковскую, интегрироваться, как-то заставить производителей осей и телефонов поддерживать эти механизмы через API.
                Финансовый выхлоп со всего этого — какой?
            0

            Mir Pay как и Google Pay выпускает виртуальные номера и проводит транзакции через них?

              +1
              Да, грубо говоря, в этом и состоит суть токенизации — основы большинства мобильных кошельков.
              –2
              По личной статистике, на примере Mir Pay можно показать только как НЕ работают мобильные кошельки…
                +2
                Достаточно удивительно сейчас такое слышать, — в начале, после запуска, действительно были проблемы с раскаткой прошивок на терминалах, но сейчас, по личному опыту, — достаточно трудно найти терминал, где Mir Pay не принимают, не помню уже чтобы такое было.
                  +1
                  В московском метро уже заработало? До ковида не разу не сработало. Проверить только в пятницу смогу.
                    0
                    Подписываюсь на тот же вопрос. В прошлом году тестировал (не)работу приложения и отказался от приложения и карт мир (не работали). Кредитную карту на мир тоже не выпустить.
                      +1
                      В метро Москвы Mir Pay принимается в турникетах, на которых есть наклейка о приеме банковских карт, в том числе «Мир».
                        0
                        Заработать то заработало, но на третий раз упало в стоп-лист и как от туда достовать не ведомо. Методика для Google Pay не срабатывает. Похоже виртуальный номер который выдаёт MirPay терминалу банки не умеют сопоставить номеру на пластике. А как узнать виртуальный номер не известно:(
                          0
                          Карта может оказаться в стоплисте, если на ней не было достаточно средств для покупки или она заблокирована банком. Если ничего подобного не было, то вы можете написать мне в личку, мы с вами уточним данные и я передам все коллегам для выяснения причины. Так же можно обратиться в нашу в службу поддержки.
                            0
                            Написал.
                        0

                        Пользуюсь приложением с июля 2019г. И действительно, сейчас ситуация с приемом MIR Pay значительно улучшилась, но у нас, в Воронеже, до сих пор в сети магазинов Лента оплата приложением не работает. С авторизацией через гугл вообще полный аут, понятно, что это проще всего было сделать, но можно было использовать номер телефона(универсальный идентификатор и не зависит от сторонних сервисов). Так же недавно было выпущено обновление, которое позволяет оплачивать покупки до 1000 рублей без разблокировки(активацией экрана) Где тут безопасность? Из темы приложения с форума 4Pda у некоторых оплата сработывает даже без разблокировки экрана. Причем отключить этот функционал или уменьшить сумму нельзя. Как мне ответили в техподдержке это сделано по аналогии с лимитами физической карты. Однако, в случае утери физической карты можно позвонить и ее заблокировать и увидеть на телефоне смс о списании, а вот без телефона все это сделать проблематично.

                          0
                          Спасибо большое за комментарий! Мы постоянно работаем над улучшением сети приема, спасибо за сведения про Ленту, взяли в работу.
                          Про оплату до 1 тыс. – служба поддержки ответила совершенно верно, сделано по аналогии с лимитами по банковской физической карте.
                          В случае утери телефона вы точно так же можете заблокировать токен, сообщив в службу поддержки.
                      +4
                      Это всё круто, но вот зачем приложение Mir Pay зависит от сервисов Гугла (Google Service Framework)? И как следствие этого, приложение просто падает на старте при попытке запустить его на последних телефонах Huawei.
                      • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          скоро же как раз хармони ос представят

                          И кому она нужна?
                          +2
                          Когда начиналась разработка Mir Pay, информации о массовом выпуске телефонов без сервисов Гугла не было, и их поддержку добавили исключительно для удобства пользователя, так как эти сервисы и так глубоко интегрированы в андроид. Сейчас ситуация поменялась, — работа в этом направлении ведется.
                            +2
                            Тут вопрос больше в другом — тут вопрос в национальной безопасности. Мир, судя о официальному сайту, является «Национальной платёжной системой» и, чисто стратегически, не правильно было бы добавлять библиотеки производства «вероятного противника».
                              0
                              С одной стороны, Ваше суждение правильное. Однако, если «раскручивать клубок», то нельзя использовать смартфоны, выпущеные «вероятным противником» :) Все должно быть в меру :)
                          0
                          Очень интересно и познавательно расписан алгоритм, спасибо.
                          А просветите, как так получается, что в разное время на одной и той же кассе мобильный кошелек то работает, то «данный тип карты не может быть обслужен в бесконтактном режиме».
                          Суешь ему под нос физическую карту — и вуаля, платеж проведен.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое