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

Формулировка Gigi предельно резкая: если вы нарушите энтропию при создании приватного ключа или сид-фразы, ваши биткоины станут чужими.

Что такое энтропия

В общих чертах энтропия описывает, насколько случайно или сжимаемо что-либо:

  • высокая энтропия — случайность, низкая сжимаемость;
  • низкая энтропия — упорядоченность, высокая сжимаемость.

Эта пара определений (вторая формулировка принадлежит Цахи Вейсману) объясняет, почему энтропию нельзя «улучшить» постфактум. Упорядоченные данные сжимаются, потому что в них есть структура; структура — это то, за что может ухватиться атакующий.

Самый наглядный пример — монеты. Если у вас две монеты, энтропия этой системы равна двум битам: всю систему описывают четыре состояния — 00, 01, 10, 11. Подбросьте обе монеты честно, и вероятность каждой комбинации составит 25%. Представьте систему, которая подбрасывает сотни монет одновременно, — и вы получите инструмент для генерации приватного ключа.

Биты: чем измеряется случайность

Двоичное число длиной в N бит может представлять 2ᴺ различных значений. Один бит — два значения, два бита — четыре, три бита — восемь. Основа: Изобретаем Биткоин, глава 3.

Отсюда берутся все цифры, которые встречаются в разговорах о безопасности ключей:

РазрядностьКоличество вариантов
8 бит256
128 бит≈ 3,4 × 10³⁸
256 бит≈ 1,16 × 10⁷⁷

256 бит — это размер приватного ключа и размер выхода хеш-функции SHA-256. Записанное десятичной системой, 2²⁵⁶ занимает 78 цифр и приблизительно равно предполагаемому количеству атомов в наблюдаемой Вселенной.

Почему угадать приватный ключ невозможно

Каждый бит ключа можно представить как бросок монеты. При однобитном ключе шанс угадать — один к двум. При восьми битах — один к 256. Дальше рост экспоненциальный, и интуиция быстро отказывает. Основа: Изобретаем Биткоин, глава 7.

Полезные ориентиры для сравнения:

  • автомобильный номер из шести букв и цифр — 36⁶, примерно один шанс к двум миллиардам;
  • номер кредитной карты из шестнадцати цифр — 10¹⁶, один шанс к десяти квадриллионам;
  • конкретный атом на Земле — примерно один шанс к 10⁵⁰;
  • приватный ключ из 256 бит — один шанс к 2²⁵⁶ ≈ 10⁷⁷, что сопоставимо с угадыванием конкретного атома во всей Вселенной или выигрышем в Powerball девять раз подряд.

Оценка того, что произойдёт при попытке перебрать это пространство «в лоб», принадлежит пользователю u/PSBlake с r/Bitcoin: даже если использовать всю планету как жёсткий диск, храня по байту на атом, использовать звёзды как топливо и перебирать триллион ключей в секунду, потребовалось бы 10²⁷ планет для хранения информации и 237 миллиардов Солнц для питания устройства.

Вывод простой: подобрать чужой приватный ключ нельзя. Ваша учётная запись в Биткоине защищена только случайностью — и этого достаточно, если случайность настоящая.

Хеш не создаёт энтропию

Распространённое заблуждение — считать, что хеширование каким-то образом «усиливает» слабый секрет. Это не так.

SHA-256 обладает набором полезных свойств: результат детерминирован (один и тот же вход всегда даёт один и тот же выход), непредсказуем (изменение одной буквы радикально меняет результат), вычисляется быстро, необратим (по хешу невозможно восстановить исходную строку) и всегда имеет фиксированный размер в 256 бит.

Ни одно из этих свойств не добавляет энтропии. Хеш-функция детерминирована, а значит, количество различимых выходов не может превысить количество различимых входов. Если на вход подать сорок бит настоящей случайности, на выходе останутся те же сорок бит — просто равномерно размазанные по 256-битному полю. Перебор ведётся по входу, а не по выходу.

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

Откуда берётся энтропия на практике

Есть два принципиально разных подхода, и разница между ними — в том, кому вы вынуждены доверять.

Устройство генерирует ключ само

Стандартный путь: аппаратный кошелёк использует собственный генератор случайных чисел и показывает вам готовые двенадцать или двадцать четыре слова. Удобно и быстро. Плата за удобство — вы принимаете качество этого генератора на веру: и правильный, и сломанный генератор выдают внешне одинаковый результат — те же красивые слова, тот же отпечаток, тот же адрес.

Различие, скрытое за словами «генератор случайных чисел», принципиально:

  • Аппаратный генератор (TRNG) черпает случайность из физического процесса. Он не воспроизводим по построению.
  • Программный генератор вычисляет последовательность из некоторого начального значения. Если это значение предсказуемо, предсказуем и весь выход.

Разница между ними — не теоретическая тонкость. В инциденте с COLDCARD в 2026 году генерация сида из-за ошибки в сборке ушла с аппаратного TRNG на программный запасной генератор, строивший «случайность» из заводских данных чипа и показаний таймеров. Пространство поиска схлопнулось со 128 бит примерно до сорока на одном поколении устройств и порядка семидесяти двух — на других. Ни один пользователь не мог это заметить: слова, отпечаток и адрес выглядели совершенно нормально. Подробный разбор — на странице инцидент с ГСЧ COLDCARD.

Энтропию задаёте вы сами

Ряд устройств позволяет подмешать или полностью заменить собственную энтропию. В обзоре аппаратных кошельков это отдельная строка в таблице возможностей — «DIY-энтропия», — и она есть далеко не у всех моделей.

  • COLDCARD при создании кошелька предлагает добавить энтропию бросками игральной кости. Как прямо сказано в гиде по устройству, это снижает уровень доверия к генератору случайных чисел, предлагаемому устройством.
  • SeedSigner идёт дальше и вовсе не генерирует приватный ключ сам. Вы задаёте ему энтропию — бросаете кости, подбрасываете монету или делаете снимок камерой, — а устройство лишь рассчитывает контрольную сумму и показывает готовую сид-фразу. Подробности — в гиде по SeedSigner.

Именно в этом смысл ритуала с костями: он не делает случайность «более случайной», он делает её проверяемой. Броски вы видите своими глазами, а генератор внутри закрытой коробки проверить нельзя по определению.

Сколько бросков нужно

Честная шестигранная кость даёт log₂6 = 2,585 бита на бросок. Отсюда два стандартных порога:

БросковЭнтропияРезультат
50129,2 бита12 слов
99255,9 бита24 слова

Эти же числа советуют COLDCARD и SeedSigner, и ниже порога в 50 бросков сид считается недостаточно случайным. Отклоняться от них не следует: все реализации ждут ровно 50 или ровно 99 бросков.

Люди — плохой источник случайности

Соблазн «придумать случайность самому» велик и почти всегда заканчивается плохо. Как отмечается в материале о парольных фразах, люди не очень хорошо умеют делать случайный выбор — поэтому лучшим методом оказывается механический: бросок кости и выбор слова из списка по выпавшему числу.

На этом же принципе построен список Diceware Арнольда Рейнхолда: 7776 слов, ровно столько, сколько существует упорядоченных исходов броска пяти шестигранных костей (6⁵). Сокращённая версия Джозефа Бонно содержит 1296 слов — четыре броска (6⁴). Число бросков здесь не произвольно, оно продиктовано размером списка.

Сколько стоит перебор

Энтропия измеряется в битах, но атака измеряется в деньгах. Методика расчёта из материала о парольных фразах применима к любому секрету:

  1. Посчитайте общее количество вариантов. Для случайных символов это nᵏ, где n — размер алфавита, k — длина. Для случайных слов — то же nᵏ, где n — размер списка слов.
  2. Разделите на два: в среднем атакующему нужно проверить половину пространства.
  3. Разделите на скорость перебора за доллар.

Конкретная оценка: арендованный в облаке графический процессор NVIDIA Tesla V100 считает 2160 миллионов хешей SHA-512 в секунду при цене около $3,06 в час. С учётом того, что проверка одного кандидата требует 2048 вычислений HMAC и последующих операций, атакующий проверяет порядка 620 миллионов кандидатов за один доллар.

Дальше арифметика делает всё сама. Случайная парольная фраза из двенадцати строчных букв даёт около 48 × 10¹⁵ вариантов — примерно $77 миллионов по сегодняшним ценам. Пространство в сорок раз меньшее стоит в сорок раз дешевле. Ровно поэтому атака перебором на слабый секрет — не теоретическая угроза, а вопрос бюджета.

И ещё одно: стоимость атаки со временем падает. По закону Мура стоимость любой фиксированной атаки уменьшается вдвое каждые восемнадцать месяцев — то есть через десять лет она может составить примерно одну сотую от сегодняшней. Секрет, который вы создаёте сегодня, должен оставаться дорогим для взлома и через десять лет.

Что из этого следует

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

  • Секретная информация должна генерироваться источниками с высокой энтропией. Всё остальное — производные: приватный ключ, публичный ключ, адрес и расширенные публичные ключи (xpub, ypub, zpub) выводятся из сида детерминированным процессом.
  • Слабая энтропия не проявляет себя внешне. Кошелёк со сломанным источником случайности выглядит и работает точно так же, как исправный.
  • Если сид создан из ненадёжного источника, лечится это только созданием нового сида и переносом средств. Обновление прошивки уже созданный ключ не исправляет.
  • Если случайность вашего ключа для вас критична, задайте энтропию сами и проверьте результат независимым инструментом.

Пробелы

Различие аппаратного и программного генераторов источники описывают на уровне последствий, а не устройства: чем именно TRNG черпает физическую случайность и как устроено засеивание криптографически стойкого PRNG, остаётся за рамками. Воспроизводимые сборки как третий способ проверки ПО разобраны отдельно — см. проверка подлинности ПО.

Источники

Дополнительные материалы