Pages:
Author

Topic: Derivation path - простыми словами - page 2. (Read 1245 times)

legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
Почему 0.75 ?
264+264+264 = 3*264 = 1.5*265 = 0.75*266
legendary
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
Только не минус, а разделить.
Ну да, на каждого жителя Земли всего лишь по два с половиной миллиарда сидов с уникальными адресами выходит ).

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

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

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

Почему 0.75 ?
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange

Вот правильно ли я размышляю, если с BIP44 и cointype 0 (для блокчейна биткоина), то у нас с одного сида получается 296 ключевых пар. Так как количество адресов ограничено 2160, то получается чтобы адреса не повторялись (случайно не отправил дядьке в Камбодже свои битки), то количество уникальных сидов тоже ограничено, и являет собой 2160-296 = 264 . Чет не очень много.
Только не минус, а разделить.
Ну да, на каждого жителя Земли всего лишь по два с половиной миллиарда сидов с уникальными адресами выходит ).
Quote
Ну вот если предположить что сегвит адреса, с их BIP49 и BIP84 (один для нестед , один для трушного, как я помню) то получится еще по 264. Тобишь всего в сумме 266
0.75*266 на самом деле. Но все равно - практического смысла в этом не вижу, никто сиды на уникальность набора адресов не проверяет, это невозможно сделать. Имхо, адресные пространства разных сидов часто где-то пересекаются. Просто вероятность обнаружить эти пересечения ничтожно мала.
legendary
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
Это по 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
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
Пример 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, что не обязательно).
legendary
Activity: 2436
Merit: 1849
Crypto for the Crypto Throne!
Пример 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 ключей.

Если ошибся, то извиняйте, немного заспанный. Буду благодарен любой критике.
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
не есть корень дерева
Ошибку исправил, спасибо.
Quote
Когда говорят об энтропии S имеют ввиду размер затравки (псевдослучайного числа). Подмена  двух понятий, которая иногда используется, - seed и entropy -  может ставить в тупик.
Согласен.
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange

[?] Корнем всего этого дерева ключей является 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.
Более полная цитата оттуда:
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 слишком избыточно.
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
Если позволите, попытаюсь изложить, насколько смогу простыми словами, свое определение 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 - эти пути дадут одинаковые ключи.
legendary
Activity: 2450
Merit: 4415
🔐BitcoinMessage.Tools🔑
Цель этой темы заинтересовать вопросом "Derivation path" и подтолкнуть к более глубокому изучению вопроса. Я выбрал эту небольшую статью, потому что она заставила меня заинтересоваться. Те вопросы и уточнения, озвученные выше вполне закономерны, потому что статья небольшая и, так сказать, тезисная. Она не охватывает всех нюансов и частных случаев, а также технических спецификаций отдельно взятых аппаратных кошельков. Некоторые вопросы наиболее полно раскрываются в статьях и видео, приведенных в разделе "Полезные ссылки", где принципы объясняются даже с использованием непонятных математических формул.

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

По мере изучения вопроса, я постараюсь добавлять сноски и комментарии в первый пост, чтобы содержимое стало более понятно и более содержательно.
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
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
В общем да, но эти номера производители кошельков не всегда соблюдают. Например, Леджер иногда назначает свои номера (которые в этой таблице по ссылке уже заняты другими монетами).
legendary
Activity: 2450
Merit: 4415
🔐BitcoinMessage.Tools🔑
Оригинал статьи: 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 - описание HD-кошельков.
  • BIP-39 - мнемоническая фраза / список слов / остальные части этой загадки.
  • BIP-44 - материал про пути вывода / алгоритмы.

Обычно у вас есть один закрытый (приватный) ключ (напр. 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 в единственный закрытый ключ, который затем используется для доступа к вашим средствам и подписания ваших транзакций.

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



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

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



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

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

Вот это



его часть.

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

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

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



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



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



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



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



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



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


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


Некоторые из приведенных выше переменных основаны на внешних факторах, например, в какой я цепи. Некоторые выбираются пользователем или программным обеспечением кошелька, например, переменная 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 для того, чтобы мой друг вернул мне деньги, и так далее. Я мог бы сделать то же самое со счетами компании. Ура!


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

Pages:
Jump to: