Към съдържанието
ДаретеEN

Ключове и адреси

HD портфейли

HD портфейл биткойн създава дърво от ключове от един сийд според BIP 32. Вижте как работят главният ключ, дъщерните ключове и извеждането на публични ключове.

От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.

Хиерархичният детерминистичен портфейл, или HD портфейл, създава всеки ключ и адрес от един сийд. Хиерархичен означава, че ключовете са подредени в дърво и всеки ключ може да създава свои деца. Детерминистичен означава, че един и същ сийд винаги дава едни и същи ключове, в един и същ ред. Методът е дефиниран в BIP 32, а повечето съвременни портфейли го ползват.

Направите ли резервно копие на сийда веднъж, можете да възстановите всеки частен ключ и адрес, които портфейлът ще създаде. Това е основното предимство пред по-старите портфейли, които са създавали ключовете един по един и са изисквали ново резервно копие за всеки нов адрес.

Защо да ползваме един сийд за много ключове?

HD портфейлите решават три практически проблема.

  • Едно резервно копие. По-старите портфейли са пазили отделен частен ключ за всеки адрес, така че всяко ново плащане е означавало ново резервно копие. HD портфейлът се нуждае само от сийда си.
  • Организация. Дървото дава на всеки акаунт и на всяка негова част собствен клон. Например адресите за получаване могат да се държат отделно от адресите за ресто (change).
  • Публични ключове без частни. Публичният ключ на родителя може да създаде публичните ключове на нормалните му деца на друга машина. Сървърът на магазин може да приема нови плащания, без да държи никаква тайна.

Самият сийд е описан в сийд фраза. Тази страница обяснява какво се получава от сийда.

Как се създава главният ключ?

Сийдът влиза в HMAC-SHA512 с фиксирания ключ Bitcoin seed. 64-байтовият резултат се дели на две половини по 32 байта. Лявата половина е главният частен ключ. Дясната е chain code, допълнителни 32 тайни байта, от които зависят и децата.

Примерът ползва сийда от първия тестов вектор на BIP 32, 000102030405060708090a0b0c0d0e0f, който е публичен. Главният му частен ключ е e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35, а chain code е 873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508.

Сийдът минава през HMAC-SHA512 с ключа Bitcoin seed: лявите 32 байта стават главният частен ключ, а дясните 32 байта стават chain code. сийд, 16 байта в този пример 000102030405060708090a0b0c0d0e0f HMAC-SHA512 лявите 32 байта: главен ключ e8f32e723decf4051aefac8e2c93c9c5 b214313817cdb01a1494b917c8436b35 дясните 32 байта: chain code 873dff81c02f525623fd1fe5167eac3a 55a049de3d314bb42ee227ffed37d508 публичен ключ, компресиран 0339a36013301597daef41fbe593a02cc 513d0b55527ec2df1050e2e8ff49c85c2
Стойностите са от тестов вектор 1 на BIP 32. Всеки може да ги види, затова ги ползвайте само за проверка на кода си.

Главният публичен ключ идва от частния ключ върху елиптичната крива. В компресиран вид той е 0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2. Главният частен ключ и chain code заедно са главният разширен ключ.

Как се създават дъщерните ключове?

Всяко дете идва от разширения ключ на родителя и от номер, наречен индекс. Частният ключ на родителя (за нормално дете публичният му ключ) влиза в HMAC-SHA512 заедно с chain code на родителя. Индексът е 32-битово число, така че един ключ има 4,294,967,296 възможни деца. Двата диапазона са:

  • Нормални деца, с индекси от 0 до 2,147,483,647. Публичният ключ на родителя може да създаде тези.
  • Hardened деца (укрепени), с индекси от 2,147,483,648 до 4,294,967,295. Само частният ключ на родителя може да ги създаде. В пътищата hardened индексът се отбелязва с апостроф, така че индекс 2,147,483,648 се записва като 0'.

Частният ключ на детето е лявата половина на HMAC, добавена към частния ключ на родителя, по модул на реда на кривата. Дясната половина става chain code на детето. Разширените ключове обясняват аритметиката подробно.

За първия hardened ключ на тестов вектор 1 пътят е m/0'. Частният му ключ е edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea, а публичният е 035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56. Всяко дете зависи само от родителя си, така че един и същ сийд винаги дава едно и също дърво.

Как изглежда дървото?

Дървото започва от главния ключ m. Децата му са акаунтите. Всеки акаунт се разделя на клон за получаване и клон за ресто, а клоновете държат ключовете, които се ползват за адреси.

Дърво от ключове. Главният ключ има два акаунта. Първият има клони за получаване и за ресто, а всеки клон държи номерирани ключове. главен акаунт клон ключ m 0' m/0' 1' m/1' 0 m/0'/0 получаване 1 m/0'/1 ресто 0 m/0'/0/0 1 m/0'/0/1 hardened (') нормален
Индексите са показани като нива на пътя. Акаунтите са hardened, а клоновете под тях са нормални.

Портфейлите следват стандартни форми на това дърво, затова един сийд работи и в други портфейли. Страницата за пътищата за деривация изброява често срещаните, например m/84'/0'/0'/0/0, и обяснява всяко ниво.

Може ли портфейл да създава публични ключове без частни?

Да, но само за нормални деца. Публичният ключ на родителя и chain code са достатъчни, за да се изчисли публичният ключ на всяко нормално дете, без участието на частен ключ. Този публичен ключ съвпада с този, който се получава от частния ключ, който портфейлът ще ползва по-късно.

Примерът е пак тестов вектор 1. Вземете публичния ключ на m/0', който е 035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56, и изведете детето му с индекс 1 само от този публичен ключ. Резултатът е 03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c. Частният ключ за m/0'/1 дава същия публичен ключ, така че сървър, който има само xpub, може да строи адреси за получаване за портфейла.

Ето защо хардуерните портфейли могат да пазят частните ключове на устройството и да изпращат на компютъра или на сървъра на магазина само xpub. Hardened деца не могат да се създават по този начин, затова нивото на акаунта обикновено е hardened.

Свързани ли са ключовете в HD портфейл?

Отвън не. Публичните ключове и адресите изглеждат несвързани. Наблюдател във веригата не може да разбере, че два адреса идват от един и същ сийд, защото chain code е тайна и никога не влиза във веригата. Всеки адрес се държи като отделен ключ, създаден сам.

Вътре в портфейла връзките са силни. Който знае сийда или разширения частен ключ, може да възстанови всеки клон.

Какво трябва да пазите в HD портфейл?

Три неща са тайни и всяко има различна цена, ако изтече.

  • Сийдът или разширеният частен ключ. Който ги има, контролира всеки ключ под тях. Третирайте ги като целия портфейл.
  • Разширеният публичен ключ. Той не може да харчи монети, но позволява на всеки да намери всеки адрес в портфейла и да следи баланса му във веригата. Споделяйте го само със услуга, на която имате доверие да пази тази поверителност.
  • Частният ключ на нормално дете заедно с xpub на родителя. Тази комбинация е слабото място. Частният ключ на детето е частният ключ на родителя плюс стойност, която всеки може да изчисли от xpub. Затова частният ключ на родителя може да се възстанови, като се извади тази стойност. Така се разкрива родителят и всяко нормално дете под него.

Hardened деца ограничават щетите. Тъй като ключът на акаунта е hardened, изтекъл xpub на клон за получаване и един от дъщерните му ключове разкриват този клон, но никога ключа на акаунта над него.

Откъде идват HD портфейлите?

Идеята е на няколко души. BIP 32 приписва първоначалната идея на Gregory Maxwell, а схемата е реализирана в Armory от Alan Reiner. Текстът на BIP-а е написан от Pieter Wuille.

Какво да запомните за HD портфейлите?

  • Един сийд дава дърво от ключове, така че едно резервно копие покрива целия портфейл.
  • Главният ключ е HMAC-SHA512 от сийда, разделен на частен ключ и chain code.
  • Нормалните деца могат да се извеждат от публичен ключ. Hardened деца изискват частния ключ.
  • Пазете разширения частен ключ и всеки дъщерен частен ключ в тайна, а xpub третирайте като лична информация.

Следващо прочетете сийд фраза, за да видите как думите стават този сийд, и после разширени ключове за аритметиката на децата.

В този раздел: Ключове и адреси

Целият курс „Биткойн от нулата“

Нещо не изглежда наред? Кажете ни