Глоссарий / Кошельки и хранение
BIP39
Другие названия: BIP-39, Мнемонический код.
- Что такое BIP39?
- BIP39 представляет собой спецификацию 2013 года, которая кодирует энтропию кошелька словами из фиксированного списка на 2048 слов и растягивает их в сид длиной 512 бит.
Определено в BIP-39.
Почти каждый кошелек, который можно купить, реализует ее, поэтому фраза, записанная на устройстве одного бренда, восстанавливается на другом. Документ был подан 10 сентября 2013 года, и Bitcoin Core до сих пор ее так и не реализовал. Его авторитет в отношении вашей резервной копии основан на том, что его приняла отрасль, а не на процессе стандартизации.
Как это работает
Марек Палатинус и Павол Руснак из SatoshiLabs вместе с Аароном Вуазином и Шоном Боу написали BIP-39. Спецификация определяет два преобразования и ничего больше.
Первое превращает случайные данные в слова. Кошелек берет энтропию в 128, 160, 192, 224 или 256 бит, хеширует ее с помощью SHA-256 и добавляет в качестве контрольной суммы первые биты этого хеша в количестве, равном длине энтропии, деленной на 32. Затем итог читается кусками по 11 бит, и каждый кусок выбирает одно слово из списка ровно на 2048 слов. Пять размеров энтропии дают соответственно 12, 15, 18, 21 и 24 слова, и два, с которыми вы действительно столкнетесь, находятся на краях этого диапазона.
Контрольная сумма мала намеренно. Фраза из 12 слов несет четыре бита контрольной суммы, поэтому случайно собранный список из двенадцати допустимых слов проходит проверку примерно один раз из шестнадцати. Этого достаточно, чтобы поймать почти любую ошибку при переписывании вручную, и совершенно недостаточно, чтобы сделать придуманную фразу безопасной.
Второе преобразование превращает слова в сид. Фраза нормализуется в Unicode NFKD, затем проходит через PBKDF2 с использованием HMAC-SHA512 за 2048 итераций, при этом соль образуется буквальной строкой "mnemonic", за которой следует необязательная кодовая фраза пользователя. Выходные данные всегда имеют 512 бит, была ли фраза из 12 слов или из 24.
Списки слов являются частью стандарта, а не украшением. Английский список построен так, что никакие два слова не совпадают первыми четырьмя буквами, а визуально путающиеся пары исключены. Официальные списки также существуют для японского, корейского, испанского, китайского в обеих письменностях, французского, итальянского, чешского и португальского. Фраза имеет смысл только в отношении списка, из которого она взята, поэтому испанская фраза, введенная в кошелек, поддерживающий только английский, сразу же отвергается.
Где это встречается
Каждый экран настройки аппаратного кошелька, каждое диалоговое окно «восстановить из 12 или 24 слов» и каждый процесс восстановления в распространенном программном обеспечении в основе своей являются BIP-39. Совместимость, которую это дает, реальна и ее стоит защищать: именно поэтому вышедшее из строя устройство становится неудобством, а не потерей.
Слабое место стандарта в том, что он оставляет за рамками. Фраза ничего не говорит о том, какой путь деривации, какой тип скрипта или какое программное обеспечение кошелька ее создали, и в ней нет поля версии, чтобы добавить это позже. Два кошелька могут правильно прочитать одни и те же слова и все же показать вам разные адреса и разные балансы. Запись пути рядом со словами является стандартным обходным решением, и это исключительно договоренность, а не то, чему способствует спецификация.
2048 итераций PBKDF2 становятся второй претензией к стандарту. Это количество было дешевым в 2013 году и сейчас является тривиальным, поэтому растяжение почти не дает защиты тому, кто выбирает слабую необязательную кодовую фразу. Оно вообще ничего не защищает в самих словах, которые полагаются на свои 128 или 256 бит машинной энтропии.
BIP39 vs HD-кошелек
BIP-39 превращает слова в сид; BIP-32 превращает сид в дерево ключей. Это отдельные документы разных авторов, и кошелек может реализовать один без другого. Bitcoin Core полностью иерархически детерминирован и вовсе не поддерживает мнемонику. Electrum столь же иерархически детерминирован и использует собственный формат фразы со встроенным маркером версии. Считайте «совместимый с BIP-39» обещанием о чтении ваших слов, а не обещанием о том, какие адреса появятся после этого.