А знаете ли вы, что вы можете хранить биткоины… в собственной голове? Для этого достаточно лишь запомнить несколько слов. Я расскажу вам о мнемонических seed-фразах в Биткоине и о том, как они работают.
В сети Биткоин вы контролируете свои монеты посредством секретного, закрытого ключа. На самом деле этот ключ представляет собой длинное секретное число, которое вы используете для авторизации перевод средств со своего кошелька.
Если вы создаете кошелек для криптовалют, то скорее всего вам предложат записать некоторые слова (чаще всего 12 либо 24) и сохранить их в секрете. Эти слова и представляют собой ваш закрытый ключ.
Ну, то есть почти… Как вы помните, закрытый ключ – это очень длинное число, так как же эти слова могут быть одновременно и числом? Фокус в том, что эти слова шифруют ваш закрытый ключ, используя процесс, описанный в предложении по улучшению биткоина BIP39. BIP39 появилось в 2013 году и представляет собой стратегию для шифрования закрытых ключей в виде списка слов. Всего в список включено 2048 возможных слов, каждое из которых привязано к определенному числу. Со списком (на английском) можно ознакомиться здесь.
Слова в списке подобраны таким образом, чтобы ни одно из них не было похоже на другое, при этом все эти слова – базовые и легко запоминаются.
Каждое слово соответствует определенной позиции в списке начиная с 0. Например:
abandon = 0
ability = 1
able = 2
about = 3
…
zone = 2046
zoo = 2047
Так как каждому слову соответствует определенное число, вы можете найти слово в списке и затем определить соответствующее ему число. Объединив числа, вы получаете еще более крупное число. Наконец это число проходит через несколько циклов хеширования, и в результате генерируется ваш закрытый ключ.
Не буду подробно останавливаться на циклах хеширования, но если вы хотите узнать о них больше, рекомендую обратить внимание на эту статью (англ.).
Интересно отметить, что последнее слово в списке называется “контрольной суммой” (Checksum). “Контрольная сумма” – это несколько первых битов хеша данных, используемые для того, чтобы убедиться, что вы не ввели неправильные слова. Иначе говоря, если вы наберете неверные слова или введете их не в том порядке, ваше ПО обнаружит это, поскольку контрольная сумма будет неверной. Возможно, звучит немного сложно, но скоро все станет понятней.
Этот сайт Иэна Коулмана поможет вам сгенерировать seed-фразы и рассмотреть их во всех подробностях. Обратимся, собственно, к “подробностям”: выберите вариант “сгенерировать 12 слов” (после чего нажмите кнопку GENERATE). Слова появятся на экране, а это значит, что ваш браузер уже сгенерировал для вас полноценную мнемоническую seed-фразу.
Идем дальше и нажимаем кнопку “Show entropy details” (“Показать подробные данные об энтропии”), после чего на экране появляется масса безумной информации.
Возьмем первое слово из вашего списка и первое слово из раздела «Word Indexes» (индексы слов). Затем найдите ваше слово в списке слов по этой ссылке.
Как видите, слова совпадают (ну, практически совпадают – они смещены на одну позицию, потому что число в списке слов является порядковым номером в данном файле, где слова пронумерованы начиная с 1, в то время как в списке индексов слов нумерация начинается с 0). Думаю, что общий смысл вы уловили, и если захотите, то сможете при желании сверить со списком и все остальные слова.
А теперь снимите галочку в пункте “Show entropy details” и попробуйте поменять порядок первых двух слов в списке. Программа обнаружит ошибку, и в верхней части экрана появится сообщение «Invalid Mnemonic” (“неверная мнемоническая фраза”).
Это и есть та самая “контрольная сумма”, о которой я говорил ранее: она защищает вас от неверного ввода. Если вы меняете порядок слов, меняется число, закодированное списком, и в итоге “контрольная сумма” оказывается неверной. Не стоит бояться – здесь все не так сложно, это просто удобная функция, позволяющая предотвратить ошибки.
Наконец, если ввести слова в правильном порядке, то внизу, в поле BIP39 Seed, вы обнаружите свой закрытый ключ. Он генерируется в результате хеширования, о чем я рассказывал ранее, и его можно использовать в качестве закрытого ключа для нового кошелька.
Вы, наверное, обратили внимание, что длина seed-фразы составляет 512 бит, в то время как длина закрытого ключа должна быть 256 бита. Первые 256 бит – это ваш закрытый ключ, а вторые 256 бит могут использоваться в качестве «кода цепочки» (chain code) для иерархических детерминистических кошельков. Впрочем, эта тема достойна отдельного поста.
Итак, подведем итог. Мнемоническая seed-фраза шифрует закрытый ключ, позволяя вам хранить биткоины в собственной голове! Звучит круто, но почему это так важно?
Представьте себе, что ваш аппаратный кошелек уничтожен. Или что вам нужно покинуть страну, но аппаратный кошелек вы взять с собой не можете. Запомнив seed-фразу, вы сможете восстановить свой кошелек на любом другом аппаратном устройстве!
Однако seed-фраза – это палка о двух концах. Ее нужно тщательно охранять, ведь если кто-то получит к ней доступ, то сможет зайти в ваш кошелек и вывести с него все средства. Соблюдайте крайнюю осторожность!
И еще. Этот сайт Bip39 очень хорош, но, пожалуйста, никогда не генерируйте в вашем браузере реальные закрытые ключи, которые планируете использовать. Генерируйте ключи самостоятельно только при условии, что ваше устройство не подключено к интернету, и используйте реально качественный источник случайности.