logo RankiaItalia

SHA-256: cos’è, come funziona e perché protegge Bitcoin

SHA-256 è la funzione di hash della famiglia SHA-2 che produce un’impronta di 256 bit, cioè 64 caratteri esadecimali. È deterministica, irreversibile e sensibile a ogni minima variazione dell’input: per questo regge la blockchain di Bitcoin e i certificati TLS.
Moneta Bitcoin su sfondo digitale con codice binario.

Indice

SHA-256 è una funzione di hash crittografica che trasforma un messaggio di lunghezza inferiore a 264 bit in un'impronta di 256 bit, normalmente rappresentata con 64 caratteri esadecimali. Fa parte della famiglia SHA-2, sviluppata dalla NSA su richiesta del NIST e standardizzata nella versione definitiva di FIPS 180-2 nell'agosto 2002. Quello standard includeva ancora SHA-1: SHA-256 non lo sostituì immediatamente, ma offrì un digest più lungo e una maggiore resistenza alle collisioni.

Il suo comportamento si riassume in tre proprietà: è deterministica sugli stessi byte di input, è resistente alla preimmagine — non esiste un metodo pratico noto per ricavare un input da un hash arbitrario — ed è sensibile, perché una minima variazione dell'input cambia il digest in modo imprevedibile. Sono queste caratteristiche a renderla una delle funzioni hash usate nelle firme digitali, in molti certificati TLS e nel protocollo Bitcoin. SHA-256 non firma né cifra i dati da sola: viene combinata con altri algoritmi.

Dal funzionamento di Bitcoin al suo acquisto
Su eToro puoi comprare Bitcoin senza leva, conservarlo sulla piattaforma e trasferire gli asset idonei al wallet. Controlla nel ticket che l'operazione riguardi l'asset sottostante: le posizioni short o con leva sono CFD.

Cos'è una funzione hash e cosa fa SHA-256

Una funzione hash è un algoritmo matematico che trasforma un blocco di dati di qualsiasi dimensione in una stringa di lunghezza fissa. Che l'input sia una singola lettera o un file da dieci gigabyte, l'output di SHA-256 avrà sempre 256 bit.

La sigla sta per Secure Hash Algorithm 256-bit. L'output viene rappresentato in esadecimale, ed è per questo che si vede sempre come una stringa di 64 caratteri: ogni carattere esadecimale codifica 4 bit, e 64 × 4 fa esattamente 256.

Un esempio rende immediata la proprietà più importante. L'hash della parola ciao è:
Cambiando una sola lettera, Ciao con la maiuscola, il risultato non ha nulla in comune con il precedente:

È il cosiddetto effetto valanga: hash di input simili appaiono statisticamente scorrelati. Questo non significa che l'hash non riveli mai nulla: se lo spazio dei possibili input è piccolo, un attaccante può provare ipotesi e confrontarne il digest.

In sintesi: SHA256 cos'è

SHA-256 è un algoritmo che trasforma dati in un digest fisso di 256 bit, progettato per rendere computazionalmente impraticabili la ricerca di una preimmagine e di collisioni. È un pilastro della sicurezza informatica moderna e uno dei componenti crittografici centrali della rete Bitcoin.

Come funziona SHA-256 passo per passo

L'algoritmo sembra complesso ma si articola in quattro fasi ben definite, identiche per qualsiasi input.

Preparazione: padding e blocchi

Il messaggio viene prima convertito in binario. Poi si aggiunge il padding: un bit 1, seguito da tanti zeri quanti ne servono perché la lunghezza sia congruente a 448 modulo 512. Gli ultimi 64 bit sono riservati alla lunghezza originale del messaggio, espressa in binario.

Il risultato è un messaggio la cui lunghezza totale è sempre un multiplo esatto di 512 bit. Questo permette di dividerlo in blocchi di dimensione costante, che l'algoritmo elabora uno alla volta.

La precisazione «448 modulo 512» non è un dettaglio pedante: per un messaggio più lungo di 448 bit il padding non porta a 448, ma al primo valore congruente successivo. È quello che consente all'algoritmo di gestire file di qualsiasi dimensione.

Schema del funzionamento di SHA-256
Schema del processo di hashing SHA-256

spansione del messaggio

Ogni blocco di 512 bit viene diviso in sedici parole da 32 bit. Da queste l'algoritmo ricava un programma di messaggio di 64 parole, usando rotazioni, shift, XOR e somme modulo 232. Questa fase prepara un valore distinto per ciascuno dei 64 round.

I 64 round di calcolo

Ogni blocco da 512 bit attraversa 64 round di elaborazione. In ciascun round i dati vengono combinati con operazioni logiche — XOR, AND, rotazioni di bit — e somme modulo 2³², insieme a una costante K diversa per ogni round, definita dallo standard.

Durante i 64 passaggi l'algoritmo aggiorna otto variabili di stato (indicate con le lettere da A a H), inizializzate con valori derivati dalle radici quadrate dei primi otto numeri primi. Alla fine del blocco, il risultato viene sommato allo stato precedente.

Questo concatenamento è ciò che genera l'effetto valanga: il risultato di ogni blocco dipende da tutti quelli che lo precedono, quindi un solo bit modificato all'inizio si propaga in modo imprevedibile fino all'hash finale.

Output

Al termine dell'elaborazione di tutti i blocchi, le otto parole di stato da 32 bit vengono concatenate: 8 × 32 bit fanno 256 bit, il digest definitivo. Questa stringa può funzionare come impronta del contenuto, ma non è una firma digitale: per autenticare l'autore serve un algoritmo di firma e una chiave privata.

Le quattro proprietà che contano

ProprietàCosa significa
Lunghezza fissaL'output è sempre di 256 bit, qualunque sia la dimensione dell'input
DeterminismoLa stessa sequenza di byte produce sempre lo stesso hash; codifica, spazi e ritorni a capo fanno parte dell'input.
Resistenza alla preimmagineDato un messaggio, è impraticabile trovarne un altro con lo stesso hash.
Resistenza alle collisioniNon esiste un metodo pratico per trovare due input con lo stesso hash

Sulle collisioni serve una precisazione che quasi tutte le guide sbagliano: le collisioni esistono necessariamente. Gli input possibili sono infiniti e gli output sono 2²⁵⁶, quindi per il principio dei cassetti due input diversi devono per forza condividere un hash, da qualche parte.

Quello che rende SHA-256 sicuro non è l'assenza di collisioni ma la difficoltà di trovarle: un attacco generico basato sul paradosso del compleanno richiede un ordine di grandezza di 2128 valutazioni. Dire che le collisioni sono «matematicamente impossibili» è scorretto; dire che non esiste oggi un attacco pratico pubblicato contro SHA-256 completo è la formulazione giusta.

Perché Bitcoin usa SHA-256

Bitcoin impiega SHA-256 in due funzioni distinte, ed è utile tenerle separate perché rispondono a due problemi diversi.

Il concatenamento dei blocchi

L'intestazione di ogni blocco contiene il doppio hash dell'intestazione del blocco precedente, la radice di Merkle che riassume le transazioni, il timestamp, il target codificato, la versione e un nonce. Le transazioni non sono inserite direttamente nell'intestazione.

La conseguenza è quella che rende il registro resistente alle modifiche: cambiando una transazione in un blocco vecchio, cambierebbero la sua radice di Merkle e l'hash dell'intestazione. Per costruire una catena alternativa valida bisognerebbe rifare il proof-of-work di quel blocco e dei successivi e poi superare la catena con più lavoro accumulato. La manomissione non verrebbe semplicemente accettata dagli altri nodi.

Il proof-of-work

La seconda funzione è il mining. I miner cercano un nonce tale che l'hash del blocco risulti inferiore a un valore obiettivo stabilito dalla rete — in pratica, che cominci con un certo numero di zeri.

Poiché SHA-256 è imprevedibile, l'unico modo per trovarlo è provare miliardi di combinazioni al secondo. Il lavoro computazionale speso è la «prova» che dà nome al meccanismo: riscrivere la storia della blockchain richiederebbe di rifare tutto quel lavoro, superando al contempo la potenza di calcolo del resto della rete.

Il primo miner che trova un hash valido pubblica il blocco e incassa la ricompensa. È così che nascono nuovi bitcoin e, simultaneamente, si mantiene la sicurezza del sistema. Se il tema ti interessa, la guida sulla tecnologia blockchain inquadra il funzionamento complessivo.

Altre criptovalute basate su SHA-256

Bitcoin non è l'unica blockchain a usare questo algoritmo. Lo condividono i progetti nati da fork del suo codice — Bitcoin Cash e Bitcoin SV su tutti — oltre a catene storiche come Peercoin e Namecoin.

La conseguenza pratica è che gli ASIC progettati per SHA-256d possono essere indirizzati verso reti compatibili, anche se redditività, difficoltà e regole di ciascuna catena cambiano. Ethereum, invece, dal 2022 usa proof-of-stake e adotta Keccak-256 come hash principale nell'EVM. Non è però corretto dire che «non usa SHA-256»: la EVM espone anche una precompilata SHA-256 per applicazioni specifiche.

Le altre applicazioni di SHA-256

L'uso in Bitcoin è il più noto ma non il più diffuso: SHA-256 lavora dietro le quinte in gran parte dell'infrastruttura digitale quotidiana.

  • Verifica dell'integrità dei file. Molti software open source pubblicano l'hash SHA-256 delle release. Calcolando l'hash del file scaricato e confrontandolo, si verifica che non sia stato alterato o corrotto durante il trasferimento.
  • Certificati TLS. L'hash del contenuto del certificato viene firmato con la chiave privata dell'autorità emittente; il browser lo verifica con la chiave pubblica, autenticando così l'identità del sito.
  • Firme digitali. Firmare l'hash di un documento invece del documento intero rende l'operazione rapida e di dimensione costante, senza perdere la garanzia sull'integrità del contenuto.
  • Controllo di versione. I sistemi che identificano i contenuti tramite hash usano funzioni di questa famiglia per rilevare qualsiasi modifica.

Una precisazione importante riguarda le password: SHA-256 da solo non è adatto a memorizzarle. È progettato per essere veloce, e la velocità è esattamente ciò che favorisce un attacco a forza bruta. Per le password si usano funzioni deliberatamente lente e dotate di salt, come bcrypt, scrypt o Argon2.

SHA-256 contro SHA-1 e le altre funzioni hash

Il confronto con il predecessore chiarisce perché lo standard è cambiato.

FunzioneLunghezza dell'hashStato
MD5128 bitObsoleta per usi crittografici basati sulla resistenza alle collisioni.
SHA-1160 bitInsicura per usi crittografici
SHA-256256 bitStandard ancora approvato dal NIST per le applicazioni di hash.
SHA-3Variabile (224-512 bit)Standard alternativo, struttura interna diversa

SHA-1 è stato dichiarato compromesso nel febbraio 2017, quando i ricercatori di Google e del CWI di Amsterdam pubblicarono SHAttered, la prima collisione pratica: due file PDF diversi con lo stesso hash SHA-1. Il NIST ne aveva già sconsigliato l'uso anni prima.

SHA-3 merita un chiarimento perché viene spesso frainteso. Non è un aggiornamento obbligatorio né un rimpiazzo diretto di SHA-256: il NIST lo ha standardizzato nel 2015 come famiglia complementare basata su una costruzione interna diversa. A parità di lunghezza del digest, le due famiglie offrono livelli generici comparabili per preimmagini e collisioni, ma SHA-3 possiede proprietà strutturali differenti, tra cui la resistenza nativa agli attacchi di length extension.

SHA-256 e il calcolo quantistico

Il computer quantistico è la minaccia più citata e la meno compresa. Vale la pena separare quello che cambia da quello che non cambia.

Per la ricerca di una preimmagine la minaccia generica rilevante è l'algoritmo di Grover, che offre un'accelerazione quadratica nel modello ideale. Applicato a SHA-256, ridurrebbe la complessità teorica da circa 2256 a 2128 valutazioni quantistiche. Questo ragionamento riguarda la preimmagine; la resistenza quantistica alle collisioni segue limiti diversi e non va riassunta come un semplice «dimezzamento».

La vera esposizione di Bitcoin al quantistico riguarda soprattutto le firme digitali a curva ellittica usate per autorizzare le transazioni: ECDSA e le firme Schnorr di Taproot usano entrambe secp256k1 e sarebbero vulnerabili a un computer quantistico crittograficamente rilevante capace di eseguire l'algoritmo di Shor. Anche il mining potrebbe essere influenzato da Grover, ma non con la rottura istantanea spesso raccontata.

Da qui discende un chiarimento importante: SHA-3 non è, da sola, un algoritmo di firma post-quantistico. È una famiglia di funzioni hash. La migrazione post-quantistica riguarda soprattutto firme e meccanismi di accordo o incapsulamento di chiavi; esistono anche firme post-quantistiche basate su hash, ma una funzione hash non è automaticamente uno schema di firma.

Come calcolare un hash SHA-256

Per sperimentare basta poco. Su Linux e macOS il comando sha256sum nomefile (o shasum -a 256) restituisce l'hash di un file; su Windows si usa certutil -hashfile nomefile SHA256. In Python bastano due righe con il modulo hashlib.

Esistono anche molti generatori online, utili per capire l'effetto valanga. Con un'avvertenza: non inserire dati riservati a meno che lo strumento sia verificabilmente eseguito in locale nel browser; in caso contrario l'input potrebbe essere trasmesso o registrato da terzi.

Un ultimo chiarimento sui cosiddetti decoder SHA-256: non esiste un decoder capace di ricostruire univocamente l'originale, perché input diversi possono condividere lo stesso digest. I servizi che promettono di «decifrare» un hash provano dizionari o consultano archivi di corrispondenze già calcolate; possono trovare un input comune, non invertire matematicamente SHA-256.

In sintesi, SHA-256 è una funzione che comprime qualsiasi dato in 256 bit in modo deterministico e irreversibile, e la sua solidità non deriva dall'assenza di collisioni ma dal costo computazionale di trovarle. Su questa asimmetria poggiano la blockchain di Bitcoin, i certificati TLS e la verifica dei file che usiamo ogni giorno.

Non risultano vulnerabilità pratiche a più di vent'anni dalla pubblicazione, e nemmeno il calcolo quantistico ne comprometterebbe l'utilizzo. Chi vuole seguirne l'evoluzione dovrebbe guardare non tanto a SHA-256 quanto alle firme digitali, che sono l'anello davvero esposto ai progressi della computazione quantistica.

Domande frequenti su SHA-256