Защита средств на централизованных криптобиржах с адресами с несколькими подписями
Для финансовых сервисов критически важна безопасность средств, которые находятся в их управлении. Одна из самых главных задач при разработке централизованной биржи криптовалют — защита средств клиентов. В рамках авторской колонки на портале Decenter.org, я рассказал на примере собственных разработок, почему хорошим способом защиты для биткоина и его форков, которые используют модель транзакций с UTXO, является многократная подпись (multisig).
Для финансовых сервисов критически важна безопасность средств, которые находятся в их управлении. Одна из самых главных задач при разработке централизованной биржи криптовалют — защита средств клиентов. В рамках авторской колонки на портале Decenter.org, я рассказал на примере собственных разработок, почему хорошим способом защиты для биткоина и его форков, которые используют модель транзакций с 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 и бухгалтерии с нуля.
Статья доступна по ссылке: https://decenter.org/ru/zashchita-sredstv