Мы разбили нашу задачу на следующие составляющие:
- Создать мобильное приложение с возможностью привязки кошелька для хранения криптовалюты OLOB и проведения транзакций с ней. То есть, необходим был кошелек, который впоследствии будет дополнен другими сервисами.
- Обеспечить миграцию пользователей из существующего веб-сервиса в мобильное приложение с крипто-кошельком для обеспечения возможности зачисления купленных токенов OLOB в сети Polygon.
Крипто-кошелекИз соображений безопасности клиент не стал использовать готовые решения, а заказал разработку мобильного кошелька с нуля. В архитектуре решения заложено несколько уровней защиты активов пользователей.
- Некастодиальный кошелек, то есть посредник не имеет доступ к средствам владельца кошелька. Сервер приложения не хранит мнемоническую фразу и приватный ключ от кошелька клиента. Конечно, это накладывает на клиента дополнительную ответственность, так как он не сможет запросить восстановление доступа к кошельку, если забудет мнемоническую фразу. Поэтому при создании нового кошелька предусмотрен этап, на котором пользователь должен собрать мнемоническую фразу из перемешанных в произвольном порядке слов. Таким образом можно убедиться, что пользователь записал фразу и имеет доступ к вновь созданному кошельку.
- Используется платежный пароль для проведения транзакций с целью обеспечения дополнительного слоя защиты и аутентификации пользователя при проведении платежных транзакций. Ключ кошелька хранится в зашифрованном виде на мобильном устройстве пользователя. Для того чтобы подписать транзакцию, необходимо ввести установленный пароль для расшифровки ключа.
- Приложение имеет доступ к серверу, который реализует другие возможности экосистемы, например связывает учетные данные и адрес кошелька пользователя. Авторизация запросов к серверу осуществляется с помощью авторизационных ключей, которые также хранятся на мобильном устройстве в зашифрованном виде. Ключи генерируется на основе мнемонической фразы по негласному детерминированному алгоритму.
Таким образом, в настоящий момент нет необходимости проходить этап аутентификации, открывая приложение. Авторизация запросов к серверу проходит прозрачно, без непосредственного участия пользователя, посредством подписи запросов к API. Однако в будущем приложение может быть дополнено системой аутентификации, нативной для мобильных платформ – по PIN-коду, отпечатку пальца или Face ID.