Как преобразовать мнемоническую фразу туда и обратно между разным количеством слов?

Я относительно новичок в криптовалютах в целом и пробовал использовать биткойны и несколько альткойнов, но меня всегда беспокоит, что некоторые цифровые активы доступны не во всех кошельках. Насколько я понимаю, я мог бы использовать одну и ту же мнемоническую фразу во всех кошельках, даже если некоторые активы не указаны в списке, если это правда, мне не нужно было бы хранить разные списки слов для каждого кошелька. Единственная проблема заключается в том, что большинство популярных кошельков поддерживают разное количество слов в мнемонической фразе. Можно ли преобразовать туда и обратно, скажем, фразу из 24 слов в фразу из 12 слов, и какие инструменты я могу использовать для преобразования?

Технические подробности о том, как эти слова сопоставляются с ключом, вы найдете в спецификации BIP39 . Теоретически возможно, что есть два предложения, которые генерируют один и тот же ключ, но возможность найти такое столкновение (HMAC-SHA512) было бы огромной проблемой для криптографии в целом ( crypto.stackexchange.com/questions/3049/… ) . вы можете заработать что-то похожее на нобелевскую премию, если найдете способ :)

Ответы (2)

Можно ли преобразовать туда и обратно, скажем, фразу из 24 слов в фразу из 12 слов, и какие инструменты я могу использовать для преобразования?

Нет, это невозможно. Мнемонические слова представляют собой энтропию, например, мнемоническая фраза из 24 слов представляет 256 бит энтропии, а мнемоническая фраза из 12 слов представляет 128 бит энтропии. Эти мнемонические слова передаются функции PBKDF2 для создания начального числа, которое затем будет использоваться для создания мастер-ключей для различных токенов. Также важно отметить, что если вы используете фразу-пароль для своего кошелька, эта фраза-пароль будет использоваться в качестве «соли» в функции PBKDF2 и сгенерирует совершенно другое начальное число, если бы вы не использовали парольную фразу.

Насколько я понимаю, я мог бы использовать одну и ту же мнемоническую фразу во всех кошельках, даже если некоторые активы не указаны в списке, если это правда, мне не нужно было бы хранить разные списки слов для каждого кошелька.

При этом следует соблюдать осторожность, так как многие кошельки используют разные пути генерации мастер-ключа. Если вы взаимозаменяемо используете несколько кошельков, попробуйте записать путь получения. Например, скажем, аппаратный кошелек A использует m/49'/0'/0' в качестве пути, он будет генерировать совершенно другие адреса по сравнению с кошельком, который будет использовать вывод am/44'/0'/0'.

Я задавал себе подобные вопросы, которые позволили мне больше узнать о мнемонике биткойна и, как и многих других (не всех) криптовалют, которые используют BIP39 , который представляет собой спецификацию, основанную на уникальном списке слов из 2048 слов (с нулевым индексом от 0 до 2047). ), доступный на разных языках (хотя я должен отметить, что вы не можете переводить слова на поддерживаемые языки, поскольку они не содержат одинаковые значения индекса на разных языках для данной мнемоники, с точки зрения одного метода «преобразования», который вы могли бы иметь в виду).

  • Целью BIP39 является создание мнемоники, удобочитаемой для человека (легко записываемой, декламируемой, читаемой и т. д.) по сравнению с лежащими в основе мнемоникой машиночитаемыми двоичными данными, которые представляет мнемоника (нули и единицы, которые могут быть представлен в шестнадцатеричном формате или в других обозначениях/базовых числах), но его нелегко писать/произносить, и, таким образом, BIP39 решает эту проблему, однако понимание того, что происходит под поверхностью, является ключевым для работы с мнемоникой и взятия под контроль вашей криптобезопасности.

О мнемонике: В основе каждой мнемоники лежит очень большое случайное число и контрольная сумма, которая добавляется в конец, поэтому вы не можете просто выбрать свои 12 или 24 слова, так как часть последнего слова вычисляется на основе этой контрольной суммы ( об этом ниже).

Например, в BIP39 список слов соответствует диапазону степени 2 ^ 11 (т. е. 2048), и причина, по которой мнемоника оказывается состоящей из 12 или 24 слов, зависит от желаемой безопасности с точки зрения битов, в зависимости от того, является ли это 128 битами. или 256 бит.

Поэтому, когда вы щелкаете, чтобы создать кошелек, совместимый с BIP39, должен быть криптографически безопасный генератор псевдослучайных чисел (CSPRNG), такой как криптографический API WorldWideWide Consortium (W3C) для веб-кошельков (примечание: я являюсь участником этого spec на Github), работающий локально, который собирает различные биты случайности с вашего локального устройства таким образом, что злоумышленнику будет трудно воспроизвести или предсказать, а затем эти биты используются в качестве начальной энтропии (для создания мнемоники).

  • Другими словами, для мнемоники из 24 слов устройство выдаст 256 бит, преобразует эту строку в массив байтов и хэширует ее с помощью SHA256, что приводит к еще одному 256-битному выводу, из которого берутся и добавляются первые 8 бит. до конца начальной энтропии, что делает его длиной 264 бита.

    Если вы разделите 264 бита на 11 бит на слово, результирующие 24 группы по 11 бит каждая будут соответствовать одному и тому же значению 11-битного индекса, где каждое слово находится в списке (где 0 = 00000000000 и 2047 = 11111111111). Таким образом, каждому слову соответствует 11-битное число в полученной мнемонике. Слова — это просто простой способ найти 11-битное число, воссоздать исходную энтропию + контрольную сумму для получения кошелька.

С точки зрения преобразования: не рекомендуется выбирать свои собственные слова, во-первых, потому что этот процесс выбора может иметь некоторую предвзятость, которая снизит результирующую безопасность мнемоники по сравнению со случайно сгенерированной, а во-вторых, потому что контрольная сумма должна быть вычислена детерминировано ( поэтому, если вы сократите свои 24 слова пополам и используете первые 12 в другом кошельке, очень мала вероятность того, что они будут соответствовать контрольной сумме (вероятность 1/16), тогда как выбор собственных 24 слов будет еще более маловероятным. быть жалобой на контрольную сумму (вероятность 1/256).

  • Поэтому лучше не выбирать собственные слова и не нарезать мнемонику, а использовать доверенное программное обеспечение в среде холодного хранения (в автономном режиме) для максимальной безопасности.

Энтропия: то же самое относится и к выбору вашей собственной энтропии, с точки зрения того, что лучше оставить это доверенному программному обеспечению. Хотя другие в отрасли привели несколько примеров подбрасывания монеты 128 раз и написания 1 для каждого орла и 0 для каждой решки, что является способом вручную создать 128-битную энтропию для кошелька (где кошелек будет вычислять 4-битная контрольная сумма) при условии, что процесс подбрасывания монеты является случайным (т. е. нет монеты, взвешенной с одной стороны).

  • Однако многие кошельки не позволяют вставлять энтропию, а позволяют только импортировать мнемонику или генерировать ее на лету.

Существует инструмент мнемонического конвертера ( примечание : я участвую в нем на Github) с расширенными функциями, которые могут принимать энтропию для создания мнемоники различной длины, но я бы не рекомендовал это для тех, кто только начал, или даже для тех, у кого много лет. опыта, если вы не владеете спецификацией BIP39, а также BIP44 и BIP32, и всеми бесчисленными способами, которыми одна маленькая ошибка может привести к необратимой потере средств.

Что касается вопроса о преобразовании : хотя я не совсем уверен, что вы имели в виду под «преобразованием», предполагая, что вы имели в виду разрезание 24 мнемоник пополам, чтобы использовать только первые 12 слов, я объяснил выше, почему это не жизнеспособный вариант, если только 12 слов не окажутся совместимыми с контрольной суммой. (некоторое программное обеспечение может сканировать действительные мнемоники из 24 слов, чтобы найти тот, который также является претензией к контрольной сумме при использовании только первых 12 слов, но последние 12 слов, вероятно, не будут соответствовать контрольной сумме, так как будет шанс 1/256 как для первых 12, так и для последних 12).

  • Такие мнемоники существуют, но их трудно найти/создать, сохраняя при этом желаемый уровень безопасности с точки зрения битов (уменьшение мнемоники на одно слово снижает ее безопасность наполовину, таким образом, мнемоника из 12 слов не имеет половины безопасности 24-словной мнемоники). -словная мнемоника, но вместо этого имеет безопасность, равную квадратному корню из мнемоники из 24 слов, где 2 ^ 128 * 2 ^ 128 == 2 ^ 256. Примечание: я написал аналогичную программу, которая находит действительные обратимые палиндромные мнемоники , которые соответствуют контрольной сумме с точки зрения BIP39, но только в образовательных целях.

Что касается использования одной и той же мнемоники во всех кошельках: если кошелек совместим с BIP39, есть большая вероятность, что он также совместим с BIP44 для поддержки нескольких учетных записей / монет, что означает, что до тех пор, пока правильный путь деривации был добавлен для поддержки разработчики этого кошелька, эта криптовалюта будет поддерживаться и может использоваться с вашей существующей мнемоникой (но не в том случае, если они используют другой список слов, например, Monero, который не совместим с BIP39). Вот почему мне нравится думать о мнемониках как о криптохранилищах, а не о кошельках (поскольку одна мнемоника может содержать несколько учетных записей криптовалют, каждая из которых содержит несколько кошельков, см. HD-кошельки, чтобы узнать больше об этом на основе BIP32).

  • Хотя консолидация всех ваших криптоактивов в одной мнемонике может быть удобной, она также концентрирует риск с точки зрения хранения, ответственного за управление этой мнемоникой, тогда как наличие нескольких мнемоник с несколькими криптовалютами в каждой добавляет бремя большего количества криптохранилищ для управления, но снижает риск в случае компрометации одного (я бы сказал, что у большинства опытных криптоинвесторов есть несколько, так как один или несколько могут использоваться для горячих кошельков, которые находятся на устройствах, подключенных к Интернету, тогда как другие мнемоники, используемые для холодного хранения, находятся на оборудовании кошельки или устройства, которые никогда не подключаются к сети.

Вывод: лучше всего использовать программное обеспечение, предоставляемое базовым проектом токена/криптовалюты, поскольку в некоторых проектах используется другой список слов и/или другие различия, которые могут сделать мнемонику несовместимой и привести к безвозвратной потере средств или другим неудобствам, таким как если одна и та же мнемоника может получить разные адреса, которые не совпадают в программном обеспечении, даже с одним и тем же выбранным путем деривации, если корневое семя или другие шаги расходятся по неизвестным причинам (и такое устранение неполадок очень техническое, чтобы найти потенциальную ошибку).

Пример технических данных для случайно сгенерированного мнемоника (не используйте его с реальными средствами):

Начальная энтропия 128 бит в шестнадцатеричном формате:

659b8a03bfbb80cdcdc3c383d4b0d505

Энтропия в байтах:

bytearray(b'e\x9b\x8a\x03\xbf\xbb\x80\xcd\xcd\xc3\xc3\x83\xd4\xb0\xd5\x05')

Хэш-дайджест SHA-256 байтов энтропии в шестнадцатеричном формате:

c993b627272ef0cbc683ce275cf47ff82f73403ece8155bdd92c2dca2d86e3b1

Частичный фрагмент начального «байта» хэша, представляющий первые 4 бита:

c

Первые n битов хеша для преобразования в шестнадцатеричный формат:c

Контрольная сумма (шестнадцатеричная в биты):

1100

Начальная энтропия + контрольная сумма = общее количество битов:

011001011001101110001010000000111011111110111011100000001100110111001101110000111100001110000011110101001011000011010101000001011100

Общая длина бит:

132

Разделены на 12 групп по 11 бит:

['01100101100', '11011100010', '10000000111', '01111111011', '10111000000', '01100110111', '00110111000', '01111000011', '10000011110', '10100101100', '00110101010', '00001011100']

Соответствующие значения индекса для каждой группы (в базе 10):

[812, 1762, 1031, 1019, 1472, 823, 440, 963, 1054, 1324, 426, 92]

Соответствующая мнемоника:

grain sword liberty legal retreat group damage journey long pitch crystal argue


Я хотел иметь конвертер, который я мог бы использовать для доступа к одним и тем же активам в двух разных кошельках с разным количеством слов мнемонической фразы, чтобы я просто сохранял либо фразу из 12 слов, либо фразу из 24 слов и использовал ее для восстановления. любой кошелек с той же учетной записью HD. Но судя по тому, что вы сказали, это невозможно.
Верно, это невозможно, так как коллизии нет, поскольку существует только 2048^12 возможных мнемоник из 12 слов, из которых только 2^128 действительны из-за требования контрольной суммы (и 2048^24 возможных мнемоники из 24 слов только с 2^ 256, которые имеют действительную контрольную сумму), и каждая из этих теоретически возможных мнемоник, включая недействительные, имеет различную лежащую в основе энтропию, и нет прямой связи от одной мнемоники к другой, поскольку изменение всего одного бита будет иметь эффект водопада и изменить все слова.