Vai al contenuto
buybitcoinsmart

Glossario / Wallet e custodia

Derivazione del seed

Che cos'è la derivazione del seed?
La derivazione del seed è la funzione unidirezionale che converte una frase mnemonica più una passphrase opzionale nel seed di 512 bit da cui un wallet costruisce effettivamente le chiavi.

Specificato nel BIP-39.

La funzione è PBKDF2 con HMAC-SHA512, eseguita sulle parole stesse e non sulla casualità che vi sta dietro. Il BIP-39 fissa il numero di iterazioni a 2.048 e l'output a 64 byte, con la tua passphrase aggiunta alla parola fissa "mnemonic" per formare il salt. Nulla in quel passaggio verifica che le parole siano mai state valide, quindi una frase digitata male produce comunque un seed ben formato e un wallet vuoto.

Come funziona

La derivazione del seed prende due input e restituisce un output, in un'unica chiamata senza stato e senza memoria di ciò che ha prodotto le parole. La frase mnemonica è la password. Il salt è il testo "mnemonic" con l'eventuale passphrase attaccata in fondo, e quando non è stata impostata alcuna passphrase si usa una stringa vuota. Entrambi passano prima per la normalizzazione Unicode NFKD, così i caratteri accentati in una frase francese o spagnola producono lo stesso hash qualunque tastiera li abbia digitati.

Il BIP-39 afferma che questa metà dello standard è "completely independent" dalla metà che genera una frase, e lo dice in tono di approvazione: non ci sono vincoli sulla struttura della frase, e i client possono scrivere le proprie liste di parole o persino interi generatori di frasi. La lettura pratica è più cruda. Se dai alla funzione dodici parole senza senso, restituisce 64 byte perfettamente utilizzabili. Il BIP-39 richiede che il software calcoli il checksum fuori da questo passaggio e "issue a warning if it is invalid", un avviso anziché un rifiuto, ed è per questo che alcuni strumenti ripristinano una frase che ti hanno appena detto essere rotta.

Due conseguenze derivano dal calcolare l'hash della frase invece dell'entropia che vi sta dietro. Tradurre una frase parola per parola in un'altra lingua produce un seed completamente diverso, perché i byte di input sono cambiati anche se la casualità sottostante no. E la direzione non si inverte mai: un seed BIP-32 arbitrario non può essere riscritto come frase BIP-39, ed è per questo che "esportare il seed" ed "esportare le parole" sono richieste diverse.

Dove lo vedi

La derivazione del seed emerge nel momento in cui due software non sono d'accordo su quale funzione eseguire. Il backup multi-share su Trezor Safe 3 e su Safe 5, entrambi recensiti qui, è SLIP-39 e non BIP-39: una lista di 1.024 parole letta 10 bit alla volta, che dà 20 parole per share per un segreto di 128 bit e 33 parole per uno di 256 bit. Quelle share non toccano mai il passaggio PBKDF2 del BIP-39. SLIP-39 è stato pubblicato dagli stessi autori del BIP-39 come sostituto, e attribuisce a "the overly coupled design of BIP-0039 and its use of a one-way derivation function" il fatto che le share non possano essere riconvertite; il percorso inverso funziona ma obbliga ogni share risultante a 59 parole, qualunque fosse la lunghezza di partenza.

La recensione di Coldcard su questo sito mostra ciò che la derivazione non può fare per te. Una migrazione del firmware a marzo 2021 ha lasciato la generazione del seed attingere a un generatore di numeri pseudocasuali software invece che a quello hardware, e Coinkite ha aggiornato il proprio avviso il 1º agosto 2026. La derivazione in sé non ha mai vacillato. Ha trasformato un segreto debole in un seed di 64 byte ben formato dietro un checksum valido, e nessun wallet a valle aveva modo di accorgersene.

Per osservare la funzione in esecuzione senza rischiare nulla, il BIP-39 pubblica vettori di test che allineano entropia, mnemonica e seed risultante, con la passphrase "TREZOR" usata per ogni vettore.

Derivazione del seed vs percorso di derivazione

La derivazione del seed avviene una sola volta, prima che esista una singola chiave; un percorso di derivazione viene consultato dopo, ogni volta che serve un indirizzo. Questa differenza decide quanto grave sia un ripristino che sembra vuoto. Un percorso sbagliato è un'impostazione: cambia il tipo di script, esegui una nuova scansione e il saldo compare. Una passphrase sbagliata cambia il seed, il che cambia l'intero albero sotto di esso, e nessuna impostazione da nessuna parte riporta indietro quello vecchio.

Da non confondere con

Domande frequenti

La derivazione del seed controlla che le mie parole siano valide?

No, accetta qualsiasi testo. Il BIP-39 colloca il controllo del checksum fuori dalla funzione di derivazione e richiede ai wallet solo di avvisarti quando fallisce, quindi una frase con una parola sbagliata deriva comunque un seed di 64 byte perfettamente formato e apre un wallet vuoto.

Una frase di recupero tradotta apre lo stesso wallet?

No, ne apre uno diverso. La derivazione calcola l'hash della frase e non della casualità che vi sta dietro, quindi sostituire le parole inglesi con i loro equivalenti spagnoli o giapponesi cambia i byte di input e di conseguenza cambia ogni chiave che segue.

La derivazione del seed è la stessa cosa del BIP-39?

È metà del BIP-39. Lo standard specifica due conversioni separate: dall'entropia alle parole, e dalle parole al seed. La derivazione del seed è la seconda, e il BIP-39 afferma che le due sono completamente indipendenti l'una dall'altra.

Leggi anche

Termini correlati

Altro in Wallet e custodia

Leggi questa pagina in inglese