Bitcoin Forum

Local => Новички => Topic started by: witcher_sense on June 29, 2019, 10:42:35 AM



Title: Derivation path - простыми словами
Post by: witcher_sense on June 29, 2019, 10:42:35 AM
Оригинал статьи: https://ethereum.stackexchange.com/questions/70017/can-someone-explain-the-meaning-of-derivation-path-in-wallet-in-plain-english-s

Предыстория


Пути вывода (или по-другому пути деривации) имеют отношение к HD-кошелькам или HD-ключам, это такой тип кошелька, где у вас есть одна, удобочитаемая, seed-фраза, которая разблокирует несколько учетных записей/адресов/приватных ключей в любой поддерживаемой сети. Эти фразы обычно выглядят как brain surround have swap horror body response double fire dumb bring hazard.

Техническое описание для наиболее часто используемых HD-кошельков...

  • BIP-32 (https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) - описание HD-кошельков.
  • BIP-39 (https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) - мнемоническая фраза / список слов / остальные части этой загадки.
  • BIP-44 (https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) - материал про пути вывода / алгоритмы.

Обычно у вас есть один закрытый (приватный) ключ (напр. afdfd9c3d2095ef696594f6cedcae59e72dcd697e2a7521b1578140422a4f890), который позволяет вам получить доступ к своим средствам по соответствующему адресу (напр.  0x06A85356DCb5b307096726FB86A78c59D38e08ee). Это пара ключей.

В случае с HD-кошельками у вас есть единственная seed-фраза (напр. brain surround have swap horror body response double fire dumb bring hazard), которая с помощью математических вычислений, алгоритмов, кода и прочего выводит несколько пар ключей. Бесконечное количество пар ключей.

Кроме того, существует небезопасный формат кошелька, известный как Brain wallet или «мозговой кошелек», в котором можно использовать одну понятную человеку фразу и через математику, алгоритмы, код и прочее она превращается в одну пару ключей.


Хорошо, но что там насчет путей вывода?


Мозговые кошельки позволяют вам превратить dogsarecool12 или brain surround have swap horror body response double fire dumb bring hazard в единственный закрытый ключ, который затем используется для доступа к вашим средствам и подписания ваших транзакций.

Для простоты, давайте представим это как

https://i.gyazo.com/017f93047006dbda87cfbb5d1818679e.png

Если бы я использовал в качестве своей фразы catsarecool10 вместо dogsarecool12, я бы получил другую пару ключей, другой адрес, другой аккаунт.

HD-кошельки похожи, но каждая фраза имеет бесконечное количество пар ключей или учетных записей, к которым она может получить доступ. Потому что, в отличие от мозговых кошельков (brain wallets), это более сложная математика. Для простоты, давайте представим это как

https://i.gyazo.com/4456a95f0297b15aea497b71e07b5546.png

Если вы измените какую-либо из этих частей, закрытый ключ, который вы получите (или выведите), будет другим, так же, как это было выше с catsarecool10 против dogsarecool12. Однако, поскольку все кодеры следуют одним и тем же правилам, фрагменты, которые добавляются к исходной фразе, являются согласованными и позволяют пользователям получать доступ к одним и тем же учетным записям в нескольких продуктах или блокчейнах.

Эти части называются "путь вывода"

Вот это

https://i.gyazo.com/3a42ccd96e4257b4d7f92460f34442e3.png

его часть.

Настоящие части пути вывода

Полный путь: m/44'/60'/0'/0'/0

Что представляет собой каждое число: m / purpose' / coin_type' / account' / change / address_index

https://i.gyazo.com/d940dab0621503ae8ccf2242ba252c33.png

Вероятно, это просто случайный способ начать строку, чтобы кодеры могли легко определить, является ли что-то путем вывода, а не то что вы начинаете вводить «мама».

https://i.gyazo.com/851549bdbcdd3fd38495a0280565f7b4.png

Тут всегда 44 '. Однако, если решат, что произошла эволюция системы ключей HD, вы сможете изменить ее на 45 ', чтобы кодеры снова могли различить старую систему и новую систему.

https://i.gyazo.com/933d21d477bb33168105ecc47c652b9a.png

К какому блокчейну вы обращаетесь? Каждый блокчейн имеет номер, который его представляет. Биткойн это 0. Эфириум это 60. Aion это 425. Когда вы создаете новый блокчейн, вы запрашиваете неиспользованный номер. Вы можете увидеть все цепи и их номера здесь: https://github.com/satoshilabs/slips/blob/master/slip-0044.md

https://i.gyazo.com/65d53578fe430734898cb7be6fb45f05.png

Число, которое начинается с 0 и увеличивается. Слой разделения или иерархии. (подробнее об этом ниже)

https://i.gyazo.com/d71fc11d12d0ba6cb5df7a6ec846f3d6.png

Иногда используется в Ethereum, а иногда нет. Первоначально был создан для Биткойна, который на самом деле не имеет «учетных записей», а имеет «неизрасходованные выходы транзакций». По сути, вы никогда не отправляете часть своих биткойнов, вы отправляете все свои биткойны по нескольким адресам. Если у вас 0,75 BTC, но вы хотите отправить мне только 0,5 BTC, вы отправите мне 0,5 BTC, а затем отправите себе 0,25 BTC. «Ваше» может вернуться к исходному адресу или к другому адресу, к которому у вас есть доступ (например, к следующему адресу в «списке»). Этот номер гласит: «Отправить все, что я не хочу отправлять другу, на 10-й адрес в моем списке. Или на 0-й адрес в списке (или адрес, с которого я отправляю).

https://i.gyazo.com/da58eeb90e04d51e1fe3ff2037d30669.png

Еще одна переменная для получения разных аккаунтов и т. д.


Разделение и Иерархия


Некоторые из приведенных выше переменных основаны на внешних факторах, например, в какой я цепи. Некоторые выбираются пользователем или программным обеспечением кошелька, например, переменная change. Переменные account и index дают мне (или моему кошельку) больше возможностей для изменения.

Например, скажем, я хочу отделить мои личные активы BTC от активов моей компании. Я мог бы использовать m / 44 '/ 0' / 0 '/ 0' / 0 для компании и m / 44 '/ 0' / 1 '/ 0' / 0 для своих личных.

Но скажем, я хочу иметь разные адреса для ...

  • моих личных сбережений
  • где я получаю свою зарплату каждую неделю
  • когда я лично получаю деньги от друзей
  • публичного показа в моем личном github для пожертвований
  • все мои личные расходы на учебу

Я мог бы использовать m / 44 '/ 0' / 1 '/ 0' / 0 для сбережений, m / 44 '/ 0' / 1 '/ 0' / 1 для зарплаты, m / 44 '/ 0' / 1 '/ 0 '/ 2 для того, чтобы мой друг вернул мне деньги, и так далее. Я мог бы сделать то же самое со счетами компании. Ура!


Полезные ссылки

  • Иерархическая генерация ключей (https://m.habr.com/ru/company/distributedlab/blog/413627/)
  • Читаем пути в HD кошельках (BIP44) (https://youtu.be/qby0Zz1GK_I)
  • А.Антонопулос о путях деривации (https://bitcointalk.org/index.php?topic=4661132.msg51621668#msg51621668)
  • Узнать приватники по СИД фразе (https://bitcointalk.org/index.php?topic=5041906.0)
  • Deterministic wallet (https://en.bitcoin.it/wiki/Deterministic_wallet)
  • «Мозговой кошелек» — надежный способ передачи своих bitcoin взломщикам (https://habr.com/ru/post/390487/)
  • HD Wallets Explained: From High Level to Nuts and Bolts (https://medium.com/bitcraft/hd-wallets-explained-from-high-level-to-nuts-and-bolts-9a41545f5b0)
  • Лучшие инструкции по крипте на форуме (https://bitcointalk.org/index.php?topic=4710373.0)


Title: Re: Derivation path - простыми словами
Post by: igor72 on June 30, 2019, 07:47:22 PM
Quote
Пути вывода (или по-другому пути деривации) имеют отношение к HD-кошелькам или HD-ключам, это такой тип кошелька, где у вас есть одна, удобочитаемая, seed-фраза, которая разблокирует несколько учетных записей/адресов/приватных ключей в любой поддерживаемой сети.
В Bitcoin Core нет удобочитаемой seed-фразы, хотя это HD-кошелек.


Quote
Тут всегда 44 '. Однако, если решат, что произошла эволюция системы ключей HD, вы сможете изменить ее на 45 ', чтобы кодеры снова могли различить старую систему и новую систему.
Далеко не всегда 44', все чаще для биткоина используются сегвит-адреса (которые живут на 49' и 84' ветках дерева адресов). А в Bitcoin Core и Electrum вообще старый BIP32, где пути деривации типа m/0'. В оригинальной статье подразумевался эфир, но мы в разделе биткоина ).

И раз тема про пути деривации, то неплохо бы пояснить про эти апострофы.


Quote
К какому блокчейну вы обращаетесь? Каждый блокчейн имеет номер, который его представляет. Биткойн это 0. Эфириум это 60. Aion это 425. Когда вы создаете новый блокчейн, вы запрашиваете неиспользованный номер. Вы можете увидеть все цепи и их номера здесь: https://github.com/satoshilabs/slips/blob/master/slip-0044.md
В общем да, но эти номера производители кошельков не всегда соблюдают. Например, Леджер иногда назначает свои номера (которые в этой таблице по ссылке уже заняты другими монетами).


Title: Re: Derivation path - простыми словами
Post by: witcher_sense on July 02, 2019, 08:00:38 AM
Цель этой темы заинтересовать вопросом "Derivation path" и подтолкнуть к более глубокому изучению вопроса. Я выбрал эту небольшую статью, потому что она заставила меня заинтересоваться. Те вопросы и уточнения, озвученные выше вполне закономерны, потому что статья небольшая и, так сказать, тезисная. Она не охватывает всех нюансов и частных случаев, а также технических спецификаций отдельно взятых аппаратных кошельков. Некоторые вопросы наиболее полно раскрываются в статьях и видео, приведенных в разделе "Полезные ссылки", где принципы объясняются даже с использованием непонятных математических формул.

Переместил топик в раздел "Новички", потому что этот вопрос не касается только биткойна, но и отдельно взятого раздела для полобных тем не предусмотрено.

По мере изучения вопроса, я постараюсь добавлять сноски и комментарии в первый пост, чтобы содержимое стало более понятно и более содержательно.


Title: Re: Derivation path - простыми словами
Post by: igor72 on July 02, 2019, 10:39:13 AM
Если позволите, попытаюсь изложить, насколько смогу простыми словами, свое определение derivation path.

В HD-кошельках (HD - это Hierarchical Deterministic) ключи вычисляются иерархически. Корнем всего этого дерева ключей является seed - огромное число в 64 байта корневой приватный мастер-ключ (полученный из огромного числа, называемого seed-ом), из которого математически получаются ключи первого уровня, из которых получаются ключи второго уровня, из которых... и так далее. Из одного конкретного сида всегда получается один и тот же набор ключей, и каждый ключ занимает одно и то же место на дереве ключей. Это дерево может ветвиться почти бесконечно, но на практике используется небольшая "глубина" ветвления - этого вполне достаточно.
Координата каждого ключа на дереве называется "derivation path" (на русский часто переводят, как "путь деривации", что ненамного понятней, идеального перевода я подобрать пока не могу) и записывается строкой, типа m/0/5/10/..., где m - не изменяется, это корневой мастер-ключ, а дальше идут ветви (счет ведется с нуля). В моем примере нужный ключ находится на 11-й веточке, которая выходит из 6-й ветки, которая в свою очередь выходит из первой ветви, выходящей из ствола дерева ).

Число веток на каждом уровне 232, то есть 4294967296. Первые 231 (2147483648) ключей являются non-hardened, вторая половина - hardened ("усиленные ключи"). Имея простой (non-hardened) приватный ключ и родительский публичный мастер-ключ (extended public key, xpub) можно легко вычислить остальные приватные ключи этой ветки, поэтому предпочтительнее использовать hardened ключи, где такой "взлом" невозможен. Но из публичного hardened мастер-ключа (xpub) нельзя получить (можно только из приватного xprv или non-hardened публичного xpub) дочерние публичные ключи, а получение публичных ключей из xpub необходимо для современых кошельков. Поэтому на практике используется смешанный derivation path - на верхних уровнях hardened, а уже на уровнях ниже аккаунтов non-hardened ключи. Пример m/44'/0'/1'/0. Апостроф после цифры обозначает, что на данной ветке используются hardened ключи, этот апостроф как бы заменяет +231. То есть m/44'/0'/1'/0 можно записать как m/44+231/0+231/1+231/0 или m/2147483692/2147483648/2147483649/0 - эти пути дадут одинаковые ключи.


Title: Re: Derivation path - простыми словами
Post by: igor72 on July 03, 2019, 07:46:22 AM

[?] Корнем всего этого дерева ключей является seed - огромное число в 64 байта,

Не обязательно 64. По спецификации  BIP32 размер затравки (seed) может лежать в интервале от 16 до 64 байт, рекомендуемое значение составляет 32 байта:

Generate a seed byte sequence S of a chosen length (between 128 and 512 bits; 256 bits is advised) from a (P)RNG.
Более полная цитата оттуда (https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki):
Quote
    Generate a seed byte sequence S of a chosen length (between 128 and 512 bits; 256 bits is advised) from a (P)RNG.
    Calculate I = HMAC-SHA512(Key = "Bitcoin seed", Data = S)
    Split I into two 32-byte sequences, IL and IR.
    Use parse256(IL) as master secret key, and IR as master chain code.
Выделил цветом строку, где получается 64-байтное число, которое я имел в виду, называя его сидом. А то, что там называется "seed byte sequence S of a chosen length", это еще называют энтропией. В известном конвертере https://iancoleman.io/bip39/ , например, так.
Но, согласно BIP32, вы правы - seed=entropy. Спасибо за замечание.

Насчет того, что энтропия может лежать между 16 и 64 байт, я думаю, это просто рекомендация. Ничто не мешает мне сделать ее 1 байт или 100, просто меньше 16 считается уже небезопасно, а больше 64 слишком избыточно.


Title: Re: Derivation path - простыми словами
Post by: igor72 on July 03, 2019, 12:33:48 PM
не есть корень дерева
Ошибку исправил, спасибо.
Quote
Когда говорят об энтропии S имеют ввиду размер затравки (псевдослучайного числа). Подмена  двух понятий, которая иногда используется, - seed и entropy -  может ставить в тупик.
Согласен.


Title: Re: Derivation path - простыми словами
Post by: johhnyUA on July 20, 2019, 10:54:52 PM
Пример m/44'/0'/1'/0. Апостроф после цифры обозначает, что на данной ветке используются hardened ключи, этот апостроф как бы заменяет +231. То есть m/44'/0'/1'/0 можно записать как m/44+231/0+231/1+231/0 или m/2147483692/2147483648/2147483649/0 - эти пути дадут одинаковые ключи.

Здесь кстати интересный момент, если что, поправьте.
Если считать грубо, то вот что получается 232 (purpose) * 232 (coin type) * 232 (account) * 232 (change) * 232 (index)

Как видим, получается число 232*32*32*32*32 - 21606 тоесть максимальное количество адресов из хэшфункции RIPEMD-160.
По такой логике получается что одним сидом в теории можно покрыть весь диапазон адресов. Но так как purpose и coin type это у нас конкретные числа для конкретного блокчейна ( ну или пара чисел) то выходит что один сид покрывает - 1 * 1* 232 * 232 * 232 тоесть, 296 ключей.

Если ошибся, то извиняйте, немного заспанный. Буду благодарен любой критике.


Title: Re: Derivation path - простыми словами
Post by: igor72 on July 21, 2019, 05:43:32 AM
Пример m/44'/0'/1'/0. Апостроф после цифры обозначает, что на данной ветке используются hardened ключи, этот апостроф как бы заменяет +231. То есть m/44'/0'/1'/0 можно записать как m/44+231/0+231/1+231/0 или m/2147483692/2147483648/2147483649/0 - эти пути дадут одинаковые ключи.

Здесь кстати интересный момент, если что, поправьте.
Если считать грубо, то вот что получается 232 (purpose) * 232 (coin type) * 232 (account) * 232 (change) * 232 (index)
Это по BIP44 такая схема принята. А по BIP32 (на который BIP44 опирается) таких уровней может быть больше. Не знаю, насколько больше, не важно. Например, ничто не мешает сделать в электруме кошелек с путем m/44'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0' (последний 0' - аккаунт) - это сколько ключей получается, 2576? ))
Quote
Как видим, получается число 232*32*32*32*32 - 21606 тоесть максимальное количество адресов из хэшфункции RIPEMD-160.
По такой логике получается что одним сидом в теории можно покрыть весь диапазон адресов.
Многие из этих 2160 ключей будут давать одинаковые адреса. Но, как я выше писал, уровней деривации больше, поэтому вы правы - из каждого сида теоретически можно получить все ключи. )
Quote
Но так как purpose и coin type это у нас конкретные числа для конкретного блокчейна ( ну или пара чисел) то выходит что один сид покрывает - 1 * 1* 232 * 232 * 232 тоесть, 296 ключей.
Вроде верно (если оставаться в рамках BIP44, что не обязательно).


Title: Re: Derivation path - простыми словами
Post by: johhnyUA on July 21, 2019, 01:18:32 PM
Это по BIP44 такая схема принята. А по BIP32 (на который BIP44 опирается) таких уровней может быть больше. Не знаю, насколько больше, не важно. Например, ничто не мешает сделать в электруме кошелек с путем m/44'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0'/0' (последний 0' - аккаунт) - это сколько ключей получается, 2576? ))

Надо значит разбираться, интересная тема. Но по такой логике да, получается 2576

Quote
Как видим, получается число 232*32*32*32*32 - 21606 тоесть максимальное количество адресов из хэшфункции RIPEMD-160.
По такой логике получается что одним сидом в теории можно покрыть весь диапазон адресов.
Многие из этих 2160 ключей будут давать одинаковые адреса. Но, как я выше писал, уровней деривации больше, поэтому вы правы - из каждого сида теоретически можно получить все ключи. )

Не все ключи. я не правильно выразился. Все адреса, вот что я имел ввиду. У нас же количество легаси адресов ограничено 2160, тоесть, по моему примеру выше видно что можно покрыть всю область (в теории) легаси адресов всего лишь одним сидом. Но так, как мы используем условно только BIP44 и единый cointype, то уже не получится такое провернуть.

Вот правильно ли я размышляю, если с BIP44 и cointype 0 (для блокчейна биткоина), то у нас с одного сида получается 296 ключевых пар. Так как количество адресов ограничено 2160, то получается чтобы адреса не повторялись (случайно не отправил дядьке в Камбодже свои битки), то количество уникальных сидов тоже ограничено, и являет собой 2160-296 = 264 . Чет не очень много.

Ну вот если предположить что сегвит адреса, с их BIP49 и BIP84 (один для нестед , один для трушного, как я помню) то получится еще по 264. Тобишь всего в сумме 266


Title: Re: Derivation path - простыми словами
Post by: igor72 on July 21, 2019, 03:10:36 PM

Вот правильно ли я размышляю, если с BIP44 и cointype 0 (для блокчейна биткоина), то у нас с одного сида получается 296 ключевых пар. Так как количество адресов ограничено 2160, то получается чтобы адреса не повторялись (случайно не отправил дядьке в Камбодже свои битки), то количество уникальных сидов тоже ограничено, и являет собой 2160-296 = 264 . Чет не очень много.
Только не минус, а разделить.
Ну да, на каждого жителя Земли всего лишь по два с половиной миллиарда сидов с уникальными адресами выходит ).
Quote
Ну вот если предположить что сегвит адреса, с их BIP49 и BIP84 (один для нестед , один для трушного, как я помню) то получится еще по 264. Тобишь всего в сумме 266
0.75*266 на самом деле. Но все равно - практического смысла в этом не вижу, никто сиды на уникальность набора адресов не проверяет, это невозможно сделать. Имхо, адресные пространства разных сидов часто где-то пересекаются. Просто вероятность обнаружить эти пересечения ничтожно мала.


Title: Re: Derivation path - простыми словами
Post by: johhnyUA on July 21, 2019, 10:07:35 PM
Только не минус, а разделить.
Ну да, на каждого жителя Земли всего лишь по два с половиной миллиарда сидов с уникальными адресами выходит ).

Кстати да, спешил и сглупил, там деление.

Ну население то не постоянное  :D

Quote
0.75*266 на самом деле.

Почему 0.75 ?


Title: Re: Derivation path - простыми словами
Post by: igor72 on July 22, 2019, 05:22:50 AM
Почему 0.75 ?
264+264+264 = 3*264 = 1.5*265 = 0.75*266


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 07, 2019, 05:24:21 PM
Пример m/44'/0'/1'/0. Апостроф после цифры обозначает, что на данной ветке используются hardened ключи, этот апостроф как бы заменяет +231. То есть m/44'/0'/1'/0 можно записать как m/44+231/0+231/1+231/0 или m/2147483692/2147483648/2147483649/0 - эти пути дадут одинаковые ключи.

Здесь кстати интересный момент, если что, поправьте.
Если считать грубо, то вот что получается 232 (purpose) * 232 (coin type) * 232 (account) * 232 (change) * 232 (index)

Как видим, получается число 232*32*32*32*32 - 21606 тоесть максимальное количество адресов из хэшфункции RIPEMD-160.
По такой логике получается что одним сидом в теории можно покрыть весь диапазон адресов. Но так как purpose и coin type это у нас конкретные числа для конкретного блокчейна ( ну или пара чисел) то выходит что один сид покрывает - 1 * 1* 232 * 232 * 232 тоесть, 296 ключей.

Если ошибся, то извиняйте, немного заспанный. Буду благодарен любой критике.
Небольшая поправка: значение "change" обычно может принимать только 2 значения (0 внешние и 1 внутрение адреса). Так что теоретически ключей может быть еще меньше - 265


Title: Re: Derivation path - простыми словами
Post by: EdvinZ on November 08, 2019, 05:20:00 AM
Seed фразы намного удобнее для запоминания человеческому мозгу, чем огромное число приватного ключа. Неудивительно, что был придуман этот способ запароливания кошельков, потому что обычный приватник наизусть не выучишь, а seed фразу при желании запомнить легко и можно получать доступ к своим средствам откуда угодно, не нося с собой флэшку с приватником, которая может быть скомпрометирована.


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 08, 2019, 06:24:16 AM
Seed фразы намного удобнее для запоминания человеческому мозгу, чем огромное число приватного ключа. Неудивительно, что был придуман этот способ запароливания кошельков, потому что обычный приватник наизусть не выучишь, а seed фразу при желании запомнить легко и можно получать доступ к своим средствам откуда угодно, не нося с собой флэшку с приватником, которая может быть скомпрометирована.
Запоминать нужно не только слова, а и точную их последовательность. Поэтому на практике эта задача маловыполнимая, если конечно вы не обладаете феноменальной памятью. Запомнить seed из 12 слов, это тоже самое что выучить 128 битный ключ. Если вы сами попытаетесь создать свой seed котрый будет иметь цепочку слов имеющий логический смысл, то он будет моментально взломан. На этом погорело достаточно много людей, так же как и на brain wallet.


Title: Re: Derivation path - простыми словами
Post by: johhnyUA on November 08, 2019, 04:18:06 PM
Запоминать нужно не только слова, а и точную их последовательность. Поэтому на практике эта задача маловыполнимая, если конечно вы не обладаете феноменальной памятью. Запомнить seed из 12 слов, это тоже самое что выучить 128 битный ключ.

Ты неправ. Я то конечно понимаю, у каждого разный интеллектуальный потенциал, но сравнивать 12 (та даже 24 слова) со 64 знаками (256 битный ключ, которыми они все в основном и являются) это конечно нечто. Та даже блин возьмем 128 бит энтропии, или 16 байт, или 32 знака. И запомнить 12 слов. Ага, одинаково.


Title: Re: Derivation path - простыми словами
Post by: witcher_sense on November 08, 2019, 07:04:34 PM
Ты какую то глупость написал. Я то конечно понимаю, у каждого разный интеллектуальный потенциал, но сравнивать 12 (та даже 24 слова) со 64 знаками (256 битный ключ, которыми они все в основном и являются) это конечно нечто. Та даже блин возьмем 128 бит энтропии, или 16 байт, или 32 знака. И запомнить 12 слов. Ага, одинаково.

У тебя даже подписи то нет, зачем спамить если можно сначала осмыслить то, что пишешь?
Не будь так суров к джуниору, он просто набрался информации из каких-то источников, но сформулировать своими словами не удалось. Он имел в виду, что лучше всего сид-фразу копировать на какой-то дополнительный носитель, потому что возможности человеческой памяти ограничены, да и склероз может неожиданно нагрянуть. Так что лучше не рисковать, чтобы слова пытататься запомнить, пусть они и хуман-ридабл. А про генерацию паролей тоже верно, лучше из головы ничего не выдумывать, а использовать всякие менеджеры паролей и нагенерировать, что-то креативнее, чем qwerty54321.


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 09, 2019, 09:53:00 AM
Запоминать нужно не только слова, а и точную их последовательность. Поэтому на практике эта задача маловыполнимая, если конечно вы не обладаете феноменальной памятью. Запомнить seed из 12 слов, это тоже самое что выучить 128 битный ключ.

Ты какую то глупость написал. Я то конечно понимаю, у каждого разный интеллектуальный потенциал, но сравнивать 12 (та даже 24 слова) со 64 знаками (256 битный ключ, которыми они все в основном и являются) это конечно нечто. Та даже блин возьмем 128 бит энтропии, или 16 байт, или 32 знака. И запомнить 12 слов. Ага, одинаково.

У тебя даже подписи то нет, зачем спамить если можно сначала осмыслить то, что пишешь?
Спамиш сдесь ты и если у тебя больше мерита, то это еще не показывает уровень твоего интелектуального уровня. Попробуй сгенерировать кошельком 12 слов и запомнить их с утра, затем пойти позаниматься своими делами, пообщаться с друзьями и вечером взять бумажку записать то что запомнил и сравнить с оригиналом. Если ты перепутаеш местами хоть пару слов - твои деньги пропали. Лично знаю людей, которые в качестве защиты записывали на бумагу seed и специально меняли местами несколько слов, а затем бегали по форумам с просьбой восстановить средства и платили до 30% за восстановление, так как не могли вспомнить что и счем они меняли местами.
Теперь немного теории: seed из 12 слов имеет аналог 128 битного ключа + 4 бита контрольной суммы и для более удобочитаемой записии записывается в системе счисления с индексом 2048, имеется 2048 уникальных слов каждое длиной 11 бит, что в суме и дает 132 бита (128+4). Только на первый взгляд кажется, что запомнить 12 слов легче, но так как они логически не связаны, то для мозга одинаково сложно запомнить эти 12 слов или 16 байт.


Title: Re: Derivation path - простыми словами
Post by: igor72 on November 09, 2019, 10:10:12 AM
Если ты перепутаеш местами хоть пару слов - твои деньги пропали. Лично знаю людей, которые в качестве защиты записывали на бумагу seed и специально меняли местами несколько слов, а затем бегали по форумам с просьбой восстановить средства и платили до 30% за восстановление, так как не могли вспомнить что и счем они меняли местами.
Если два слова поменять местами, то найти правильную последовательность несложно даже простым ручным перебором.
Quote
Только на первый взгляд кажется, что запомнить 12 слов легче, но так как они логически не связаны, то для мозга одинаково сложно запомнить эти 12 слов или 16 байт.
Я с этим могу согласиться только для случаев, когда мнемоническая фраза на каком-то совсем незнакомом языке. Лично мне несложно запомнить 12 английских, известных мне слов (да и 24 запоминал), в отличие от не очень длинной последовательности цифр (32 цифры - это уже очень длинная для меня). Но, без постоянного повторения, через месяц я такую фразу благополучно забываю. Поэтому я с вами солидарен - фразу нужно обязательно записывать. И даже лучше не запоминать параллельно, чтобы под гипнозом или во сне невозможно было выдать ).


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 09, 2019, 10:17:39 AM
Но, без постоянного повторения, через месяц я такую фразу благополучно забываю.
Что и требовалось доказать! Для примера, у меня знакомый сисадмин выучил на память ключ активации windows и вводит его по памяти, так что такое тоже реально.
Quote
Если два слова поменять местами, то найти правильную последовательность несложно даже простым ручным перебором
В ручную врядли, да и зачем? Вы тут более здравомыслящий прикиньте сколько возможно вариантов :), для этого есть соответствующий софт.


Title: Re: Derivation path - простыми словами
Post by: igor72 on November 09, 2019, 10:51:23 AM
Quote
Если два слова поменять местами, то найти правильную последовательность несложно даже простым ручным перебором
В ручную врядли, вы тут более здравомыслящий прикиньте сколько возможно вариантов :), для этого есть соответствующий софт.
Я формулу не помню, но чисто логически выглядит так:
Первое из 12 слов можно поменять с другим 11-ю способами, второе 10-ю, третье - 9-ю итд.
В итоге число вариантов равно 11+10+9+8+7+6+5+4+3+2+1 = 66, причем валидным (чтобы чексумма сошлась) будет в среднем только каждый 16-й сид.
Сид из 24 слов подобрать будет, естественно, сложнее. Там будет 276 вариантов, валидным будет в среднем каждый 256-й.
В общем, лучше час потратить, чем 30% отдавать. Вот если сделать несколько перестановок, то вручную уже будет трудно перебрать, да.


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 09, 2019, 01:06:39 PM
Quote
Если два слова поменять местами, то найти правильную последовательность несложно даже простым ручным перебором
В ручную врядли, вы тут более здравомыслящий прикиньте сколько возможно вариантов :), для этого есть соответствующий софт.
Я формулу не помню, но чисто логически выглядит так:
Первое из 12 слов можно поменять с другим 11-ю способами, второе 10-ю, третье - 9-ю итд.
В итоге число вариантов равно 11+10+9+8+7+6+5+4+3+2+1 = 66, причем валидным (чтобы чексумма сошлась) будет в среднем только каждый 16-й сид.
Сид из 24 слов подобрать будет, естественно, сложнее. Там будет 276 вариантов, валидным будет в среднем каждый 128-й.
В общем, лучше час потратить, чем 30% отдавать. Вот если сделать несколько перестановок, то вручную уже будет трудно перебрать, да.
С расчетами у вас все верно, но тут еще нужно знать на каком адресе остался баланс чтобы знать с чем сравнивать, так как если вы активно пользовались кошельком то сдача будет далеко не на нулевом адресе. Также нужно знать исользовался bip32, bip44 или bip49. То есть такая задача посильна для вас, так вы в этом хорошо разбираетесь, но по той же причине в нее не попадете. А вот новички которые пытаются чтото запоминать, да еще менять местами слова, такую задачу сами не решат. Поэтому и платят за свою тупость и самоувереность. Кроме того для безопасного хранения seed существуют другие надежные варианты, например схема шамира.


Title: Re: Derivation path - простыми словами
Post by: johhnyUA on November 09, 2019, 03:36:46 PM
Я формулу не помню, но чисто логически выглядит так:
Первое из 12 слов можно поменять с другим 11-ю способами, второе 10-ю, третье - 9-ю итд.
В итоге число вариантов равно 11+10+9+8+7+6+5+4+3+2+1 = 66, причем валидным (чтобы чексумма сошлась) будет в среднем только каждый 16-й сид.

У тебя ошибка, причем довольно обыденная среди людей пытающихся в комбинаторику. Суть в том, что у тебя есть 12 слов, и ты не помнишь в какой они последовательности.
Ты начинаешь правильно, только вот первое слово можно выбрать 12ю способами (так как множество состоит из 12 слов), второе 11ю и так далее, до 12го, которое можно выбрать только одним способом (то, что осталось). Но самая твоя ошибка не в этом, а в следующем:

Там не плюсуется, а умножается.
Тоесть, количество перестановок - 12! (12 * 11 * 10 * 9 * 8 * ..... * 1 )
Нативный пример: сколькими способами можно переставлять между собой три буквы: А, Б, В ?

Ответ: 3! = 6

Проверяем на пальцах:

А Б В

А В Б

Б А В

Б В А

В А Б

В Б А

Поэтому зная 12 слов но не зная их последовательность придется подключить некоторые вычислительные мощности: 12 ! = 480 миллионов вариантов. Учитывая что нам нужно не только перебирать (это будет быстро, за пару секунд в оффлайн режиме) а еще проверять балансы каждого сида, то в принципе пару дней времени может уйти (если предположить что парсер будет перебирать и проверять по 1000 сидов за секунду)

В случае 24х слов, мощности необходимые для разумного перебора уже будут точно не "некоторыми", придется подружиться c каким нибудь китайским майнером (Хотя если смотреть по одному сайту, то чтобы забрутить за разумное время массив размером 6 * 10^23, придется подключать все мощности АНБ)

С расчетами у вас все верно

Определенно  ;D
Тебе то точно числа только на бумажку записывать, а лучше деньги в банке хранить. Не том, который в Швейцарии, а в той, которая рядом с банкой квашенной капусты и кислых помидоров  ;D


Title: Re: Derivation path - простыми словами
Post by: A-Bolt on November 09, 2019, 04:43:36 PM
У тебя ошибка, причем довольно обыденная среди людей пытающихся в комбинаторику. Суть в том, что у тебя есть 12 слов, и ты не помнишь в какой они последовательности.

Суть в том, что igor72 рассматривает другую задачу, когда есть последовательность слов и известно, что в ней два слова один раз поменяны местами:

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


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 09, 2019, 06:36:51 PM
Вы зря ему чтото объясняете, судя по его аватарке он явно воевал под Донецком или Луганском и получил серьезную контузию головы.:(

Политика - в соседней палате. И заметьте, это вы здесь внезапно подняли срачегенерирующую тему. До этого всё было в рамках приличий.
Заметьте, он первый начал меня оскарблять и еще абсолютно безпочвено, или если он легенда, то ему все можно?
Вместо того чтобы самому все проверить, начинает спамить и разводить срач. Я его вообще не трогал. Кроме того мои посты несут какойто смысл и показывают, как новичкам не вляпатся в проблемы. А какую пользу несут его посты, кроме бесполезной демонстрации своих познаний в математических вычислениях от которых вообще нет пользы?


Title: Re: Derivation path - простыми словами
Post by: johhnyUA on November 09, 2019, 06:40:06 PM
Суть в том, что igor72 рассматривает другую задачу, когда есть последовательность слов и известно, что в ней два слова один раз поменяны местами:

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

Ну если два слова местами поменять, то формула тоже другая будет. ну как, два варианта:

ты или помнишь где у тебя может быть ошибка (например не помнишь сначала идет handsome а потом poetry или наоборот) то у тебя будет всего два варианта.

Или ты вообще не помнишь что и где, тогда мой вариант с полным перебором. В случае частичного "забывания", если ты помнишь первое, второе и третье слово (не обязательно в порядке следования) то будет тот же факториал, только условно там будет 9!

Или я что-то продолжаю не понимать, ну тоесть разговор был 2 на 2? Типа не помнишь сначала "handsome poetry ...." или "wind variety ...."

Так тогда тоже два варианта, пробуешь сид с первым вариантом а затем сид со вторым вариантом.

Ну или же объясните немного более расширенно.

Я его вообще не трогал.

Просто написал глупость, а я тебя поправил, на что ты вспетушился. Что уж, бывает.


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 09, 2019, 06:51:03 PM
Суть в том, что igor72 рассматривает другую задачу, когда есть последовательность слов и известно, что в ней два слова один раз поменяны местами:

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

Ну если два слова местами поменять, то формула тоже другая будет. ну как, два варианта:

ты или помнишь где у тебя может быть ошибка (например не помнишь сначала идет handsome а потом poetry или наоборот) то у тебя будет всего два варианта.

Или ты вообще не помнишь что и где, тогда мой вариант с полным перебором. В случае частичного "забывания", если ты помнишь первое, второе и третье слово (не обязательно в порядке следования) то будет тот же факториал, только условно там будет 9!

Или я что-то продолжаю не понимать, ну тоесть разговор был 2 на 2? Типа не помнишь сначала "handsome poetry ...." или "wind variety ...."

Так тогда тоже два варианта, пробуешь сид с первым вариантом а затем сид со вторым вариантом.

Ну или же объясните немного более расширенно.

Я его вообще не трогал.

Просто написал глупость, а я тебя поправил, на что ты вспетушился. Что уж, бывает.
Уже удалил свой пост, думаю конфликт исчерпан.


Title: Re: Derivation path - простыми словами
Post by: A-Bolt on November 09, 2019, 07:39:10 PM
Или я что-то продолжаю не понимать, ну тоесть разговор был 2 на 2? Типа не помнишь сначала "handsome poetry ...." или "wind variety ...."

Допустим, Electrum при создании нового кошелька сгенерировал фразу:
Code:
stick kind robust unveil trigger milk series east salt fiscal broken hip

Я поменял два слова местами (kind и trigger). Получилась так:
Code:
stick trigger robust unveil kind milk series east salt fiscal broken hip

И записал эту изменённую фразу на бумажку. Теперь если эта бумажка достанется врагу, он получит нулевой баланс, при импорте фразы в кошелёк.

Через пять лет, достав бумажку из закопанной в огороде банки, я с ужасом обнаружил, что не помню какие именно два слова я поменял местами.

Вопрос: какое максимальное число комбинаций мне нужно перебрать, чтобы получить исходную комбинацию слов?

igor72 ответил на этот вопрос.


Title: Re: Derivation path - простыми словами
Post by: igor72 on November 10, 2019, 07:42:31 AM
С расчетами у вас все верно, но тут еще нужно знать на каком адресе остался баланс чтобы знать с чем сравнивать, так как если вы активно пользовались кошельком то сдача будет далеко не на нулевом адресе. Также нужно знать исользовался bip32, bip44 или bip49. То есть такая задача посильна для вас, так вы в этом хорошо разбираетесь, но по той же причине в нее не попадете. А вот новички которые пытаются чтото запоминать, да еще менять местами слова, такую задачу сами не решат.
Тут не надо никаких специальных знаний. Новичок скорее всего будет восстанавливать в том же кошельке, в котором этот сид создавался, поэтому пути деривации будут правильные. Если баланс будет лежать на адресах за пределами gap limit(это еще надо постараться такое устроить), то да, его видно не будет, но должна быть видна история транзакций с "видимых" адресов. И вообще, главное, что валидных сидов будет мало (в среднем 4 для BIP39, а если электрумовский сид, то вообще 1), с несколькими сидами уже несложно будет разобраться самому (или с помощью форумов).
Quote
Поэтому и платят за свою тупость и самоувереность. Кроме того для безопасного хранения seed существуют другие надежные варианты, например схема шамира.
"Другие надежные" - вы забыли запятую между этими словами поставить, потому что вариант с перестановкой нескольких слов, как видно, совсем ненадежный.


Title: Re: Derivation path - простыми словами
Post by: tenant48 on November 10, 2019, 01:31:01 PM
С расчетами у вас все верно, но тут еще нужно знать на каком адресе остался баланс чтобы знать с чем сравнивать, так как если вы активно пользовались кошельком то сдача будет далеко не на нулевом адресе. Также нужно знать исользовался bip32, bip44 или bip49. То есть такая задача посильна для вас, так вы в этом хорошо разбираетесь, но по той же причине в нее не попадете. А вот новички которые пытаются чтото запоминать, да еще менять местами слова, такую задачу сами не решат.
Тут не надо никаких специальных знаний. Новичок скорее всего будет восстанавливать в том же кошельке, в котором этот сид создавался, поэтому пути деривации будут правильные. Если баланс будет лежать на адресах за пределами gap limit(это еще надо постараться такое устроить), то да, его видно не будет, но должна быть видна история транзакций с "видимых" адресов. И вообще, главное, что валидных сидов будет мало (в среднем 4 для BIP39, а если электрумовский сид, то вообще 1), с несколькими сидами уже несложно будет разобраться самому (или с помощью форумов).
Quote
Поэтому и платят за свою тупость и самоувереность. Кроме того для безопасного хранения seed существуют другие надежные варианты, например схема шамира.
"Другие надежные" - вы забыли запятую между этими словами поставить, потому что вариант с перестановкой нескольких слов, как видно, совсем ненадежный.
Конечно валидных seed будет немного,в случае bip-39 для seed12 последнее слово может иметь 128 вариантов, для seed24 всего 8 слов из всего списка 2048, но полный список в данном случае не используется.
Бесплатно вам эту работу по перебору seed делать никто не будет, как и любую другую. А то что вы можете ее сделать сами, не означает что ее могут сделать все.
Насчет "Другие надежные варианты" я имел ввиду вариант с запоминанием seed. Про перестановку слов я даже не думал что это вариант, а только привел пример, что некоторые люди так делают.
Quote
Тут не надо никаких специальных знаний. Новичок скорее всего будет восстанавливать в том же кошельке, в котором этот сид создавался, поэтому пути деривации будут правильные.
Варианты бывают разные, я уже писал что могут упасть сервера и нужно восстанавливать на другом кошельке и без знания точных путей деривации ничего не выйдет.


Title: Re: Derivation path - простыми словами
Post by: johhnyUA on November 10, 2019, 03:07:35 PM
Вопрос: какое максимальное число комбинаций мне нужно перебрать, чтобы получить исходную комбинацию слов?

igor72 ответил на этот вопрос.

Да, в таком случае это размещение без повторений. Но выше вон об этом уже написали.
мне почему то показалось что обсуждается вариант когда слова помнишь, но забыл в каком они порядке все  :(