- Главная
- / Как работает BIP39
Как работает BIP39: от энтропии к словам
Посмотрите, как случайные биты становятся сид-фразой: энтропия, её контрольная сумма SHA-256, группы по 11 бит и слова, на которые они указывают. Начните с официального тест-вектора или создайте новую тестовую энтропию.
Только для обучения: никогда не вводите здесь энтропию или слова настоящего кошелька.
Шаг 1. Энтропия
128 случайных бит, разбитых на группы по 11. Последняя группа пока неполная: её дополнит контрольная сумма.
00000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000····
Шаг 2. Контрольная сумма
SHA-256 от энтропии. Первые 4 бит хеша становятся контрольной суммой и дописываются к энтропии.
- SHA-256
- 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb
- Контрольная сумма (4 бит)
- 0011
Шаг 3. Группы по 11 бит
Каждая группа — число от 0 до 2047, номер слова в списке. Наведите на группу или нажмите на неё, чтобы увидеть её биты выше.
Шаг 4. Фраза
Слова по порядку и есть мнемоническая фраза. Затем кошелёк превращает её в сид с помощью PBKDF2.
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
Тестовая фраза: никогда не отправляйте на неё средства.
Посмотреть её сид и ключи в конвертереПроверить фразу по контрольной сумме
Четыре шага BIP39
Спецификация BIP39 превращает случайное число в слова за четыре шага, одинаковых во всех совместимых кошельках:
- Энтропия. Кошелёк берёт от 128 до 256 случайных бит с шагом 32. Это число, ENT, и есть весь секрет.
- Контрольная сумма. Кошелёк хеширует энтропию функцией SHA-256 и берёт первые ENT/32 бит хеша — это CS. Для 128 бит энтропии получается 4 бита.
- Группы. Контрольная сумма дописывается к энтропии, и результат режется на группы по 11 бит. Каждая группа — число от 0 до 2047.
- Слова. Каждое число — номер слова в списке из 2048 слов, считая с нуля. Слова по порядку и есть мнемоническая фраза.
| Слов | Энтропия (ENT) | Контрольная сумма (CS) | Всего бит |
|---|---|---|---|
| 12 | 128 бит | 4 бит | 132 = 12 × 11 |
| 15 | 160 бит | 5 бит | 165 = 15 × 11 |
| 18 | 192 бит | 6 бит | 198 = 18 × 11 |
| 21 | 224 бит | 7 бит | 231 = 21 × 11 |
| 24 | 256 бит | 8 бит | 264 = 24 × 11 |
Почему последнее слово особенное
Контрольная сумма всегда оказывается в конце, внутри последнего слова. В фразе из 12 слов последнее слово содержит 7 бит энтропии и 4 бита контрольной суммы, поэтому, когда первые 11 слов уже выбраны, закончить фразу могут только 128 слов из 2048. В тест-векторе выше SHA-256 от 16 нулевых байтов начинается с 0x37, в двоичном виде 0011 0111, значит, контрольная сумма равна 0011, а последний номер — 3, то есть about. Калькулятор последнего слова покажет все допустимые окончания для тестового начала фразы, а проверка сид-фразы проверит контрольную сумму целой фразы.
От слов к сиду
Слова не используются как ключ напрямую. Кошелёк пропускает фразу через PBKDF2-HMAC-SHA512 с 2048 итерациями, а солью служит текст mnemonic плюс необязательная парольная фраза; получается 512-битный сид. По BIP32 из сида получается главный ключ, а путь деривации выбирает ключи для каждого счёта и адреса. Все эти значения для тестовой фразы показывает конвертер сид-фразы в приватный ключ.
Тест-векторы для проверки
BIP39 ссылается на официальные тест-векторы в python-mnemonic, эталонной реализации стандарта. Вставьте энтропию любого из них в инструмент выше — слова должны совпасть в точности. Векторы общеизвестны, поэтому никогда не отправляйте на них средства.
| Энтропия (hex) | Мнемоническая фраза |
|---|---|
| 00000000000000000000000000000000 | abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about |
| 7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f | legal winner thank year wave sausage worth useful legal winner thank yellow |
| 80808080808080808080808080808080 | letter advice cage absurd amount doctor acoustic avoid letter advice cage above |
| ffffffffffffffffffffffffffffffff | zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong |
| 0000…0000 (256 бит) | 23 раза abandon, затем art |
Самое рискованное — создавать энтропию самому: люди плохо придумывают случайные числа. Сколько слов выбрать, разбирает статья 12 или 24 слова, а что такое сама сид-фраза — статья что такое сид-фраза.
Как работает BIP39 — частые вопросы
Почему в BIP39 ровно 2048 слов?
Потому что 2048 — это 2 в 11-й степени, и одно слово хранит ровно 11 бит. Энтропия вместе с контрольной суммой всегда даёт число бит, кратное 11: 132 бита для 12 слов и 264 для 24.
Контрольная сумма защищает фразу?
Нет, она только ловит ошибки: опечатка или переставленные слова обычно её ломают, и кошелёк отклоняет фразу, а не открывает пустой кошелёк. Секретности она не добавляет — её может вычислить любой, кто знает энтропию.
Можно ли сделать фразу из своей энтропии?
Технически да, как показывает инструмент выше, но настоящую случайность дают только честные игральные кости или монета, а делать это нужно на компьютере без интернета, а не на веб-странице. Для настоящего кошелька фразу должен создать аппаратный кошелёк или приложение кошелька.
В других языках всё так же?
Да. Биты и номера те же, отличается только список из 2048 слов. Номер 0 — это abandon в английском и ábaco в испанском, поэтому одна и та же энтропия даёт на разных языках разные фразы и разные сиды. Русского списка в BIP39 нет.