Перейти к содержимому
buybitcoinsmart

Глоссарий / Адреса и ключи

Дочерний ключ

Другие названия: Дочерний публичный ключ, Дочерний приватный ключ, Child key.

Что такое дочерний ключ?
Дочерний ключ получается на шаге вывода, а не из генератора случайных чисел, и определяется индексом, который родительский ключ использовал для его создания.

Определено в BIP-32.

Ничто в дочернем ключе не слабее ключа, стоящего над ним. Дочерний ключ представляет собой полноценный приватный ключ на 256 бит со своим собственным кодом цепочки, способный подписывать транзакции и, в свою очередь, иметь дочерние ключи. Это слово описывает положение в дереве, и в стандартном кошельке ключи, которые фактически хранят ваши биткоины, находятся на пять уровней ниже корня.

Как это работает

Для получения дочернего ключа нужны один хеш и одно сложение. Код цепочки родителя становится ключом для HMAC-SHA512, данные представляют собой материал родительского ключа, за которым следует четырехбайтовый индекс, а результат из 64 байт делится пополам. Правые 32 байта становятся кодом цепочки дочернего ключа. Левые 32 байта прибавляются к приватному ключу родителя по модулю порядка кривой secp256k1, и сумма является приватным ключом дочернего ключа.

Именно из-за этого сложения публичный вывод вообще возможен. Прибавление числа к приватному ключу соответствует прибавлению точки к публичному ключу, поэтому программное обеспечение, располагающее только публичной частью, может вычислить тот же дочерний публичный ключ, ни разу не увидев секрета. BIP-32 также описывает случай, когда результат хеширования выходит за допустимый диапазон, вероятность чего он оценивает ниже 1 к 2 в степени 127, и предписывает пропустить этот индекс и перейти к следующему.

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

Где это видно

Кошелек фактически строится из дочерних ключей, поэтому вы встречаете их как номера индексов, а не как ключи.

Откройте экран управления монетами в Sparrow или Electrum, и у каждого адреса будет свой путь: m/84'/0'/0'/0/7 означает восьмой адрес получения первого счета, считая с нуля. Подтвердите вывод на Trezor или Ledger, и устройство покажет тот же путь рядом с адресом, и так вы проверяете, что адрес назначения принадлежит вашему собственному дереву, а не тому, кто скомпрометировал компьютер.

Стоит обращать внимание и на глубину. Мастер-ключ находится на глубине 0, а в пути в стиле BIP-44 ключ, подписывающий платеж, находится на глубине 5. Каждый уровень между ними является дочерним по отношению к уровню выше и родительским по отношению к уровню ниже, поэтому оба слова описывают отношение, а не ранг.

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

Дочерний ключ vs родительский ключ

Дочерний ключ и родительский ключ представляют собой один и тот же вид объекта, рассматриваемый с противоположных концов одного шага вывода. Каждый ключ, кроме мастер-ключа, является чьим-то дочерним, и каждый ключ, из которого что-либо было выведено, является чьим-то родительским, поэтому узел на m/84'/0'/0' является и тем и другим одновременно. Асимметрия заключается в том, что именно способен вычислить каждый из них. Родитель бесконечно получает свои дочерние ключи, тогда как дочерний ключ сам по себе ничего не говорит о ключе над ним. Это одностороннее свойство составляет всю модель безопасности дерева, и именно упрочненный вывод обеспечивает ее односторонность.

Не путать с

Часто задаваемые вопросы

Менее ли безопасен дочерний ключ, чем мастер-ключ?

Нет. Дочерний ключ представляет собой полноценный приватный ключ на 256 бит, и подпись им имеет точно такую же надежность. Разница в положении: дочерний ключ можно восстановить из его родителя, тогда как родительский ключ нельзя восстановить из дочернего.

Можно ли экспортировать только один дочерний ключ, чтобы переместить один адрес?

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

Связанные термины

Еще в разделе «Адреса и ключи»

Читать эту страницу на английском