Что такое «начальное слово» кошелька, которое обычно используется в популярных клиентах кошельков, и что оно делает?

Я использую довольно старую версию Multibit classic и недавно решил обновить ее. Я попробовал Multibit HD и Electrum и заметил, что в обоих случаях я настроил кошелек с «семенем слова». Это просто набор случайных слов, который, по-видимому, используется в алгоритме. Вопрос в том, что именно он делает? Кто-то сказал мне, что он генерирует для вас приватные ключи, и все, что вам нужно, это начальное слово, и вы сможете восстановить/сгенерировать все свои приватные ключи. Как это работает? Какой алгоритм используется в семени для генерации ключей?

Эти слова, по-видимому, очень важны, о чем Multibit предупреждает на своем сайте :

Чтобы восстановить свой кошелек и восстановить свои биткойны, у вас должны быть слова вашего кошелька.

С помощью слов вашего кошелька вы можете восстановить свой биткойн. Вы должны хранить слова своего кошелька в безопасности, потому что любой, кто знает слова вашего кошелька, может украсть ваш биткойн.

Исходные слова, похоже, заменяют закрытые ключи, судя по тому, что говорит о них Multibit. Я лично очень привязан к идее иметь свои закрытые ключи, так почему я должен вместо этого довольствоваться этим словом seed? Некоторые, по-видимому, думают, что это достаточно безопасно: Достаточно ли безопасна исходная фраза из 12 слов? , но достаточно ли его можно использовать?

Эти вопросы: есть ли у кошелька, содержащего несколько адресов, один закрытый ключ? и Почему одни и те же 12 слов могут создавать разные семена в файле кошелька Electrum? намек на то, что здесь происходит, но не хватает деталей. Кажется, это фраза «иерархические детерминированные» кошельки, отсюда и «HD» в «Multibit HD».

Этот вопрос точно отражает мои опасения: важно ли иметь незашифрованную резервную копию закрытого ключа?

Ответы (2)

В HD-кошельках один ключ может быть использован для создания всего дерева пар ключей. Этот единственный ключ служит «корнем» дерева. Слово seed — это просто более удобочитаемый способ выражения ключа, используемого в качестве корня, поскольку его можно алгоритмически преобразовать в корневой закрытый ключ. Эти слова в таком порядке всегда будут генерировать один и тот же ключ.

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

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

Иерархический детерминированный кошелек не требует резервного копирования такого большого количества данных. Закрытые ключи для каждого адреса, который он когда-либо выдавал, могут быть пересчитаны с учетом корневого ключа. Этот корневой ключ, в свою очередь, можно пересчитать, введя слово seed.

Соответствующие BIPS:

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki

Отличная работа до сих пор. Спасибо. Особое беспокойство вызывает то, что я хочу точно знать, как слово seed превращается в дерево закрытых ключей. Допустим, мы начнем с семени this is the word seed. Как это используется и с помощью каких алгоритмов составляется дерево закрытых ключей. Тогда могу ли я с уверенностью сказать, что могу сгенерировать это дерево без кошелька, который первым его сгенерировал?
Я считаю, что это определено в BIP 39: github.com/bitcoin/bips/blob/master/…
Я тоже хочу это знать, когда у меня есть семя, предоставленное мне программным обеспечением кошелька, вообще говоря, можно ли импортировать это семя в другой кошелек и восстановить все мои монеты в случае исчезновения исходного провайдера кошелька?
Если оба кошелька соответствуют BIP 39, они должны быть совместимы. Если нет, то я не могу сказать.

Основной ответ на ваш главный вопрос в заголовке: строка слов, известная как «фраза восстановления» криптокошелька, или «мнемонические слова», или «начальные слова», представляет собой просто удобочитаемый формат базовой машиночитаемой энтропии, которая — это большое случайное число, используемое для создания криптохранилища.

ответ на ваш второй и третий вопрос: точные шаги от сид-адресов до адресов кошелька включают использование хеш-функции (HMAC) и растяжение ключа с помощью PBKDF2 со значениями по умолчанию для поля фразы-пароля.

[Excerpt from BIP39 specification "To create a binary seed from the mnemonic, we use the PBKDF2 function with a mnemonic sentence (in UTF-8 NFKD) used as the password and the string "mnemonic" + passphrase (again in UTF-8 NFKD) used as the salt. The iteration count is set to 2048 and HMAC-SHA512 is used as the pseudo-random function. The length of the derived key is 512 bits (= 64 bytes)." ]

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

Это работает следующим образом: при создании криптохранилища определенный объем базовых двоичных данных генерируется криптографически безопасным генератором случайных чисел (CSPRNG) программного обеспечения кошелька, который локально собирает случайные биты с устройства пользователя, например 128 бит для Мнемоническая фраза восстановления из 12 слов.

Эти 12 слов представляют собой просто представление 128 бит + 4-битная контрольная сумма (всего 132 бита на основе 12 групп по 11 бит, где каждая группа представляет 11-битное число в списке из 2048 11-битных чисел, где каждое номер соответствует уникальному слову в списке). Таким образом, слова — это просто простой способ воссоздать это число, так как со словами легче обращаться (т. е. писать, читать, записывать, хранить и иным образом обрабатывать по сравнению с записью или чтением 132-битного двоичного числа).

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

Например, следующая мнемоника ниже основана на следующей энтропии:

132 bits of initial entropy:  011001011001101110001010000000111011111110111011100000001100110111001101110000111100001110000011110101001011000011010101000001011100
Length of total bits: 132 bits divided into 12 groups of 11 bits
['01100101100', '11011100010', '10000000111', '01111111011', '10111000000', '01100110111', '00110111000', '01111000011', '10000011110', '10100101100', '00110101010', '00001011100']
Corresponding index values for each group (in base 10):
[812, 1762, 1031, 1019, 1472, 823, 440, 963, 1054, 1324, 426, 92]
Corresponding mnemonic based on BIP39 english wordlist:
grain sword liberty legal retreat group damage journey long pitch crystal argue

Следующий инструмент можно использовать в образовательных целях с фразами восстановления: https://iancoleman.io/bip39/ (примечание: я являюсь участником этого инструмента на Github)

Я думаю, что лучше всего называть мнемонические слова «ключами» к «криптохранилищу» (а не закрытым ключом к кошельку или адресу кошелька, что является другим контекстом, где закрытый ключ умножается на генераторную точку для вычисления публичного адреса с использованием эллиптической криптографии). Опять же, криптохранилище BIP39, использующее BIP44, может содержать несколько криптовалют (учетные записи с разными путями вывода), и где каждая криптовалюта может содержать до 2 миллиардов производных дочерних адресов из их расширенных открытых/закрытых ключей на основе структуры кошелька HD в соответствии с BIP32. .

Что касается вашего вопроса о безопасности/удобстве использования: с точки зрения того, является ли мнемоника из 12 слов безопасной, мы можем измерить, что ее максимальная теоретическая безопасность в битах составляет не более 128 бит (используя уравнение Клода Шеннона для энтропии, где (2048 ^ 12 = 2 ^132)-4 бита = 2^128), учитывая размер начальной энтропии, и поскольку последние 4 бита являются детерминированными, мы вычитаем это из общего количества битов, которые представляет мнемоника (поскольку она основана на хэше, которая является означает замедлить кого-то от перебора случайных 12-слов).

  • В противном случае удаление только одного бита снизит безопасность наполовину, так как (2**127)*2 == 2**128, тогда как 128 бит безопасности — это всего лишь квадратный корень из мнемоники из 24 слов, которая имеет 256 бит безопасности, начиная с (2**128)*(2**128) == 2**256.

С точки зрения того, достаточно ли они безопасны, зависит от возможностей злоумышленника. С помощью алгоритма Гровера, работающего на квантовом компьютере, поиск, который обычно занимает n раз, может быть ускорен до квадратного корня из n раз, таким образом, 128-битная безопасность может быть уменьшена до 64-битной с использованием классических предположений компьютерной безопасности. тогда как 256-битный ключ при такой квантовой атаке может быть уменьшен до 128-битной безопасности на классическом компьютере. Существуют также потенциальные угрозы от алгоритма Шора, работающего на достаточно быстром квантовом компьютере, а также от квантовой версии факторизации эллиптических кривых (ECM), известной как GEECM, которая может быть применима к криптохранилищам биткойнов, а также к закрытым ключам.

Что касается вашего вопроса о HD-кошельках:

Невозможно создать резервную копию всех возможных закрытых ключей в HD-кошельке, поскольку их может быть 2 миллиарда на каждую поддерживаемую криптовалюту, каждый из которых получен из расширенных открытых/закрытых родительских ключей (xPub и xPrv). Следовательно, мнемонические слова служат главным удобством для хранения и восстановления этих закрытых / открытых ключей, поскольку их можно легко получить, исходя из мнемонических слов или лежащей в основе энтропии, которую представляют слова. Затем расширенные открытые/закрытые ключи можно использовать для воссоздания всех дочерних закрытых/открытых ключей.