Защита средств централизованной криптобиржи с помощью адресов с мультиподписью

Источник: DeCenter

Для финансовых сервисов критически важна безопасность средств, которые находятся в их управлении.

Одна из самых главных задач при разработке централизованной биржи криптовалют — защита средств клиентов.

В рамках авторской колонки Евгений Павленко, CTO Axioma Group, рассказал на примере собственных разработок, почему хорошим способом защиты для биткоина и его форков, которые используют модель транзакций с UTXO, является многократная подпись (multisig).

Как работают криптобиржи

Клиенты вводят свои средства на биржу через специальный hot-wallet, находящийся под полным контролем биржи.

Для всех клиентов в hot-wallet создаются уникальные адреса, причем для обеспечения анонимности в блокчейне для каждой операции депозита можно использовать новый адрес.

Полученные средства никак не закрепляются за клиентом. Вывод средств с биржи может производиться с любых адресов, которые выберет алгоритм формирования транзакции.

Обычно это те адреса, на которые другие клиенты ранее внесли депозиты.

Также могут быть задействованы адреса из change-wallet, где аккумулируется сдача от предыдущих транзакций, либо адреса для работы с cold-wallet, куда в целях дополнительной безопасности поступают излишки средств, не участвующих в ежедневной операционной деятельности.

По такой схеме биржа как будто работает с кошельком в реальном мире, так как любой имеющий доступ к кошельку является полноправным владельцем его содержимого.

Поэтому в своих разработках мы решили принять меры безопасности: все оперативные кошельки были зашифрованы и перемещены в изолированное защищенное окружение, процедуры работы с которым строго регламентированы.

Администратор отправляет команду для расшифровки кошелька только в момент подписи транзакций вывода средств, а оригинальный пароль кошелька может воссоздать только владелец резервной копии (владелец биржи).

Безопасность и требования бизнеса

Однако эти меры безопасности создали проблемы для бизнес-требования — иметь неограниченный запас адресов для депозита, которые могут понадобиться клиентам в любой момент.

Тогда решили применить стандарт BIP-32 Hierarchical Deterministic Wallet (open-source реализация этого стандарта).

Эта библиотека работает для биткоина «из коробки», но ее можно адаптировать для любого форка, добавив параметры нужных сетей.

Благодаря применению BIP-32 необходимое количество адресов для депозита можно моментально создать в бирже, а затем добавить в hot-wallet в режиме watch-only, чтобы отслеживать транзакции депозита.

В момент следующей расшифровки кошелька для таких адресов воссоздаются приватные ключи, и пришедшие на них депозиты поступают в распоряжение биржи.

Больше безопасности на блокчейне

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

Достаточно надежно, но можно лучше: функцию сохранения средств доверить банку, а для управления нанять главного бухгалтера.

Подобное разделение ответственности на блокчейне реализовано достаточно давно: оно называется многократная подпись, или multisig.

Это частный случай стандарта BIP-16 Pay to Script Hash (P2SH), который позволяет добавлять в транзакции блокчейна дополнительные правила проверки.

Вместе с подписью транзакции вывода средств на стороне hot-wallet было решено дополнительно заверять ее второй подписью.

Новую сторону, которая добавляет вторую подпись перед отправкой транзакции в сеть, так и назвали — бухгалтерия (английский термин — co-signer).

Здесь ответственный сотрудник, перед тем как поставить свое одобрение, может изучить детали транзакции и убедиться, что она легитимна, то есть состоит из правомерных заявок на вывод средств от реальных пользователей биржи.

Для ввода средств на биржу пользователям теперь нужно выдавать специальные multisig-адреса.

Чтобы распоряжаться присланным депозитом, необходимо знать оба приватных ключа, которые были использованы для создания адреса этого депозита.

Один приватный ключ сохраняется в зашифрованном виде в hot-wallet, второй — на сервере бухгалтерии.

Для сохранения конфиденциальности ключи второй подписи должны генерироваться в том же объеме и храниться независимо от остального проекта.

Осталось решить, как теперь получить неограниченный запас multisig-адресов для работы депозитов на бирже.

Новый инструмент для мультиподписи

Анализируя пути реализации multisignature, мы обнаружили нехватку доступного работающего решения.

Multisig-адрес для депозита должен быть детерминировано получен из пары адресов (публичных ключей) — адреса из hot-wallet и соответствующего ему адреса из бухгалтерии.

Для бухгалтерии мы вновь можем применить уже знакомый BIP-32, чтобы оперировать в бирже только публичными ключами, не нарушая конфиденциальность приватных ключей.

Имея на сервере биржи пару публичных ключей, соответствующих искомому multisig-адресу, можно применить стандарт BIP-45 Structure for Deterministic P2SH Multisignature Wallets.

Этот стандарт позволяет генерировать детерминированные multisig-адреса для депозита, используя только публичные ключи.

Это единственно разумный вариант, потому что применение в этой процедуре приватных ключей от сразу нескольких сторон нарушает их конфиденциальность.

В качестве бонуса обеспечивается резервное копирование депозитов: в любой момент можно восстановить все адреса, получив публичные ключи hot-wallet и бухгалтерии.

Команда наших программистов не нашла доступных библиотек, работающих со стандартом BIP-45, и решила скомбинировать уже существующие технологии для реализации этого стандарта.

Добавив в наш toolchain библиотеку Bitcoin-ruby, мы разработали новую библиотеку, которая полностью соответствует стандарту BIP-45.

Такой подход оказался очень эффективным, так как позволил максимально быстро получить нужный инструмент, отсутствующий на рынке.

Потребовалось еще одно изменение, связанное с безопасностью средств на change-wallet.

В процессе работы проекта здесь могут накапливаться значительные суммы.

Можно пытаться минимизировать эффект, например, перечислив эти средства на cold-wallet. Мы пошли другим путем и перевели эти адреса также на схему с multisignature.

Это не потребовало изменений в архитектуре. При формировании выходов транзакции используется адрес из нового пула адресов «для сдачи», который наполняется по той же самой схеме, что и адреса для депозитов.

Результат: удобство работы и безопасность

Внедрение нового решения не сильно повлияло на существующую схему работы. Multisig-адреса для депозита по-прежнему генерируются на стороне биржи и сохраняются в кошельках hot-wallet.

Здесь же находится один из пары приватных ключей, необходимый для управления средствами. Вторые приватные ключи располагаются на новой площадке, созданной для бухгалтерии.

Все исходящие транзакции, будучи подписанными на hot-wallet, направляются на эту площадку для получения второй подписи.

Только после подтверждения эти транзакции попадают в блокчейн.

Инфраструктуру площадки для бухгалтерии мы сделали полностью независимой от основного проекта, чтобы минимизировать ущерб от возможного взлома серверов проекта.

В результате внедрения технологии multisig повысился уровень защиты средств в криптовалюте, которые пользователи доверяют бирже.

Ни один сотрудник не обладает полной информацией, которая дает возможность потратить эти средства.

Сервера hot-wallet и бухгалтерии находятся на разных площадках, их обслуживание ограничено регламентом, этим занимается ответственный персонал, не связанный друг с другом. Все приватные ключи зашифрованы.

Значительно выросла защита от внешних угроз. Чтобы получить доступ к средствам, злоумышленнику теперь потребуется последовательно взломать три независимых площадки, а также узнать пароли, которыми зашифрованы кошельки.

Резервные копии мастер-ключей для hot-wallet и бухгалтерии хранятся отдельно, в надежных местах. На основе резервных копий имеется возможность восстановить 100% инфраструктуры hot-wallet и бухгалтерии с нуля.

Читайте также

Добавить комментарий

Вверх