Сид-фраза с помощью игральных кубиков: пошаговая инструкция
Чтобы создать сид-фразу BIP39 с помощью кубиков, бросьте честный шестигранный кубик не меньше 50 раз для фразы из 12 слов или 99 раз для фразы из 24 слов, превратите броски в биты и завершите фразу последним словом, в котором записана контрольная сумма. Каждый бросок даёт log₂ 6 ≈ 2,585 бита энтропии, поэтому 50 бросков покрывают 128 бит, из которых состоят 12 слов. Превратить броски в слова может аппаратное устройство — Coldcard, SeedSigner или Krux, — а можно обойтись бумагой и ручкой: каждое слово собирается из 11 бросков «чёт или нечет», а выбрать последнее поможет калькулятор последнего слова. В обоих случаях случайность задаёт кубик, а не микросхема, которой приходится верить на слово, и не ваш вкус к словам.
Броски и слова: коротко
| 12 слов | 24 слова | |
|---|---|---|
| Нужно энтропии | 128 бит | 256 бит |
| Шестигранный кубик, броски хеширует устройство | 50 бросков | 99 бросков |
| Двадцатигранный кубик (Krux) | 30 бросков | 60 бросков |
| Вручную: 1 бит за бросок кубика или монеты | 121 на первые 11 слов, 7 на последнее | 253 на первые 23 слова, 3 на последнее |
| Бит контрольной суммы в последнем слове | 4 | 8 |
| Подходящих последних слов | 128 | 8 |
Зачем кубики, если кошелёк сам создаёт фразу?
Кошелёк получает сид-фразу от своего генератора случайных чисел, и со стороны не проверишь, хорошо ли тот работает. Обычно он работает как надо, но сбои известны:
- Coldcard, 2021–2026 годы. В июле 2026 года Coinkite сообщила, что после изменения прошивки в марте 2021 года устройства Coldcard брали случайность для сидов не из аппаратного генератора, а из программного генератора общего назначения MicroPython. По оценке компании, вместо 128 бит перебирать приходилось около 40 бит на Mk2 и Mk3 и около 72 бит на Mk4, Mk5 и Q, и злоумышленники восстанавливали такие ключи у себя и выводили средства. Сиды, при создании которых было сделано не меньше 50 честных, независимых и никому не показанных бросков кубика, Coinkite не считает уязвимыми из-за одной только этой ошибки.
- Libbitcoin Explorer, 2023 год. Команда
bx seedв версиях с 3.0.0 по 3.6.0 инициализировала генератор «вихрь Мерсенна» всего 32 битами системного времени, так что возможных сидов было не больше 4,29 млрд. 12 июля 2023 года злоумышленники вывели с таких кошельков около 29,65 BTC (разбор Milk Sad).
С кубиками от генератора устройства ничего не зависит. Платить за это приходится временем и новыми поводами ошибиться — о них ниже. Для большинства людей генератор надёжного кошелька остаётся практичным выбором: даже для новых сидов взамен уязвимых Coinkite называет кубики необязательными, а сид, созданный исправленной прошивкой, — достаточным. Как из случайного числа получаются слова, а из слов — ключи, объясняет статья что такое сид-фраза.
Сколько бросков нужно?
У честного кубика шесть равновероятных граней, поэтому один бросок несёт log₂ 6 ≈ 2,585 бита. Разделите энтропию фразы на это число и округлите вверх:
| Длина фразы | Энтропия | Бросков шестигранного кубика | Бит в этих бросках |
|---|---|---|---|
| 12 слов | 128 бит | 50 | 129,2 |
| 15 слов | 160 бит | 62 | 160,3 |
| 18 слов | 192 бита | 75 | 193,9 |
| 21 слово | 224 бита | 87 | 224,9 |
| 24 слова | 256 бит | 99 (или 100) | 255,9 (или 258,5) |
49 бросков дают лишь 126,7 бита, поэтому для 12 слов минимум — 50. Для 24 слов точный ответ — 99,03: 99 бросков не дотягивают до 256 бит на десятую долю бита, что на практике ничего не меняет, и Coldcard, SeedSigner и Krux просят именно 99 бросков. Coldcard и Krux принимают и больше, так что сотый бросок — бесплатный запас.
Подойдут и монета, и другие кубики. Подбрасывание монеты даёт ровно 1 бит, так что на 12 слов нужно 128 подбрасываний. Двадцатигранный кубик даёт log₂ 20 ≈ 4,32 бита, и Krux просит 30 бросков для 12 слов и 60 — для 24.
Лишние броски никогда не вредят, а недостающие вредят всегда, причём хеширование, о котором речь пойдёт ниже, нехватку скрывает. Двадцать бросков превращаются в 256-битное значение, которое выглядит случайным, но злоумышленнику достаточно перебрать 6²⁰ последовательностей бросков — около 52 бит.
Способ 1: броски хеширует устройство
Быстрее всего — аппаратное устройство для подписи, которое принимает броски кубика:
- Coldcard: New Seed Words → Advanced → 12 Word Dice Roll или 24 Word Dice Roll. Устройство предупреждает, что аппаратная случайность к броскам подмешиваться не будет.
- SeedSigner: Tools → New seed (пункт со значком кубика), затем 12 words (50 rolls) или 24 words (99 rolls).
- Krux: режимы для шестигранного (D6) и двадцатигранного (D20) кубика, с индикатором минимального числа бросков и оценкой энтропии.
Результат каждого броска вы вводите сразу, как он выпал. Затем все три устройства вычисляют SHA-256 от бросков, записанных текстом ровно так, как вы их ввели, и берут хеш как энтропию: все 256 бит для 24 слов и первые 128 бит для 12. Формула открыта (Coldcard, SeedSigner, Krux), поэтому одни и те же броски дают на всех трёх устройствах одни и те же слова — документация Krux говорит об этом прямо. Весь расчёт умещается в несколько строк на Python:
import hashlib
rolls = "123456" # пример из документации Coldcard; для настоящей фразы нужно 50 или 99 бросков
digest = hashlib.sha256(rolls.encode("ascii")).hexdigest()
print(digest[:32]) # энтропия для 12 слов: первые 128 бит
print(digest) # энтропия для 24 слов: все 256 бит
Для «123456» хеш начинается с 8d969eef, как в документации Coldcard. Визуализатор на странице «Как работает BIP39» принимает эти 32 или 64 шестнадцатеричных символа и показывает контрольную сумму, группы по 11 бит и слова.
Разные программы читают броски по-разному. В документации SeedSigner отмечено, что режим «Dice [1-6]» на странице BIP39 Иэна Коулмана (Ian Coleman) заменяет каждую шестёрку нулём и поэтому даёт другие слова; там советуют выбирать режим «Base 10» или «Hex». Для перекрёстной проверки устройства берите инструмент с той же формулой.
Coldcard умеет и подмешивать броски к собственному случайному числу, а не использовать их одни. В этом режиме вы выбираете New Seed Words и длину фразы, а затем добавляете броски кубика или монеты. Тогда сид не определяется ни микросхемой, ни кубиком по отдельности, зато по одним броскам его уже не воспроизвести: чтобы проверить результат, нужно записать собственное значение устройства — его показывают в виде 24 «TRNG-слов» — и запустить скрипт verify_seed_mix.py от Coinkite.
Способ 2: каждое слово вручную из 11 бросков
Без такого устройства броски можно превратить в слова самому. Каждое слово BIP39 — это 11-битное число от 0 до 2047, его номер в списке, поэтому нужен лишь честный способ получать биты:
- Чёт или нечет. Один бросок — один бит: 2, 4 или 6 — это 0, а 1, 3 или 5 — это 1. Так же работает монета: орёл — 1, решка — 0. На 12 слов уходит 128 бросков.
- По два бита, когда получается. Читайте 1 как 00, 2 как 01, 3 как 10, 4 как 11, 5 как 0, а 6 как 1. Все биты остаются честными, а в среднем выходит около 1,67 бита на бросок, так что на 128 бит хватит примерно 77 бросков.
Дальше:
- Запишите биты в одну строку в порядке бросков и разрежьте её на группы по 11. Первым 11 словам фразы из 12 слов нужен 121 бит, первым 23 словам фразы из 24 слов — 253. Следующие 7 бит (3 для 24 слов) оставьте для последнего слова.
- Переведите каждую группу в число. Под каждой единицей напишите вес её разряда — от 1024 слева до 1 справа — и сложите.
- Найдите слово. Номер 0 — abandon, 2047 — zoo. Кошельки почти всегда используют английский список, а русского в стандарте нет. В словаре BIP39 с переводом слова пронумерованы с единицы, поэтому прибавьте к числу 1. На странице со списком слов (на английском) можно выбрать нумерацию Binary (11 bits) и ввести 11 бит прямо в поиск.
- Подберите последнее слово так, как описано ниже.
Вот первое слово ещё одного официального тест-вектора, 7f7f7f7f… (legal winner thank year wave sausage worth useful legal winner thank yellow; как и все тест-векторы, он публичный), собранное из 11 бросков «чёт или нечет»:
| Вес разряда | 1024 | 512 | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Бросок | 2 | 5 | 3 | 1 | 5 | 3 | 3 | 1 | 4 | 5 | 1 |
| Бит | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
512 + 256 + 128 + 64 + 32 + 16 + 8 + 2 + 1 = 1019, а слово с номером 1019 (1020 при счёте с единицы) — legal.
Никогда не складывайте очки нескольких кубиков: у двух кубиков сумма 7 выпадает в шесть раз чаще, чем 2 или 12. Читайте каждый кубик отдельно.
Разбор на официальном тест-векторе
У самого простого официального тест-вектора BIP39 энтропия — 128 нулевых бит, 00000000000000000000000000000000 в hex, а фраза — «abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about». Он опубликован среди эталонных тест-векторов, так что никогда не отправляйте на него средства, но нули удобно разбирать вручную. Допустим, все 128 ваших бросков «чёт или нечет» оказались чётными:
- Первый 121 бит — нули. В каждой из одиннадцати групп по 11 бит стоит 00000000000 = 0, а слово 0 — abandon, так что первые одиннадцать слов — abandon, одиннадцать раз.
- Введите их в калькулятор. После одиннадцати abandon калькулятор последнего слова покажет 128 слов, которые завершают корректную фразу.
- Выберите вариант последними 7 битами. Они равны 0000000 = 0, значит, берём вариант номер 0, первый в списке: about.
- Почему именно about. По спецификации BIP39 контрольная сумма — это первые ENT/32 бита хеша SHA-256 от энтропии, а для 128 бит энтропии — 4 бита. SHA-256 от 16 нулевых байт начинается с 0x37, в двоичном виде 0011 0111, так что контрольная сумма — 0011. Последнее слово — это 7 свободных бит и за ними контрольная сумма: 0000000 0011 = 3, а слово номер 3, после abandon, ability и able, — about.
- Проверьте. На странице «Как работает BIP39» кнопка «Официальный тест-вектор» покажет те же биты, хеш и слова, а проверка сид-фразы подтвердит, что фраза корректна.
С 24 словами всё так же. 253 нулевых бита дают двадцать три abandon, а последнее слово — это 3 нулевых бита и 8-битная контрольная сумма 0110 0110, потому что SHA-256 от 32 нулевых байт начинается с 0x66. Получается 102 — слово art.
Как случайно выбрать последнее слово
В последнем слове — остаток энтропии и контрольная сумма: во фразе из 12 слов 7 случайных бит и 4 бита суммы, во фразе из 24 слов — 3 и 8. Для суммы нужен SHA-256, а его вручную никто не считает, поэтому варианты находит программа, а выбирает из них кубик:
- Введите первые 11 слов (или 23) в калькулятор последнего слова. Он покажет все слова, с которыми контрольная сумма сходится, в порядке списка: 128 после 11 слов и 8 после 23.
- Получите ещё 7 бит (3 для 24 слов) и прочитайте их как двоичное число от 0 до 127 (от 0 до 7).
- Отсчитайте вариант с этим номером, считая первый вариант нулевым. Маленькие цифры рядом со словами — номера в общем списке BIP39, а не в списке вариантов.
В порядке списка варианты отличаются ровно этими свободными битами, поэтому фраза сохраняет все 128 или 256 бит. Выбор слова по вкусу часть их теряет, как и привычка всегда брать первый вариант. В SeedSigner тот же шаг встроен как Calc 12th/24th word: свободные биты можно задать бросками монеты или заполнить нулями, но нули отнимают 7 бит и оставляют фразе из 12 слов 121 бит.
Как проверить готовую фразу
- Контрольная сумма. Введите фразу на странице проверки сид-фразы. Положительный результат значит, что все слова есть в списке и последнее подходит к остальным, но ничего не говорит о том, насколько слова случайны.
- Каждый шаг. Если вы собирали слова вручную, запишите 128 бит как 32 шестнадцатеричные цифры (каждые 4 бита — одна цифра от 0 до f) и введите их в визуализатор на странице «Как работает BIP39»: группы и слова должны совпасть с вашими.
- Второе устройство. Для первого способа введите те же броски в другой инструмент с той же формулой SHA-256 — слова должны совпасть.
- Настоящее восстановление. Восстановите фразу в кошельке, которым будете пользоваться, и запишите первый адрес получения, а перед первым переводом восстановите кошелёк ещё раз по бумажной копии: тот же адрес значит, что копия верна. Пошагово это описано в статье о том, как восстановить кошелёк по сид-фразе. Не каждый кошелёк принимает 24 слова — Exodus, например, работает только с 12; подробнее — в статье 12 или 24 слова.
Частые ошибки
- Неровный кубик. Берите кубик с острыми рёбрами и точками вровень с гранью — например, казино-кубик: такие делают так, чтобы они оставались сбалансированными, а у игровых кубиков скруглённые углы и углублённые точки. Небольшой перекос обходится дёшево: кубик, у которого шестёрка выпадает в одном случае из пяти, всё равно даёт 2,58 бита на бросок — около 129 бит за 50 бросков. Сильный перекос виден по подсчёту: прошивка Coldcard отказывается создавать сид только из бросков, если какое-то число выпало больше чем в 30% бросков, а Krux показывает оценку энтропии, чтобы подозрительные броски бросались в глаза.
- Пропущенные или «исправленные» броски. Записывайте каждый бросок сразу. Если перебрасывать кубик всякий раз, когда число повторяет предыдущее, у каждого броска остаётся 5 исходов вместо 6, и 50 бросков несут около 116 бит, а не 129. Инструкция Coldcard: бросать заново перед каждым вводом, вводить только выпавший результат и перебрасывать неясные броски и те, где кубик лёг с перекосом.
- Слишком мало бросков. Хеш выглядит одинаково, получен ли он из 20 бросков или из 99.
- Приложение или компьютер вместо кубика. Приложение-«кубик» возвращает программный генератор, то есть то, от чего вы хотели уйти; Coldcard прямо просит не выдумывать броски и не пользоваться приложением или компьютером.
- Оставленные записи. Броски, биты и номера слов — это ваша фраза в другой форме: тот, у кого есть вся последовательность, восстановит кошелёк. Когда фраза записана и проверена, уничтожьте черновики или храните их так же надёжно, как саму фразу; не фотографируйте их и не набирайте в телефоне. Бросайте там, где стол не видят ни люди, ни камеры: Coldcard просит прятать от людей и камер даже хеш, который показывает во время бросков.
- Последнее слово по вкусу. Так теряется до 7 бит; пусть выбирает кубик, как описано выше.
Готовую фразу храните как любую другую — на бумаге или металле, без копий в сети. Варианты сравнивают статьи как хранить сид-фразу и металлическая сид-фраза.
Кубики или придуманные слова?
И кубики, и придуманные слова отнимают выбор у кошелька, но случайность сохраняют только кубики. Кубику всё равно, какие слова легко запомнить. Человек же выбирает слова со смыслом, ставит их в грамматическом порядке и берёт из нескольких сотен знакомых, а если выбирать только понятные английские слова, круг сужается ещё сильнее. Именно такие варианты злоумышленники перебирают первыми. Сам стандарт BIP39 оговаривает, что не предназначен для превращения придуманных пользователем предложений в сид, а мозговые кошельки (brain wallets) из придуманных фраз почти все были опустошены, как правило, в течение суток. Калькулятор последнего слова сделает корректными любые 11 слов, но случайными их не сделает: если первые 11 выбрали вы, фраза остаётся придуманной. Подробно, с разбором реальных взломов, — в статье можно ли придумать сид-фразу самому.
Частые вопросы
Надёжнее ли фраза из бросков кубика, чем фраза от аппаратного кошелька?
Не сама по себе. Кубики убирают одну вещь, которой приходится доверять, — генератор случайных чисел устройства, — но добавляют место для человеческих ошибок. Некоторые устройства сочетают источники: Trezor смешивает свою аппаратную случайность со случайностью компьютера или телефона, а Coldcard умеет подмешивать броски к собственному значению. Как устроены такие устройства, рассказывает статья об аппаратных кошельках. И в любом случае фраза ничего не защитит, если её плохо хранить.
Можно ли использовать кубики с Trezor или Ledger?
Не для создания фразы. Устройства Ledger создают её генератором случайных чисел внутри защищённого чипа (Secure Element), а Trezor в августе 2026 года сообщил, что рассматривает поддержку энтропии от пользователя, но пока не может её обещать. Восстановить фразу, созданную кубиками, можно на обоих, если они принимают её длину.
Можно ли взять монету или другой кубик?
Да, если все исходы равновероятны. Монета даёт 1 бит за подбрасывание, двадцатигранный кубик — около 4,32 бита за бросок. Для ручного способа удобнее всего кубики с 4, 8 или 16 гранями: каждый их бросок даёт ровно 2, 3 или 4 бита.
Нужно ли хранить записи бросков?
Нет. Когда слова записаны и проверены, броски только добавляют риска: уничтожьте их или храните так же надёжно, как фразу.
Можно ли бросками кубика выбрать и парольную фразу BIP39?
Да. Для паролей и парольных фраз Trezor в своём руководстве описывает выбор слов из стандартного списка бросками настоящих кубиков: случайность дают кубики, а не ваша голова. Парольная фраза BIP39 меняет весь кошелёк, поэтому храните её копию отдельно от слов.
Можно ли тянуть слова из шапки?
Да, если жеребьёвка честная. В документации Passport от Foundation описано, как сложить все 2048 слов в коробку и тянуть по одному, возвращая каждое перед следующим разом, — 11 раз для фразы из 12 слов или 23 раза для 24 слов; последнее слово затем вычисляет устройство. Та же идея, что с кубиками, только бумаги больше.