Энтропия — мера случайности источника данных. В криптографии вообще и в Биткоине в частности хороший источник энтропии необходим для обеспечения безопасности: приватный ключ — это просто очень большое случайное число, и вся его защита держится на том, что это число невозможно угадать. Основа: Вечная борьба Биткоина.
Формулировка 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 бита на бросок. Отсюда два стандартных порога:
| Бросков | Энтропия | Результат |
|---|---|---|
| 50 | 129,2 бита | 12 слов |
| 99 | 255,9 бита | 24 слова |
Эти же числа советуют COLDCARD и SeedSigner, и ниже порога в 50 бросков сид считается недостаточно случайным. Отклоняться от них не следует: все реализации ждут ровно 50 или ровно 99 бросков.
Люди — плохой источник случайности
Соблазн «придумать случайность самому» велик и почти всегда заканчивается плохо. Как отмечается в материале о парольных фразах, люди не очень хорошо умеют делать случайный выбор — поэтому лучшим методом оказывается механический: бросок кости и выбор слова из списка по выпавшему числу.
На этом же принципе построен список Diceware Арнольда Рейнхолда: 7776 слов, ровно столько, сколько существует упорядоченных исходов броска пяти шестигранных костей (6⁵). Сокращённая версия Джозефа Бонно содержит 1296 слов — четыре броска (6⁴). Число бросков здесь не произвольно, оно продиктовано размером списка.
Сколько стоит перебор
Энтропия измеряется в битах, но атака измеряется в деньгах. Методика расчёта из материала о парольных фразах применима к любому секрету:
- Посчитайте общее количество вариантов. Для случайных символов это nᵏ, где n — размер алфавита, k — длина. Для случайных слов — то же nᵏ, где n — размер списка слов.
- Разделите на два: в среднем атакующему нужно проверить половину пространства.
- Разделите на скорость перебора за доллар.
Конкретная оценка: арендованный в облаке графический процессор NVIDIA Tesla V100 считает 2160 миллионов хешей SHA-512 в секунду при цене около $3,06 в час. С учётом того, что проверка одного кандидата требует 2048 вычислений HMAC и последующих операций, атакующий проверяет порядка 620 миллионов кандидатов за один доллар.
Дальше арифметика делает всё сама. Случайная парольная фраза из двенадцати строчных букв даёт около 48 × 10¹⁵ вариантов — примерно $77 миллионов по сегодняшним ценам. Пространство в сорок раз меньшее стоит в сорок раз дешевле. Ровно поэтому атака перебором на слабый секрет — не теоретическая угроза, а вопрос бюджета.
И ещё одно: стоимость атаки со временем падает. По закону Мура стоимость любой фиксированной атаки уменьшается вдвое каждые восемнадцать месяцев — то есть через десять лет она может составить примерно одну сотую от сегодняшней. Секрет, который вы создаёте сегодня, должен оставаться дорогим для взлома и через десять лет.
Что из этого следует
Энтропия — единственный слой безопасности Биткоина, за который отвечаете лично вы. Математику подписей и хеш-функций проверить нельзя, ей приходится доверять. А вот источник случайности, из которого вырос ваш ключ, — можно.
- Секретная информация должна генерироваться источниками с высокой энтропией. Всё остальное — производные: приватный ключ, публичный ключ, адрес и расширенные публичные ключи (xpub, ypub, zpub) выводятся из сида детерминированным процессом.
- Слабая энтропия не проявляет себя внешне. Кошелёк со сломанным источником случайности выглядит и работает точно так же, как исправный.
- Если сид создан из ненадёжного источника, лечится это только созданием нового сида и переносом средств. Обновление прошивки уже созданный ключ не исправляет.
- Если случайность вашего ключа для вас критична, задайте энтропию сами и проверьте результат независимым инструментом.
Пробелы
Различие аппаратного и программного генераторов источники описывают на уровне последствий, а не устройства: чем именно TRNG черпает физическую случайность и как устроено засеивание криптографически стойкого PRNG, остаётся за рамками. Воспроизводимые сборки как третий способ проверки ПО разобраны отдельно — см. проверка подлинности ПО.
Источники
- Вечная борьба Биткоина
- Изобретаем Биткоин — глава 3
- Изобретаем Биткоин — глава 7
- Насколько надёжна ваша парольная фраза?
- Что такое Coldcard?
- SeedSigner: аппаратный кошелёк своими руками
- Сравнение аппаратных кошельков
- Сид на костях: как создать ключ, не доверяя генератору