Citesc despre cheia copil Hardened și Normal în capitolul 5 al cărții „Mastering Bitcoin” de Andreas, împreună cu aceasta fir detaliat și BIP-32. Iată câteva dintre înțelegerile mele despre aceste două proceduri:
k
: cheie privată // K
: cheie publică // i
index // c
cod de lanț // H
Rezultat hashing HMAC // Hstânga
primii 32 de biți ai rezultatului hash. // n
ordinul curbei eliptice. // G
punctul de plecare al curbei eliptice
Derivarea normală a cheilor
Cazul 1: parPrivkey -> childPrivkey (și de aici, childPubkey)
H = HMAC(cpar, Kpar || ichild)
=> kchild = (kpar + Hstânga) mod n
=> Kchild = G*kchild = G*[ (kpar + Hstânga) mod n)]
Cazul 2: parPubkey -> childPubkey
H = HMAC(cpar, Kpar || ichild)
=> Kcopil = G*Hstânga + Kpar
Hardened Key Derivation`
Cazul 3: parPrivkey -> childPrivkey (și de la acea childPubkey)
H = HMAC(cpar, kpar || ichild)
=> kchild = (kpar + Hstânga) mod n
=> Kchild = G*kchild = G*[ (kpar + Hstânga) mod n]
Având în vedere aceste 3 metode, sunt oarecum confuz:
- diferența în ecuația generației dintre cazurile 1 și 2 este destul de subtilă, astfel încât trebuie doar să înmulțim
kchild = (kpar + Hstânga) mod n
de G pentru a obține asta în cazul 2. Cu toate acestea, deoarece există un factor mod n
la final, nu am putut spune dacă Kchild
din Cazul 1 se va raporta cu cel din Cazul 2. Dacă nu, atunci ce rost are să generezi doar cheia publică fără a putea cheltui fondurile trimise către aceasta?
- Acest lucru nu este legat de întrebarea de mai sus, ci mai degrabă de generarea cheii private master: am citit că după obținerea semințelor rădăcină, sămânța a fost introdusă în funcția HMAC-SHA512 pentru a obține un hash de 512 biți, primii 32 de biți. din care octeți servesc ca cheie privată principală. Deci întrebarea mea este, deoarece funcția HMAC preia 2 intrări care sunt
cheie
și text
, care este „cheia” în acest caz? Dacă nu există nicio „cheie”, atunci de ce să nu folosiți doar funcția de hashing SHA-512?
Vă mulțumesc foarte mult anticipat.