Fundamentals ·

Что такое энтропия? Случайность в основе криптобезопасности


Каждый криптовалютный кошелёк начинается со случайного числа. Не с пароля, который вы выбираете, не с паттерна, который вы придумываете, а с чистой случайности, извлечённой из физического мира. Эта случайность называется энтропией, и она --- единственный важнейший фактор, определяющий, защищены ваши криптоактивы или уязвимы.

Если энтропия за вашим кошельком сильна, атакующему пришлось бы перебрать больше комбинаций, чем атомов в наблюдаемой Вселенной, чтобы найти ваши ключи. Если энтропия слаба, ваши средства могут быть украдены за секунды. Середины нет.

Определение энтропии

В криптографии энтропия измеряет непредсказуемость данных. Она квантифицируется в битах. Один бит энтропии представляет единственный бинарный выбор: орёл или решка, 0 или 1. Два бита энтропии дают четыре возможных исхода. Три бита дают восемь. Каждый дополнительный бит удваивает число возможностей.

Формула проста: n бит энтропии порождают 2^n возможных значений.

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

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

128 бит vs 256 бит

Стандарт BIP39, определяющий генерацию seed-фраз, поддерживает две основные длины энтропии:

128 бит (12-словная seed-фраза)

  • Порождает 2^128 возможных seed-фраз
  • Это 340 282 366 920 938 463 463 374 607 431 768 211 456 комбинаций
  • Приблизительно 3,4 x 10^38

256 бит (24-словная seed-фраза)

  • Порождает 2^256 возможных seed-фраз
  • Это приблизительно 1,16 x 10^77 комбинаций
  • Больше, чем оценочное число атомов в наблюдаемой Вселенной

Оба уровня считаются безопасными против современных технологий. 128 бит энтропии --- стандарт для большинства потребительских кошельков, и ни один известный вычислительный метод не может перебрать 2^128 возможностей за практически приемлемое время. Вариант с 256 битами обеспечивает дополнительный запас прочности для пользователей, желающих максимальной защиты или озабоченных будущим прогрессом вычислительной техники. Подробное сравнение смотрите в Как быстро можно взломать seed-фразу перебором?.

Связь между битами энтропии и количеством слов следует простому правилу: каждые 11 бит энтропии сопоставляются с одним словом из списка слов BIP39 (2 048 слов, и 2^11 = 2 048). 12-словная фраза кодирует 128 бит энтропии плюс 4 бита контрольной суммы. 24-словная фраза кодирует 256 бит энтропии плюс 8 бит контрольной суммы. Полную разбивку этого процесса читайте в BIP39 простыми словами.

Источники случайности: аппаратные ГСЧ и Web Crypto API

Ключевой вопрос: откуда берётся энтропия? Не все генераторы случайных чисел одинаковы.

Псевдослучайные vs криптографически безопасные

Стандартная функция случайных чисел в программировании (например, Math.random() в JavaScript) является псевдослучайной. Она использует математическую формулу для генерации чисел, которые выглядят случайными, но полностью детерминированы. При одинаковом начальном значении она каждый раз выдаёт одну и ту же последовательность. Это катастрофически непригодно для генерации криптовалютных ключей.

Криптографически безопасные генераторы случайных чисел (CSPRNG) решают эту проблему, включая подлинную физическую случайность из аппаратных источников.

Аппаратные генераторы случайных чисел

Современные процессоры включают специализированные аппаратные генераторы случайных чисел, извлекающие энтропию из физических явлений:

  • Intel RDRAND/RDSEED: Использует тепловой шум в кремниевых схемах
  • ARM TrustZone TRNG: Использует аппаратную генерацию случайных битов
  • Пулы энтропии ОС: /dev/urandom в Linux, CryptGenRandom в Windows и SecRandomCopyBytes в macOS --- все поддерживают пулы энтропии, питаемые аппаратными событиями, такими как тайминг прерываний, вариации поиска на диске и время прибытия сетевых пакетов

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

Web Crypto API

Для браузерных инструментов Web Crypto API обеспечивает доступ к криптографическому генератору случайных чисел операционной системы через crypto.getRandomValues(). Эта функция специфицирована W3C и реализована во всех современных браузерах. Она обращается к тому же пулу энтропии уровня ОС, который используется нативными приложениями.

SafeSeed использует Web Crypto API для всей генерации ключей. Когда вы используете Bitcoin Seed Phrase Generator или Ethereum Seed Phrase Generator, энтропия берётся через crypto.getRandomValues(), который предоставляет криптографически безопасные случайные байты напрямую с аппаратного обеспечения вашего устройства. Ничего не генерируется на сервере; всё выполняется в вашем браузере.

Web Crypto API --- это не то же самое, что Math.random(). Это принципиально другая система, разработанная специально для криптографических операций. Различие имеет огромное значение: Math.random() в большинстве реализаций имеет примерно 52 бита внутреннего состояния, что означает: наблюдая несколько выходных значений, атакующий может предсказать все будущие. У crypto.getRandomValues() такой слабости нет.

От энтропии к seed-фразе

Путь от сырой энтропии к seed-фразе следует точному, детерминированному процессу, определённому спецификацией BIP39:

Шаг 1: Генерация случайных байтов

CSPRNG производит 16 байтов (128 бит) или 32 байта (256 бит) случайных данных.

Шаг 2: Вычисление контрольной суммы

Вычисляется SHA-256-хеш энтропии. Первые 4 бита (для 128-битной энтропии) или 8 бит (для 256-битной энтропии) этого хеша добавляются к энтропии в качестве контрольной суммы.

Шаг 3: Разбиение на 11-битные группы

Объединённые биты энтропии + контрольной суммы делятся на группы по 11 бит. Для 12-словной фразы: 128 + 4 = 132 бита, делённые на 12 групп по 11 бит.

Шаг 4: Сопоставление со словами

Каждое 11-битное значение (0-2047) используется как индекс в списке слов BIP39 из 2 048 слов. Результат --- ваша мнемоническая фраза.

Шаг 5: Получение seed

Мнемоническая фраза пропускается через PBKDF2-HMAC-SHA512 с 2 048 итерациями для создания 512-битного seed. Этот seed затем используется для вывода дерева вашего HD-кошелька по путям деривации BIP44.

Каждый шаг после шага 1 детерминирован. Одни и те же 128 бит энтропии всегда породят одни и те же 12 слов, тот же seed и те же адреса. Вся безопасность системы зиждется на непредсказуемости этих начальных случайных байтов.

Когда слабая энтропия приводит к краже средств

Последствия слабой энтропии не теоретичны. Множество реальных инцидентов продемонстрировали, что происходит при сбое случайности.

Уязвимость Android SecureRandom (2013)

В августе 2013 года была обнаружена ошибка в реализации SecureRandom на Android. Криптографическая библиотека Java на Android неправильно инициализировала генератор случайных чисел, из-за чего некоторые кошельки Bitcoin генерировали приватные ключи с недостаточной энтропией. Атакующие воспользовались этим для кражи биткоинов из затронутых кошельков. Уязвимость затронула множество кошельковых приложений и привела к экстренным патчам во всей экосистеме Android.

Blockchain Bandit (предсказуемые ключи)

Исследователь безопасности Адриан Беднарек задокументировал случай, когда атакующие систематически сканировали блокчейн Ethereum в поисках адресов, выведенных из слабых приватных ключей. Ключи вроде 0x0000...0001 (число 1) или ключи, выведенные из простых фраз, использовались людьми, не понимавшими энтропию. Автоматизированные боты мониторили эти адреса и крали любые поступившие средства в течение секунд. Тысячи эфиров были выведены с адресов с предсказуемыми ключами.

Атаки на brain wallets

Brain wallets --- где приватный ключ выводится из запомненной парольной фразы --- неоднократно компрометировались, потому что выбранные людьми фразы содержат гораздо меньше энтропии, чем люди предполагают. Атакующие прогоняют массивные словари фраз, текстов песен, книжных цитат и распространённых паролей через ту же функцию деривации, что используется brain wallets. Любая фраза, которую человек может запомнить, скорее всего, находится в пространстве поиска этих атак.

Все эти инциденты разделяют общий урок: сами криптографические алгоритмы (SHA-256, secp256k1, ECDSA) не взломаны. Энтропия, поданная в них, была недостаточной.

Проверка качества энтропии

Как проверить, что генератор случайных чисел производит качественную энтропию? Существует несколько статистических тестов:

NIST SP 800-22

Национальный институт стандартов и технологий публикует набор статистических тестов на случайность. Они включают частотные тесты (сбалансированы ли нули и единицы?), тесты серий (имеют ли последовательности одинаковых битов ожидаемую длину?) и тесты ранга матриц, среди прочих. Хорошо функционирующий CSPRNG должен пройти все.

Набор тестов Dieharder

Расширенный набор тестов на случайность, который нагружает генераторы сильнее, чем набор NIST. Назван в честь оригинальных тестов Diehard Джорджа Марсалья и часто используется для проверки новых генераторов случайных чисел.

Практическая проверка

Для конечных пользователей самая практичная проверка --- убедиться, что вы используете хорошо проверенный инструмент, основанный на crypto.getRandomValues() или эквивалентном CSPRNG уровня ОС. Не следует пытаться улучшить энтропию добавлением собственной «случайности» (например, самостоятельным выбором слов), поскольку человеческий выбор гораздо менее случаен, чем кажется.

Инструменты SafeSeed имеют открытый исходный код, что позволяет любому проверить, что источником энтропии является crypto.getRandomValues(), а не более слабая альтернатива. Код выполняется полностью в вашем браузере без серверной коммуникации, поэтому нет возможности для атаки «человек посередине» повлиять на генерацию случайных чисел. Более широкое обсуждение важности клиентской генерации смотрите в Безопасны ли онлайн-генераторы seed-фраз?.

Энтропия и ваша позиция безопасности

Понимание энтропии меняет взгляд на криптобезопасность. Ваша 12-словная seed-фраза --- не просто удобный механизм резервного копирования; это человекочитаемая кодировка случайного числа, настолько огромного, что Вселенная не содержит достаточно энергии для перебора всех возможностей.

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

  1. Проверяйте источник энтропии: Инструмент должен использовать crypto.getRandomValues(), /dev/urandom или аналогичную аппаратно обеспеченную случайность.
  2. Избегайте собственной энтропии: Не выбирайте слова сами, не бросайте кости с предвзятым методом и не используйте источник случайности, который вам «кажется» достаточно хорошим.
  3. Используйте проверенные стандарты: BIP39 проверен практикой с 2013 года. Инструменты, точно следующие BIP39, такие как Solana Seed Phrase Generator на SafeSeed, наследуют десятилетие проверок безопасности.
  4. Генерируйте офлайн, когда возможно: Даже при сильной энтропии генерация ключей на air-gapped или офлайн-устройстве устраняет сетевые векторы атак. Смотрите Как сгенерировать Bitcoin Seed Phrase офлайн для практического руководства.

Энтропия невидима. Вы не можете её увидеть, почувствовать или проверить, глядя на результат. Seed-фраза, сгенерированная из слабой энтропии, выглядит идентично той, что сгенерирована из сильной. Единственный способ обеспечить безопасность --- доверять процессу: используйте проверенные инструменты с открытым исходным кодом, опирающиеся на аппаратные генераторы случайных чисел, и никогда не идите на компромиссы в этом фундаменте.