Condividi questo articolo

Funzioni hash Bitcoin spiegate

Tutto quello che hai sempre voluto sapere sull'hashing Bitcoin , ma non hai mai osato chiedere.

Chiunque abbia un interesse per Bitcoin avrà sentito la frase "funzione hash crittografica" prima o poi. Ma cosa significa esattamente e come è collegata alla Criptovaluta?

Le funzioni hash sono una parte essenziale non solo del protocollo Bitcoin , ma della sicurezza informatica nel suo complesso.

La storia continua sotto
Non perderti un'altra storia.Iscriviti alla Newsletter Crypto for Advisors oggi. Vedi Tutte le Newsletter

Nel seguente articolo esamineremo alcuni semplici esempi del loro funzionamento, corredati anche da una semplice dimostrazione.

Cos'è una funzione hash?

In astratto, una funzione hash è un processo matematico che accetta dati di input di qualsiasi dimensione, esegue un'operazione su di essi e restituisce dati di output di una dimensione fissa.

In un esempio più concreto, questo può essere utilizzato per prendere una sequenza di lettere diQualunquelunghezza come input – ciò che chiamiamo uncorda– e restituire una sequenza di lettere di afissolunghezza. Che la stringa di input sia una singola lettera, una parola, una frase o un intero romanzo, l'output, chiamatodigerire– avrà sempre la stessa lunghezza.

Un uso comune di questo tipo di funzione hash è la memorizzazione delle password.

Quando crei un account utente con un qualsiasi servizio web che richiede una password, la password viene eseguita tramite una funzione hash e il digest hash del messaggio viene memorizzato. Quando digiti la tua password per effettuare l'accesso, la stessa funzione hash viene eseguita sulla parola che hai inserito e il server controlla se il risultato corrisponde al digest memorizzato.

Ciò significa che se un hacker riesce ad accedere al database contenente gli hash memorizzati, non sarà in grado di compromettere immediatamente tutti gli account utente perché non esiste un modo semplice per trovare la password che ha prodotto un determinato hash.

Semplici funzioni hash in Python

Puoi sperimentare con i valori hash usando Python, un linguaggio di programmazione installato di default sui sistemi operativi Mac e Linux. (Questo tutorial darà per scontato che tu stia usando una versione di OS X o Linux, poiché usare Python su Windows èpiù complicato)

Per prima cosa, apri un terminale, digitapitonee premi INVIO.

Questo ti porterà nel Python REPL, un ambiente in cui puoi provare i comandi Python direttamente anziché scrivere un programma in un file separato.

Quindi, digitare quanto segue, premendo INVIO dopo ogni riga e TAB dove indicato:

importa hashlibdef hash(mystring):[TAB] hash_object = hashlib.md5(mystring.encode())[TAB] stampa(hash_object.hexdigest())[INVIO]

Ora hai creato una funzione,hash(), che calcolerà e stamperà il valore hash per una data stringa usando l'algoritmo di hashing MD5. Per eseguirlo, inserisci una stringa tra parentesi tra virgolette, ad esempio:

hash("CoinDesk è fantastico")

Quindi premere INVIO per visualizzare l'hash digest di quella stringa.

Noterai che chiamare la funzione hash sulla stessa stringa genererà sempre lo stesso hash, ma aggiungendo o modificando ONE carattere genererà un valore hash completamente diverso:

hash("CoinDesk è fantastico") => 7ae26e64679abd1e66cfe1e9b93a9e85hash("CoinDesk è fantastico!") => 6b1f6fde5ae60b2fe1bfe50677434c88

Funzioni hash in Bitcoin

Nel protocollo Bitcoin , le funzioni hash fanno parte del algoritmo di hashing a blocchiche viene utilizzato per scrivere nuove transazioni nella blockchain tramite il processo di mining.

Nel mining Bitcoin , gli input per la funzione sono tutte le transazioni più recenti e non ancora confermate (insieme ad alcuni input aggiuntivi relativi al timestamp e a un riferimento al blocco precedente).

Nell'esempio di codice sopra, abbiamo già visto che la modifica di una piccola parte dell'input per una funzione hash produce un output completamente diverso. Questa proprietà è fondamentale per l'algoritmo di "prova del lavoro" coinvolto nel mining: per "risolvere" con successo un blocco, i miner cercano di combinare tutti gli input con i propripezzo arbitrario di dati di inputin modo tale che l'hash risultante inizi con un certo numero di zeri.

Come dimostrazione di base, potremmo provare a fare "mining" con la nostra funzione hash Python aggiungendo manualmente punti esclamativi dopo "CoinDesk rocks!" finché non troviamo un hash che inizia con un singolo zero.

>>> hash("CoinDesk è fantastico!!")66925f1da83c54354da73d81e013974d>>> hash("CoinDesk è fantastico!!!")c8de96b4cf781a6373766c668ceac0f0>>> hash("CoinDesk è fantastico!!!!")9ea367cea6a2cc4a6f5a1d9a334d0d9e>>> hash("CoinDesk è fantastico!!!!!")b8d43387d98f035e2f0ac49740a5af38>>> hash("CoinDesk è fantastico!!!!!!")0fe46518541f4739613b9ce29ecea6b6 => RISOLTO!

Naturalmente, risolvere l'hash per un blocco Bitcoin , che al momento della scritturadeve iniziare con 18 zeri – richiede unestremamentegrande quantità di calcolo (pertanto la potenza di elaborazione combinata di tutti i computer della rete impiega comunque circa 10 minuti per risolvere un blocco).

È la necessità di questa grande potenza di elaborazione a far sì che i nuovi bitcoin vengano estratti in un lungo periodo di tempo e non tutti in una volta.

Per guadagnare bitcoin tramite il mining, è necessario impegnarsi molto per risolvere un blocco. Ottenere questa ricompensa significa bloccare tutte le nuove transazioni in un blocco, che viene aggiunto alla registrazione permanente di tutte le transazioni precedenti: la blockchain.

Ci sono altre nozioni fondamentali Cripto che vorresti fossero spiegate? Email: CoinDesk.

Bitcoin sulla tastiera immaginetramite Shutterstock

Corin Faife

Corin Faife è un collaboratore CoinDesk e ha trattato l'impatto sociale e politico delle tecnologie emergenti per VICE, Motherboard e l'Independent. Corin non è un investitore in valute digitali o progetti blockchain (Vedi: Politiche editoriale). Seguici Corin: testo corinzio

Picture of CoinDesk author Corin Faife