150 / 736DICE

Dice Roll Entropy

Энтропия кошелька из физических бросков кубика

Кубик может дать случайность для нового кошелька. Но количества бросков недостаточно: результаты должны быть случайными, оставаться тайными и правильно преобразовываться в данные кошелька.

Dice Roll Entropy позволяет получить непредсказуемые входные данные для нового кошелька настоящими бросками кубика. Кошелёк — приложение или устройство для получения и отправки биткоинов. Приватные ключи — это секретные числа, позволяющие разрешить расходование биткоинов. Представьте Анну: вместо выдумывания чисел она вводит результаты в точном порядке в проверенную офлайн-процедуру. Эти данные становятся основой ключей к её bitcoin. Энтропия здесь описывает неопределённость для того, кто не знает результаты и пытается их угадать. Кубик помогает лишь при достаточном числе независимых и тайных бросков. Больше слов восстановления или длинный цифровой отпечаток не спасут слабые либо опубликованные данные. Следующие расчёты объясняют почему, но не призывают создавать собственный генератор.

Бит — единица информации. При равновероятных вариантах каждый дополнительный бит удваивает число возможностей, среди которых угадывает атакующий. Это не дополнительная точка на кубике и не ещё одно слово резервной копии. У честного шестигранного кубика шесть равновероятных результатов. Два независимых броска дают 36 возможных пар. В битах это log2(6) ≈ 2,585 на бросок. В этих идеальных условиях 50 бросков дают около 129,25 бита, 99 — 255,91, а 100 — 258,50. COLDCARD указывает 99 бросков для практической цели 256 бит; математически это немного меньше 256. Один подсчёт бросков не проверяет кубик и не гарантирует идеально равномерного результата преобразования. [1] [3] [5]

Если одна грань выпадает чаще, атакующий может лучше угадывать. При вероятности самой частой грани 1/2 один бросок даёт только 1 бит min-entropy. Min-entropy оценивает непредсказуемость по самому удачному выбору атакующего при единственной попытке угадать результат. Формула Hmin=−log2(pmax) использует именно вероятность наиболее частого результата, pmax. Чтобы складывать значения по броскам, нужна соответствующая независимость. Копирование прошлого результата не заменяет новый независимый бросок. Тому, кто знает всю последовательность, вообще не нужно её угадывать. [4]

Для кошелька, созданного только из бросков, полной последовательности или итогового хеша, то есть цифрового отпечатка, вычисленного из этих данных, может хватить для восстановления. При смешивании чувствительны и входные данные устройства. Не вводите настоящие броски в онлайн-проверку и не фотографируйте их. Проверяйте расчёт на отдельном тестовом кошельке, который никогда не будете пополнять; для настоящего используйте новые секретные входные данные. Буфер обмена и журналы могут сохранить данные. Надёжно сохраните Seed Phrase, резервную копию в словах, и проверьте восстановление. Если вы также используете passphrase, дополнительный секрет для доступа к другому кошельку, полученному из тех же слов, она тоже понадобится для восстановления. [1] [2]

Совпадение с публичным тестовым примером проверяет кодирование, хеш и преобразование. Оно не доказывает, что ваш кубик или устройство работают правильно. Хорошо выглядящая короткая последовательность тоже не доказывает непредсказуемости. NIST SP800-90B различает модель источника, оценку min-entropy и проверки работоспособности. Домашняя серия бросков не является сертификацией по этому стандарту; выдуманные числа или повторяющийся шаблон не заменяют физических бросков. [3] [4]

ASCII определяет запись цифр для компьютера, а newline означает символ конца строки. Точный текст важен: компьютер обрабатывает введённые символы, а не их человеческий смысл. Согласно документации, COLDCARD в режиме Dice Rolls Only вычисляет SHA-256 от ASCII-последовательности цифр. Публичный тест 123456 без завершающего newline даёт хеш 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92. Шесть идеальных случайных бросков имели бы лишь около 15,51 бита; опубликованная последовательность вообще не секретна. Выход 256 бит не добавляет отсутствующей энтропии; другое кодирование может изменить результат. [1] [3]

В следующей формуле d1 и d2 — результаты первого и второго бросков. mod означает остаток от деления. Два прообраза означают, что два разных исходных значения дают один результат, повышая его вероятность. В учебном примере кодируем два честных независимых броска как x=6*(d1−1)+(d2−1), от 0 до 35. x mod32 даёт преимущество 0–3: у каждого два прообраза. Rejection Sampling вместо этого отбрасывает 32–35 и повторяет пару; принятые 0–31 дают пять равномерных битов. Пример объясняет ошибку преобразования, а не заменяет проверенный генератор кошелька. [3]

Документация COLDCARD, обновлённая 1 октября 2026, различает Dice Rolls Only без аппаратной случайности и стандартную генерацию, смешивающую значение устройства с физическими бросками кубика или монеты. verify_seed_mix.py проверяет второй режим, rolls.py и rolls12.py — первый. Одних бросков недостаточно для сравнения, если вход содержит значение устройства; нужны точная процедура и версия прошивки. [1]

BIP39 описывает преобразование входных битов в слова восстановления и последующее получение из этих слов seed, исходных данных для ключей. Checksum помогает выявить некоторые ошибки переписывания; passphrase — необязательный дополнительный секрет. Последний названный ниже алгоритм вычисляет seed из слов и passphrase. BIP39 добавляет четыре бита checksum к 128 входным битам и делит 132 бита на 12 групп по 11; 256 бит плюс восемь контрольных дают 24 слова. Checksum производный и не добавляет случайности. Далее PBKDF2-HMAC-SHA512 создаёт 512-битный seed из фразы и passphrase, но длина 512 сама не усиливает слабые броски. Формат слов, входная энтропия и производный seed — разные слои. [2]

Для полной картины прочитайте эту статью вместе с Cryptographic Entropy, Entropy Bit, BIP 39, Seed Phrase, Entropy Mixing, CSPRNG. На эту статью также ссылаются Cryptographic Entropy, COLDCARD RNG Incident (2026).

DOC · 001COLDCARD — Verifying Seed MixingДокументация DOC · 002BIP 39 — Mnemonic code for generating deterministic keysСпецификация DOC · 003RFC 4086 — Randomness Requirements for SecurityСпецификация DOC · 004NIST SP 800-90B — Entropy Sources for Random Bit GenerationСпецификация DOC · 005Bitcoin Developer Guide — WalletsДокументация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией