Eirc Hop ci spiega comegli indirizzi sono genreati partendo dal seme (seed) in IOTA.

Un seme ed un indirizzo sono entrambi lunghi 81 byte. Ciò significa che nel migliore dei casi ogni seme può mappare a un unico indirizzo univoco. Ora consideriamo il fatto che un singolo seme viene utilizzato per generare un numero qualsiasi di indirizzi e si può vedere che deve esserci una sovrapposizione. Tuttavia, il numero di valori possibili per un seme/indirizzo è così ridicolmente alto (27⁸¹) che le probabilità di indirizzi accidentalmente sovrapposti sono incredibilmente piccoli quando si usano semi casuali.

Ed è qui che entra in gioco il caso speciale: l’algoritmo utilizzato nella creazione della serie di indirizzi. Non è casuale. Per essere in grado di generare in modo deterministico la serie di indirizzi dal seme, è necessario disporre di una funzione che utilizza il seme più l’indice dell’indirizzo per generare un punto di partenza per la generazione di un sotto-seme che può essere utilizzato per associare 1 a 1 la chiave privata e l’indirizzo. Questa funzione è molto semplice: aggiungere l’indice al seme come se fosse un numero memorizzato prima con i byte meno significativi.

Funziona così: assumiamo che il nostro seme sia BLABLABLABLA …

Per l’indirizzo 0 aggiungiamo 0 al seme, con conseguente BLABLABLABLA …
Per l’indirizzo 1 aggiungiamo 0 al seme, risultando in CLABLABLABLA …
Per l’indirizzo 2 aggiungiamo 0 al seme, risultando in DLABLABLABLA …
Per l’indirizzo 3 aggiungiamo 0 al seme, risultando in ELABLABLABLA …

Compresa la sequenza? E una volta che un tryte è in overflow, il prossimo tryte viene anche incrementato, eccetera.

Ora vediamo cosa succede quando iniziamo con il seme CLABLABLABLA …

Per l’indirizzo 0 aggiungiamo 0 al seme, risultando in CLABLABLABLA …
Per l’indirizzo 1 aggiungiamo 0 al seme, risultante in DLABLABLABLA …
Per l’indirizzo 2 aggiungiamo 0 al seme, risultando in ELABLABLABLA …
Per l’indirizzo 3 aggiungiamo 0 al seme, risultando in FLABLABLABLA …

Si nota la sovrapposizione con la serie precedente?

Questo è il motivo per cui i semi che differiscono solo nei primi caratteri possono avere intervalli di indirizzi sovrapposti. Ma poiché molte persone generano un seme casuale, le probabilità che si differenziano solo nei primi caratteri sono estremamente piccole.

Ora per completare il quadro, ecco come sono generati il ​​sotto-seme, la chiave privata e l’indirizzo, dal seme originale una volta che l’indice è stato aggiunto come abbiamo fatto sopra:

Primo, il risultato (seme+indice) è hashato in un sotto-seme. A causa della natura hashing, ciò significa che i sotto-semi risultanti sono così diversi che è impossibile ricreare l’originale (seme+indice) da cui proviene. Non formano più una serie sequenziale, ma sono distribuiti casualmente sullo spazio degli indirizzi.

Ora, questo sotto-seme viene a sua volta sottoposto a hash in una chiave privata la cui lunghezza è determinata dal livello di sicurezza desiderato dell’indirizzo. La lunghezza della chiave privata sarà doppia per il livello di sicurezza 2 e tripla per il livello di sicurezza 3 (il portafoglio leggero utilizza un livello di sicurezza predefinito di 2).
Nota come queste chiavi private possono sempre essere facilmente rigenerate da (seme+indice), quindi non è necessario memorizzare le chiavi private ovunque.

Successivamente, la chiave privata viene sottoposta a hash in 27 frammenti di chiave che sono stati sottoposti a hashing 26 volte. Questi frammenti di chiave svolgeranno un ruolo essenziale nel processo di firma di Winternitz quando i fondi di un indirizzo vengono spesi.

Infine, i frammenti di chiave con hash vengono uniti insieme in una chiave pubblica. Questa chiave pubblica è l’indirizzo.

Spero che questo abbia fatto luce sull’intero processo.


Il testo originale in lingua inglese si trova qui: https://medium.com/iota-demystified/how-iota-addresses-are-generated-from-seeds-40f554e38818


Da oggi è possibile dare il vostro supporto su Patreon https://www.patreon.com/antonionardella

Per ulteriori informazioni in italiano o tedesco trovate i miei contatti a questa pagina.
Se avete trovato utile la mia libera traduzione, accetto volentieri delle donazioni 😉

IOTA:
QOQJDKYIZYKWASNNILZHDCTWDM9RZXZV9DUJFDRFWKRYPRMTYPEXDIVMHVRCNXRSBIJCJYMJ9EZ9USHHWKEVEOSOZB
BTC:
1BFgqtMC2nfRxPRge5Db3gkYK7kDwWRF79

Non garantisco nulla e mi libero da ogni responsabilità.