Как генерируется seed-фраза

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

    Для благодарности на форуме существует кнопка "LIKE", а все сообщения с благодарностями - флуд и захламление тем. Так вы только усложняете поиск информации на форуме. Все кто будут оставлять подобные сообщения - будут восприняты как спам и приведут к блокировке.

    Прежде чем создавать тему с вопросом или добавлять новый вопрос в теме - используйте поиск по форуму, с вероятностью 99% ответ на данный вопрос уже есть на форуме. В противном случае флуд с вопросами будет воспринят как накрутка сообщений и ваш аккаунт будет заблокирован.

  • 🤝 Партнерская программа. Пригласи друга и получи 500 баллов. Подробнее
  • 🤑 Общайся на форуме за деньги. На форуме существует оплата за создание тем и сообщений. За публикацию полезной информации, пользователи получают баллы, которые можно обменять на криптовалюту

$hrek

Начинающий
Топикстартер
11 Ноя 2022
81
6
TON Testnet
0
Баллы
3
Всем доброго времени суток!

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

Немного погуглив и посмотрев один ролик на ютубе узнал много нового:


1. Согласно стандарту BIP-39 seed-фраза может состоять из определенных слов (всего их 2048)
2. Нельзя просто взять случайные слова из этого списка и получить seed-фразу, пригодную для импорта в кошельки (об этом далее)
3.
Слова могут повторяться

Разберём алгоритм построения seed-фразы из 12 слов (обычно именно столько используется в популярных сетях).

Весь алгоритм построения фразы крайне прост:


1. Представим каждое "слово", кроме последнего, как 11-битное число в двоичной системе. (Последнее является контрольной суммой и зависит от предыдущих одиннадцати).
Пример: 11001011100
каждая цифра здесь - это один бит
Последовательность может быть абсолютно любой и случайной. Такая последовательность называется энтропией.

2. Для последнего "слова" мы возьмём только 7 бит и запишем их.
Пример: 0010101

3. По итогу у нас получится 128-битная строка (11 "слов" по 11 бит и 1 "слово" по 7 бит: 11*11+7=121+7=128).

4. Нам осталось лишь вычислить последние 4 бита для завершения 12-го "слова".

5. Для этого мы берём полученную случайным (или не случайным) образом 128-битную строку и пропускаем через алгоритм хэширования SHA256.
Сильно на нём мы не будем заострять внимание.
Если кратко, то этот алгоритм сжимает любую строку любой длины в 64-символьный хэш(если говорить о 16-ричной системе счисления и 256-символьный, если о двоичной)
Ссылка на онлайн-ресурс: https://cryptii.com/

Важно! Входная и выходная строки должны быть в форме байтов(Bytes):
1670207227408.png



6. Из этого хэша мы берём первые 4 бита и дописываем к тем 7 битам из последнего "слова".

7. Теперь мы имеем полную сид фразу, состоящую из двенадцати 11-битных "слов" в двоичной системе.

8. Дело за малым!
Теперь каждое двоичное "слово" мы переводим в десятичное число(132-битную строку разбиваем на 12 чисел по 11 символов).
Пример: 11001011100 = 1628 (онлайн калькулятор)

9. И сопоставляем это число согласно списку BIP-39 (список на гитхабе), предварительно прибавив 1 (так как список слов мы для себя считаем от 1 до 2048, тогда как число из пункта 8 будет в диапазоне от 0 до 2047).
Пример: 1628 +1 = 1629 = slide

10. Получаем seed-фразу, которую можно импортировать в любой кошелёк.



Для случаев с 15, 18, 21 или 24 словами в сид фразе прилагаю данную табличку:
Первый столбик(Entropy) - количество бит, которые можно сгенерировать случайно.
Второй столбик(Cheksum) - количество бит, которые нужно будет дописать к сгенерированной энтропии (путём вышеупомянутого sha256).
Третий столбик(Data) - количество бит, из которых будет состоят финальная, готовая фраза(в двоичной системе).


00ec02e0fe0b361673229ecc9fa59e14.png

Кому-то статья может показаться скучной или трудноватой(а, возможно, даже малополезной)), поэтому бонусом прикрепляю один интересный случай, который я смог обнаружить, немного поработав с этим алгоритмом в Python.

Путём перебора нашёл сид-фразу, где все 12 слов - это слово "life", первая активность на этом кошельке (etherscan) впервые была замечена в конце 2018 года.

ВНИМАНИЕ! Ни в коем случае не импортируйте эту сид-фразу для личного использования и не пытайтесь туда что-либо перевести, данный кошелёк уже давно использован/используется и к нему могут иметь доступ злоумышленники.

Но если интересно, то можете импортировать, чтобы посмотреть и убедиться

P.s. я описал алгоритм, который подходит лишь на некоторые сети(например eth и bsc), к примеру в том же TON используется вообще другая схема, я пока разбираюсь с ним, читаю документацию и смотрю проекты на GitHub. Но как минимум такую сид фразу можно импортировать в МетаМаск и Траст Валлет.

А с должным знанием программирования можно, например, генерировать сотни тысяч кошельков в час, экономя много времени.
Вот пример применения этих знаний(сделал генератор "красивых" адресов с готовой сид-фразой):

1670204819182.png


Этим постом я хотел познакомить Вас с некой минимальной базой, изучайте блокчейн и программирование, товарищи! :D
Полезная штука
 
Последнее редактирование:
  • Like
Реакции: kashk0v