Panoramica dell'Hashing
L'hashing e gli hash dei blocchi sono stati menzionati più volte, ma il concetto stesso non è ancora stato esaminato in dettaglio. È ora il momento di comprendere cosa sia effettivamente l'hashing.
Hashing è un processo che prende un input e produce una stringa di byte a dimensione fissa, tipicamente espressa come numero esadecimale. L'output, noto come hash, appare casuale e cambia completamente con qualsiasi modifica dell'input, una proprietà nota come "effetto valanga".
Proprietà delle funzioni hash
Nella blockchain, le funzioni hash vengono utilizzate per:
- Proteggere le transazioni creando un'impronta digitale unica per ciascuna;
- Generare indirizzi dalle chiavi pubbliche;
- Creare i collegamenti nella blockchain tramite gli hash dei blocchi.
Tenendo presente ciò, una buona funzione hash per la blockchain presenta diverse proprietà fondamentali:
L'hashing, soprattutto utilizzando una buona funzione di hash, può essere paragonato alla preparazione di un frullato. Osserviamo la seguente illustrazione:
In realtà, è possibile trovare l'input originale dato un hash, tuttavia, richiederebbe troppo tempo per essere effettivamente pratico.
Hashing dei blocchi
Per ottenere l'hash di un determinato blocco, Bitcoin utilizza la funzione di hash SHA-256, che restituisce un hash di 256 bit (32 byte). Fa parte della famiglia SHA-2 progettata dalla National Security Agency (NSA) ed è nota per le sue forti proprietà di sicurezza, che la rendono resistente alle collisioni, agli attacchi di preimmagine e ad altre vulnerabilità crittografiche.
L'hash di un blocco Bitcoin viene calcolato prendendo i dati dell'intestazione del blocco. Questi dati vengono inseriti nella funzione di hash SHA-256 due volte in un processo noto come double SHA-256.
Ecco un'immagine per chiarire il concetto:
L'hash risultante a 256 bit deve soddisfare determinati criteri definiti dall'obiettivo di difficoltà della rete. Se l'hash non è inferiore all'obiettivo, il nonce viene modificato e l'hash viene ricalcolato fino a quando non si trova un hash idoneo. Questo hash finale è l'identificatore univoco del blocco.
Radice di Merkle
La radice di Merkle è un singolo hash che rappresenta tutte le transazioni incluse in un blocco. Il suo calcolo inizia dagli hash di ciascuna transazione individuale, utilizzando il doppio SHA-256.
Ogni hash di transazione viene quindi accoppiato con un altro, e la coppia viene sottoposta a hash insieme per produrre un nuovo hash. Questo processo di accoppiamento e hashing continua strato dopo strato fino a quando rimane un solo hash. L'hash finale è la radice di Merkle, che racchiude l'intero insieme di transazioni e ne garantisce l'integrità codificandole in un unico valore. Questa struttura gerarchica è nota come albero di Merkle.
Il seguente esempio illustra come si forma un albero di Merkle:
Come si può vedere, il nostro blocco contiene 6 transazioni (ciascuna etichettata come Tx) e tramite hashing e accoppiamento di nuovi hash viene calcolata una radice di Merkle.
Ogni volta che l'hash più a destra non ha una coppia, come nel caso di Hash56 nel nostro esempio, questo ultimo hash viene duplicato per creare una coppia. Questa tecnica mantiene l'integrità e l'efficienza della struttura dell'albero di Merkle anche con un numero dispari di transazioni o hash in determinati momenti.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 6.25
Panoramica dell'Hashing
Scorri per mostrare il menu
L'hashing e gli hash dei blocchi sono stati menzionati più volte, ma il concetto stesso non è ancora stato esaminato in dettaglio. È ora il momento di comprendere cosa sia effettivamente l'hashing.
Hashing è un processo che prende un input e produce una stringa di byte a dimensione fissa, tipicamente espressa come numero esadecimale. L'output, noto come hash, appare casuale e cambia completamente con qualsiasi modifica dell'input, una proprietà nota come "effetto valanga".
Proprietà delle funzioni hash
Nella blockchain, le funzioni hash vengono utilizzate per:
- Proteggere le transazioni creando un'impronta digitale unica per ciascuna;
- Generare indirizzi dalle chiavi pubbliche;
- Creare i collegamenti nella blockchain tramite gli hash dei blocchi.
Tenendo presente ciò, una buona funzione hash per la blockchain presenta diverse proprietà fondamentali:
L'hashing, soprattutto utilizzando una buona funzione di hash, può essere paragonato alla preparazione di un frullato. Osserviamo la seguente illustrazione:
In realtà, è possibile trovare l'input originale dato un hash, tuttavia, richiederebbe troppo tempo per essere effettivamente pratico.
Hashing dei blocchi
Per ottenere l'hash di un determinato blocco, Bitcoin utilizza la funzione di hash SHA-256, che restituisce un hash di 256 bit (32 byte). Fa parte della famiglia SHA-2 progettata dalla National Security Agency (NSA) ed è nota per le sue forti proprietà di sicurezza, che la rendono resistente alle collisioni, agli attacchi di preimmagine e ad altre vulnerabilità crittografiche.
L'hash di un blocco Bitcoin viene calcolato prendendo i dati dell'intestazione del blocco. Questi dati vengono inseriti nella funzione di hash SHA-256 due volte in un processo noto come double SHA-256.
Ecco un'immagine per chiarire il concetto:
L'hash risultante a 256 bit deve soddisfare determinati criteri definiti dall'obiettivo di difficoltà della rete. Se l'hash non è inferiore all'obiettivo, il nonce viene modificato e l'hash viene ricalcolato fino a quando non si trova un hash idoneo. Questo hash finale è l'identificatore univoco del blocco.
Radice di Merkle
La radice di Merkle è un singolo hash che rappresenta tutte le transazioni incluse in un blocco. Il suo calcolo inizia dagli hash di ciascuna transazione individuale, utilizzando il doppio SHA-256.
Ogni hash di transazione viene quindi accoppiato con un altro, e la coppia viene sottoposta a hash insieme per produrre un nuovo hash. Questo processo di accoppiamento e hashing continua strato dopo strato fino a quando rimane un solo hash. L'hash finale è la radice di Merkle, che racchiude l'intero insieme di transazioni e ne garantisce l'integrità codificandole in un unico valore. Questa struttura gerarchica è nota come albero di Merkle.
Il seguente esempio illustra come si forma un albero di Merkle:
Come si può vedere, il nostro blocco contiene 6 transazioni (ciascuna etichettata come Tx) e tramite hashing e accoppiamento di nuovi hash viene calcolata una radice di Merkle.
Ogni volta che l'hash più a destra non ha una coppia, come nel caso di Hash56 nel nostro esempio, questo ultimo hash viene duplicato per creare una coppia. Questa tecnica mantiene l'integrità e l'efficienza della struttura dell'albero di Merkle anche con un numero dispari di transazioni o hash in determinati momenti.
Grazie per i tuoi commenti!