Jump to content
rammendo

Генерация собственной сид-фразы

Recommended Posts

Кто знает, как создать свою собственную сид-фразу из 12-ти слов? То есть хочется, чтобы сид-фраза начиналась с конкретного слова, мне удобного для запоминания. Допустим, со слова "swim".

Просто взять 12 слов не получится, так как последнее слово из фразы - это что-то вроде чек-суммы. А может, есть еще какие заковыки.

 

Для примера: 11 слов таких:
swim unknown pattern ten chef actual planet roof right yard picnic

Word Indexes : 1759, 1903, 1290, 1783, 314, 23, 1327, 1501, 1486, 2038, 1313.

Как узнать 12-тое слово ?

 

P.S. Разобрался. Сам себе отвечу - дело в энтропии. 12 слов - 132 бита энтропии. Берем 128 бит, переводим в десятичную форму, отсюда находим все слова.

Последнее, 12-ое слово - через каждые (132-128) бита, то есть каждое 1111 битное (шестнадцатое), поэтому может быть одним из 128 вариантов.

Edited by rammendo

Share this post


Link to post
Share on other sites

Можно еще с этим поиграться https://iancoleman.io/bip39/ 

Share this post


Link to post
Share on other sites

Продолжу обсуждение.
Немного теории.
Размер энтропии всегда кратен 32 битам. Каждые 32 бита энтропии - это три 11-битных слова сида. 
Дополнительные "лишние" биты - это проверочные биты (некоторое кол-во первых бит от хэша (SHA 256) энтропии), они присоединяются к энтропии (конкатенация).
Т.е. для 128-битной энтропии используется 12 слов сида, это 132 бита (из них 128 бит - это энтропия, 4 бита - проверочные).
Для 256-битной  энтропии используется 24 слова сида, это 264 бита (из них 256 бит - это энтропия, 8 бит - проверочные).
Теперь практика (рассмотрим пример с сидом из 24 слов).
Допустим вы выбрали случайные (на сколько это возможно) 23 слова сида. Из словаря берём порядковые номера этих слов (отсчет начинается с нуля). 
Переводим эти порядковые номера в двоичную систему счисления (не забываем что каждое слово - это 11 двоичных символов, поэтому если символов не хватает, то спереди дописываем недостающее кол-во нулей).
Получили строку из 253-х двоичных символов. До 256 бит не хватает три символа, поэтому добавляем три любых (случайных) символа.
Всё таким образом мы получили нашу 256-битную энтропию в бинарном виде. Переводим её в hex. Для этого последовательно заменяем: 
"0000" на "0"
"0001" на "1"
"0010" на "2"
-------------
"1110" на "E"
"1111" на "F"
Таким образом у нас имеется 64 hex-символа нашей энтропии. Далее вычисляем от нее хэш (SHA 256) и берем первые два символа. Это и будут наши проверочные 8 бит.
Переводим их обратно в двоичный формат и дописываем их к нашим тем трем случайным битам, которые мы добавляли к энтропии.
Таким образом мы получили 11 бит нашего последнего 24-го слова. Переводим их в десятичную систему счисления и получаем порядковый номер нашего слова.
Ну и по словарю находим само слово (не забываем, что отсчёт в словаре начинается с нуля).
Небольшое лирическое отступление:
так делать нельзя, (насколько случайными будут ваши выбранные слова никто не знает).
Правильно - это генерация случайной энтропии и уже из нее вычислять сид.

Share this post


Link to post
Share on other sites

@edward_n 👍

Ещё бы увидеть подробный алгоритм получения адреса биткоина из сида.

 

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

Суть такая: имеем коробочку с 6 кнопками и экраном. Кидаем кубик и нажимаем кнопку, соответствующую выпавшему числу на кубике. После 100 бросков (или сколько там достаточно для нормальной генерации) на экране получаем адрес кошелька и сид для него.

 

 

 

Edited by Antei75

Share this post


Link to post
Share on other sites
17 минут назад, Antei75 сказал:

Ещё бы увидеть подробный алгоритм получения адреса биткоина из сида.

 

Вот все прямо здесь и лежит https://github.com/bitcoin/bitcoin , но есть проблема в надежности нынешних сид-фраз? Вроде основная проблема в компроментации вирусами, а от этого кубики не помогут.

Share this post


Link to post
Share on other sites
42 минуты назад, zavr сказал:

Вроде основная проблема в компроментации вирусами, а от этого кубики не помогут.

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

 

Share this post


Link to post
Share on other sites
21 час назад, Antei75 сказал:

Есть мысль сделать отдельный приборчик для создания максимально надёжных бумажных кошельков

Это оффтоп, но не нужны никакие "приборчики" и "коробочки". Просто кидаешь кубики и на основе этих значений создаешь энтропию. Дальше все просто, из энтропии получается сид.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...