Bcademy

CAPIRE BITCOIN | PARTE QUINTA: CHIAVI E INDIRIZZI | SEZIONE SESTA: I WALLET/2

2020-01-21 15:05:40

Il testo è una guida completa, che partendo dalla parte teorica e toccando quella pratica, entra in profondità nelle dinamiche interne di Bitcoin. Per approfondimenti: "Mastering Bitcoin" di A. Antonopoulos e "The Bitcoin Standard" di S.Ammous. Per info sui corsi [email protected]

Il seme radice è l’input nell’algoritmo HMAC-SHA512 e l’hash risultante viene usato per creare una chiave privata master (m) e un codice master chain. La chiave privata master (m) poi genera una chiave pubblica master corrispondente (M), usando il normale processo di moltiplicazione m * G della curva ellittica. Il codice chain viene usato per introdurre entropia nella funzione che crea le chiavi figlie dalla chiave madre.

I wallet HD usano una funzione (CKD) per derivare le chiavi figlie, basata su una funzione di hashing unidirezionale che coinvolge:

  • una chiave privata o pubblica (genitore)
  • un seed chiamato “chain code” (256 bits)
  • un indice (index number, 32 bits).

Il chain code è usato per introdurre dati casuali nel processo deterministico, di modo che conoscere l’indice e la chiave figlia non sia sufficiente per derivare le altre figlie, se non conoscendo anche il chain code. L’iniziale chain code seed (alla radice dell’albero) è generato dal seed, mentre gli altri dai chain code dei genitori. Questi tre item (parent key, chain code, and index) sono compresi e “hashati” per generare chiavi figlie.

La chiave pubblica del genitore, il chain code e l’indice sono combinati e hashati (HMAC-SHA512) per generare un 512-bit hash. Questo 512-bit hash è diviso in due parti: i 256 bits di destra dell’hash divengono il chain code per i figli; mentre i 256 bits di sinistra dell’hash sono aggiunti alla chiave privata del genitore per produrre la chiave privata del figlio.


La funzione di derivazione delle chiavi può essere usata per creare figli a qualsiasi livello della struttura, basandosi sui tre input (chiave, chain code, indice del figlio desiderato). I primi due, combinati, sono  chiamati extended key (possono essere sia private che pubbliche).


Hardened derivation è una funzione alternativa di derivazione che spezza il legame tra la chiave pubblica del genitore e il chain code del figlio, usando la chiave privata del genitore per generare il chain code del figlio, invece che la chiave pubblica.


Paper Wallets. Sono esattamente wallet di carta, ergo chiavi private stampate su carta, talvolta accompagnate da un indirizzo bitcoin per ricevere pagamenti, e il caso d’uso comune è quello di creare backup o archiviare bitcoin offline (cold storage). La sicurezza dei paper wallet è incrementabile tramite BIP 38, con la passphrase memorizzata dal proprietario.


 Alessio Salvetti, Co-founder di Bcademy e board member (VP), business developer, filosofo per formazione e bitcoiner per passione, esperto di modeling e lean startup, è co-founder di Inbitcoin e responsabile prodotto di Bcademy (CPO).