Безопасно ли использовать онлайн-генератор seed-фраз?
Содержание
Вопрос постоянно всплывает в крипто-сообществах: безопасно ли генерировать seed-фразу с помощью онлайн-инструмента? Краткий ответ: это полностью зависит от того, как этот инструмент устроен. Плохо спроектированный онлайн-генератор может раскрыть ваши ключи злоумышленникам ещё до того, как вы пополните кошелёк. Правильно спроектированный может быть столь же безопасен, как офлайн-инструмент. Различие сводится к архитектуре, и понимание этой архитектуры --- ваша ответственность как держателя криптовалюты.
Это руководство подробно разбирает, что делает онлайн-генератор seed-фраз безопасным или опасным, как проверить, к какой категории относится конкретный инструмент, и какие технические стандарты вы должны требовать от любого инструмента, работающего с вашими криптографическими ключами.
Риски онлайн-генераторов¶
Когда вы генерируете BIP39 seed-фразу, вы создаёте мастер-секрет, контролирующий все средства в вашем кошельке. Если кто-то получит эту фразу, он сможет вывести каждую монету с каждого адреса, выведенного из неё. Это не теоретический риск. Миллиарды долларов были украдены через скомпрометированную генерацию ключей.
Фундаментальный риск любого онлайн-генератора --- передача данных. Если инструмент отправляет вашу seed-фразу, приватный ключ или даже сырую энтропию, использованную для их создания, на удалённый сервер, копия вашего секрета существует вне вашего контроля. Этот сервер может быть взломан. Оператор может быть злонамеренным. Атака типа «человек посередине» может перехватить данные. Сетевые логи могут их записать.
Этот риск не ограничивается очевидно сомнительными сайтами. Солидно выглядящие инструменты с профессиональным дизайном и тысячами пользователей были уличены в передаче сгенерированных ключей обратно на свои серверы. Некоторые были намеренно вредоносными. Другие имели баги, случайно утекающие данные через analytics-скрипты или инструменты отчётов об ошибках. Результат для пользователя был одинаков: скомпрометированные кошельки и украденные средства.
Опасность распространяется и на инструменты, загружающие код с внешних серверов при каждом посещении. Даже если генератор был безопасен вчера, скомпрометированный CDN или вредоносное обновление может внедрить код для кражи ключей сегодня. Без верифицируемого, аудитируемого кода вы не можете знать, что на самом деле выполняется в вашем браузере в момент генерации фразы.
Client-Side vs Server-Side: критическое различие¶
Единственный наиболее важный фактор при оценке любого онлайн-генератора seed-фраз --- работает он на стороне клиента или сервера.
Серверный генератор создаёт вашу seed-фразу на удалённом сервере и отправляет её в ваш браузер. Ваш секрет проходит через интернет, существует в памяти сервера и потенциально логируется. Даже с HTTPS-шифрованием оператор сервера имеет доступ к каждому сгенерированному ключу. Эта модель фундаментально несовместима с безопасностью, и вы никогда не должны использовать серверный генератор seed-фраз.
Клиентский генератор выполняет все криптографические операции внутри вашего браузера. Энтропия генерируется локально, seed-фраза выводится локально, и результирующие ключи никогда не покидают ваше устройство. Сайт предоставляет код, но после загрузки он функционирует независимо от сервера. Если вы отключитесь от интернета после загрузки страницы, настоящий клиентский генератор продолжит работать безупречно.
Это различие важно, потому что правильно реализованный клиентский инструмент обладает теми же свойствами безопасности, что и десктопное приложение. Ваш браузер --- это среда выполнения с доступом к аппаратной генерации случайных чисел, стандартным криптографическим библиотекам и полной изоляции от сети при необходимости.
Однако «клиентский» --- это утверждение, которое необходимо проверять. Многие инструменты заявляют о клиентской работе, при этом делая сетевые запросы, загружая внешние скрипты или включая analytics-трекеры, способные захватывать данные экрана. Следующий раздел объясняет, как подтвердить эти заявления самостоятельно.
Как проверить, что генератор работает на стороне клиента¶
Проверка того, что инструмент действительно работает на стороне клиента, требует нескольких простых действий, доступных каждому.
Тест авиарежима¶
Простейший тест: загрузите страницу генератора, затем полностью отключите интернет. Включите авиарежим на устройстве, отсоедините Ethernet-кабель или выключите Wi-Fi. Теперь попробуйте сгенерировать seed-фразу. Если инструмент работает идеально без сетевого подключения, он как минимум выполняет генерацию локально.
Инспекция сетевого трафика¶
Откройте инструменты разработчика браузера (F12 или Cmd+Shift+I) и перейдите на вкладку «Сеть» перед использованием генератора. Очистите все записи, затем сгенерируйте seed-фразу. Следите за исходящими запросами после нажатия кнопки генерации. Легитимный клиентский инструмент не должен делать ни одного сетевого запроса во время генерации. Будьте подозрительны к любым запросам к внешним доменам, analytics-эндпоинтам или API-вызовам.
Обзор исходного кода¶
Open-source генераторы позволяют вам проверить фактический код, работающий в вашем браузере. Убедитесь, что:
- Генерация случайных чисел использует встроенную в браузер Web Crypto API, а не пользовательскую или импортированную функцию
- Не делаются вызовы
fetch(),XMLHttpRequestилиWebSocketс сгенерированными данными - Не загружаются внешние скрипты с CDN, которые могут быть скомпрометированы
- Analytics или tracking-скрипты отсутствуют или как минимум не имеют доступа к DOM-содержимому страницы
Subresource Integrity¶
Проверьте, использует ли страница хеши Subresource Integrity (SRI) на тегах скриптов. SRI гарантирует, что скрипты, загруженные из внешних источников, не были подменены. Без SRI скомпрометированный CDN может отдать вредоносный JavaScript, захватывающий ваши ключи.
Стандарт Web Crypto API¶
Современные браузеры включают встроенную криптографическую библиотеку --- Web Crypto API. Это золотой стандарт генерации энтропии в браузерных инструментах.
Когда генератор seed-фраз вызывает crypto.getRandomValues(), он получает случайные значения от криптографически безопасного генератора псевдослучайных чисел (CSPRNG) операционной системы. На большинстве систем он комбинирует аппаратные источники энтропии, включая тайминг прерываний, тепловой шум CPU и выделенные аппаратные генераторы случайных чисел. Результирующая случайность неотличима от истинных случайных данных для всех практических криптографических целей.
Это важно, потому что безопасность вашей BIP39 seed-фразы в конечном счёте определяется безопасностью использованной энтропии. 128-битная seed-фраза (12 слов) требует 128 бит подлинной случайности. Если инструмент использует Math.random() вместо crypto.getRandomValues(), пул энтропии драматически меньше, и seed-фразы могут быть подобраны перебором. Подробнее в статье Что такое энтропия в криптовалютах?.
Web Crypto API доступна в каждом современном браузере, включая Chrome, Firefox, Safari и Edge. Это тот же примитив, который используется менеджерами паролей, банковскими приложениями и инструментами защищённого обмена сообщениями. При правильном использовании она обеспечивает то же качество случайности, что и внутренний генератор случайных чисел аппаратного кошелька.
Архитектура SafeSeed¶
SafeSeed спроектирован с нуля как клиентский инструмент. Каждая криптографическая операция --- от генерации энтропии до вывода seed-фразы и вычисления приватного ключа --- выполняется целиком в вашем браузере.
Вот как архитектура SafeSeed решает каждый из описанных выше рисков:
Генерация энтропии использует исключительно Web Crypto API. Когда вы пользуетесь Bitcoin Seed Phrase Generator или Ethereum Seed Phrase Generator, случайность поступает от CSPRNG вашей операционной системы через crypto.getRandomValues().
Никакой связи с сервером во время генерации ключей. SafeSeed не делает ни одного сетевого запроса при генерации, отображении или деривации ключей. Вы можете убедиться в этом сами с помощью описанного выше метода инспекции сети или просто отключившись от интернета после загрузки страницы.
Open-source и аудитируемый код означает, что вам не нужно доверять заявлениям SafeSeed. Исходный код открыт для проверки кем угодно. Исследователи безопасности, криптографы и опытные разработчики могут убедиться, что реализация соответствует заявлениям.
Никаких внешних зависимостей для криптографических операций. BIP39-деривация, генерация ключей и вычисление адресов используют код, включённый непосредственно в страницу. Нет загружаемых с CDN криптобиблиотек, которые могли бы быть незаметно подменены.
Эта архитектура означает, что использование SafeSeed для генерации seed-фразы Bitcoin или Ethereum обеспечивает те же свойства безопасности, что и запуск локальной программы на air-gapped компьютере --- при условии, что вы проверите код и опционально отключитесь от сети перед генерацией.
Ваш чек-лист для оценки¶
Прежде чем использовать любой онлайн-генератор seed-фраз, пройдите этот чек-лист. Легитимный инструмент должен пройти каждый пункт.
Обязательные свойства¶
-
Клиентское выполнение: Инструмент должен работать без интернета после первоначальной загрузки страницы. Проверьте это сами в авиарежиме.
-
Использование Web Crypto API: Исходный код должен использовать
crypto.getRandomValues()для энтропии. Проверьте исходный код или документацию разработчика. -
Отсутствие сетевых запросов при генерации: Откройте вкладку «Сеть» в браузере и убедитесь в нуле исходящих запросов при генерации seed-фразы.
-
Open-source код: Полный исходный код должен быть публично доступен для аудита. Проприетарные генераторы требуют слепого доверия к оператору.
-
Отсутствие analytics и tracking-скриптов: Сторонние скрипты вроде Google Analytics, Hotjar и подобных могут захватывать данные экрана, включая отображённую seed-фразу.
Признаки высокого качества¶
-
Соответствие BIP39 с проверкой контрольной суммы: Инструмент должен генерировать фразы с валидной контрольной суммой и чётко объяснять реализуемый стандарт. Подробнее --- BIP39 простым языком.
-
Детерминистическая деривация: При одной и той же seed-фразе инструмент всегда должен выводить одни и те же ключи и адреса. Можно перепроверить результаты с другими доверенными инструментами.
-
Поддержка стандартных путей деривации: Деривация HD-кошелька должна следовать стандартам BIP44, чтобы кошельки, созданные инструментом, были восстанавливаемы в любом совместимом ПО. Подробнее --- HD-кошельки и пути деривации.
-
Чёткая документация модели безопасности: Инструмент должен точно объяснять, что где выполняется, какие данные покидают ваше устройство (никакие не должны) и как генерируется энтропия.
Тревожные признаки¶
- Требует создания аккаунта или ввода email перед генерацией seed-фразы
- Содержит кнопки социальных сетей на странице генерации
- Загружает скрипты с множества внешних доменов
- Использует собственную генерацию случайных чисел вместо Web Crypto API
- Не предоставляет исходный код для проверки
- Делает сетевые запросы во время генерации seed-фразы
- Предлагает сохранить или «зарезервировать» вашу seed-фразу на своём сервере
Разница между безопасным и опасным онлайн-генератором --- архитектурная, а не поверхностная. Красивый интерфейс ничего не значит, если код отправляет данные на сервер. Неприглядный инструмент может быть идеально безопасным, если работает полностью в вашем браузере с правильной энтропией. Изучите проверки, проведите их сами, и вы сможете уверенно оценивать любой инструмент.
Для дополнительного контекста о связи между seed-фразами и приватными ключами см. Seed-фраза vs приватный ключ. А если вы готовы безопасно генерировать ключи, и Bitcoin Seed Phrase Generator, и Ethereum Private Key Generator от SafeSeed построены на принципах, описанных в этой статье.