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.
Главният публичен ключ идва от частния ключ върху елиптичната крива. В компресиран вид той е 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/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 третирайте като лична информация.
Следващо прочетете сийд фраза, за да видите как думите стават този сийд, и после разширени ключове за аритметиката на децата.
В този раздел: Ключове и адреси
Целият курс „Биткойн от нулата“
Нещо не изглежда наред? Кажете ни