Всем доброго времени суток!
Недавно начал изучать web3 на питоне.
Заинтересовал вопрос: как вообще происходит генерация сид-фразы или же мнемонической фразы у кошельков (а конкретней в таких сетях как eth).
Немного погуглив и посмотрев один ролик на ютубе узнал много нового:
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):
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) - количество бит, из которых будет состоят финальная, готовая фраза(в двоичной системе).
Кому-то статья может показаться скучной или трудноватой(а, возможно, даже малополезной)), поэтому бонусом прикрепляю один интересный случай, который я смог обнаружить, немного поработав с этим алгоритмом в Python.
Путём перебора нашёл сид-фразу, где все 12 слов - это слово "life", первая активность на этом кошельке (etherscan) впервые была замечена в конце 2018 года.
ВНИМАНИЕ! Ни в коем случае не импортируйте эту сид-фразу для личного использования и не пытайтесь туда что-либо перевести, данный кошелёк уже давно использован/используется и к нему могут иметь доступ злоумышленники.
Но если интересно, то можете импортировать, чтобы посмотреть и убедиться
P.s. я описал алгоритм, который подходит лишь на некоторые сети(например eth и bsc), к примеру в том же TON используется вообще другая схема, я пока разбираюсь с ним, читаю документацию и смотрю проекты на GitHub. Но как минимум такую сид фразу можно импортировать в МетаМаск и Траст Валлет.
А с должным знанием программирования можно, например, генерировать сотни тысяч кошельков в час, экономя много времени.
Вот пример применения этих знаний(сделал генератор "красивых" адресов с готовой сид-фразой):
Этим постом я хотел познакомить Вас с некой минимальной базой, изучайте блокчейн и программирование, товарищи!
Полезная штука
Недавно начал изучать 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):
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) - количество бит, из которых будет состоят финальная, готовая фраза(в двоичной системе).
Кому-то статья может показаться скучной или трудноватой(а, возможно, даже малополезной)), поэтому бонусом прикрепляю один интересный случай, который я смог обнаружить, немного поработав с этим алгоритмом в Python.
Путём перебора нашёл сид-фразу, где все 12 слов - это слово "life", первая активность на этом кошельке (etherscan) впервые была замечена в конце 2018 года.
ВНИМАНИЕ! Ни в коем случае не импортируйте эту сид-фразу для личного использования и не пытайтесь туда что-либо перевести, данный кошелёк уже давно использован/используется и к нему могут иметь доступ злоумышленники.
Но если интересно, то можете импортировать, чтобы посмотреть и убедиться
P.s. я описал алгоритм, который подходит лишь на некоторые сети(например eth и bsc), к примеру в том же TON используется вообще другая схема, я пока разбираюсь с ним, читаю документацию и смотрю проекты на GitHub. Но как минимум такую сид фразу можно импортировать в МетаМаск и Траст Валлет.
А с должным знанием программирования можно, например, генерировать сотни тысяч кошельков в час, экономя много времени.
Вот пример применения этих знаний(сделал генератор "красивых" адресов с готовой сид-фразой):
Этим постом я хотел познакомить Вас с некой минимальной базой, изучайте блокчейн и программирование, товарищи!
Полезная штука
Последнее редактирование: