Quando sentiamo parlare di sicurezza informatica incontriamo spesso parole come crittografia, hash, checksum o sigle apparentemente misteriose come SHA-256.
Il nome può sembrare complicato, ma l’idea che c’è dietro è molto più semplice di quanto sembri.
SHA-256 è un algoritmo che permette di prendere un’informazione digitale — una parola, una password, un documento, una fotografia o persino un intero programma — e trasformarla in una sorta di impronta digitale.
Questa impronta viene chiamata hash.
La cosa interessante è che, indipendentemente dalla dimensione del contenuto originale, SHA-256 produce sempre un risultato della stessa lunghezza: 256 bit, che normalmente vengono rappresentati come una sequenza di 64 caratteri esadecimali.
Per esempio, potremmo avere qualcosa del genere:
b133a0c0e9bee3be20163d2ad31d6248db292aa6dcb1ee087a2aa50e0fc75ae2
A prima vista sembra soltanto una lunga sequenza incomprensibile di lettere e numeri. In realtà contiene una caratteristica molto importante: identifica, con altissima probabilità, esattamente i dati da cui è stata generata.
Da dove viene il nome SHA-256?
SHA significa Secure Hash Algorithm, cioè “algoritmo sicuro di hash”.
SHA-256 appartiene alla famiglia di algoritmi chiamata SHA-2 ed è stato progettato per produrre hash di 256 bit.
È importante chiarire subito una cosa: SHA-256 non cifra i dati nel senso tradizionale del termine.
Quando cifriamo un messaggio, normalmente esiste un procedimento che permette, possedendo la chiave corretta, di recuperare il contenuto originale.
Con un hash il funzionamento è diverso.
SHA-256 prende un contenuto e genera la sua impronta, ma non è progettato per permettere di compiere il percorso inverso.
Possiamo quindi pensarlo come una macchina:
dato originale → SHA-256 → impronta digitale
ma non come:
impronta digitale → dato originale
Questa caratteristica prende il nome di funzione a senso unico.
Un esempio semplicissimo
Proviamo con una parola molto breve:
ciao
Applicando SHA-256 alla parola “ciao”, scritta esattamente in questo modo e codificata in UTF-8, otteniamo:
b133a0c0e9bee3be20163d2ad31d6248db292aa6dcb1ee087a2aa50e0fc75ae2
Ora cambiamo una sola lettera e scriviamo:
Ciao
con la C maiuscola.
L’hash diventa:
25c73520e69f4bf229811e8e46ffe7d80471544b9bee15ed25044b86be4115ad
I due testi sono quasi identici per noi: è cambiata soltanto una lettera maiuscola.
Per SHA-256, invece, il risultato è completamente diverso.
Ed è proprio questo uno degli aspetti più interessanti delle funzioni hash: anche una modifica piccolissima nei dati originali provoca un cambiamento molto grande nel risultato finale.
Questo comportamento viene spesso chiamato effetto valanga.
Una lettera diversa, uno spazio aggiunto, un carattere cancellato o persino una modifica quasi invisibile all’interno di un file producono un hash differente.
SHA-256 non “riassume” il contenuto
A questo punto potrebbe nascere un equivoco.
Se SHA-256 trasforma un file enorme in soli 256 bit, significa che dentro quell’hash sono contenute tutte le informazioni del file?
No.
L’hash non è una compressione e non contiene una versione ridotta del documento originale.
È piuttosto un’identificazione matematica del contenuto.
Immaginiamo un libro di mille pagine.
SHA-256 potrebbe generare la sua impronta digitale. Se cambiamo una sola parola alla pagina 537 e calcoliamo nuovamente l’hash, otterremo un valore completamente diverso.
Non potremo però utilizzare l’hash per ricostruire le mille pagine del libro.
È un po’ come osservare un’impronta digitale umana: può aiutarci a verificare l’identità di una persona, ma dall’impronta non possiamo ricostruire la persona stessa.
Un secondo esempio: verificare che un file non sia stato modificato
Uno degli utilizzi più pratici di SHA-256 riguarda la verifica dell’integrità dei file.
Immaginiamo di scaricare da Internet un programma chiamato:
programma.zip
Il produttore potrebbe pubblicare sul proprio sito anche il valore SHA-256 ufficiale del file, per esempio:
A7F9...
La sequenza reale sarebbe naturalmente molto più lunga.
Dopo aver scaricato il file possiamo chiedere al nostro computer di calcolare il suo SHA-256.
A questo punto confrontiamo i due valori.
Se l’hash del file scaricato è identico all’hash pubblicato dal produttore, possiamo avere un’elevata sicurezza che il file ricevuto sia esattamente quello previsto e che non sia stato modificato accidentalmente durante il trasferimento.
Se invece anche un solo bit del file fosse diverso, l’hash risultante cambierebbe.
Il controllo potrebbe quindi essere rappresentato così:
Hash pubblicato dal produttore
ABC123...
Hash calcolato sul nostro file
ABC123...
I valori coincidono: il contenuto è lo stesso.
Se invece ottenessimo:
87DF45...
sapremmo che qualcosa è cambiato.
Questo non significa automaticamente che il file contenga un virus: potrebbe essere una versione differente, un download corrotto oppure un file modificato. Significa però che non è esattamente lo stesso file identificato dall’hash originale.
Naturalmente questo controllo è davvero affidabile solo se anche l’hash di riferimento proviene da una fonte autentica e affidabile.
Perché l’hash ha sempre la stessa lunghezza?
Una delle caratteristiche curiose di SHA-256 è proprio questa.
Possiamo inserire:
“ciao”
oppure un documento di 500 pagine,
oppure un video di diversi gigabyte.
Il risultato sarà sempre un hash di 256 bit.
Quando lo visualizziamo in forma esadecimale vediamo normalmente 64 caratteri perché ogni cifra esadecimale rappresenta 4 bit:
256 ÷ 4 = 64
Ecco spiegata quella lunga sequenza di 64 caratteri formata dai numeri da 0 a 9 e dalle lettere dalla A alla F.
Due file diversi possono avere lo stesso hash?
Dal punto di vista matematico sì.
Il numero dei possibili dati che possiamo elaborare è praticamente illimitato, mentre il numero dei possibili risultati SHA-256, pur essendo enorme, è finito.
Quando due contenuti differenti producono lo stesso hash si parla di collisione.
Con SHA-256 esistono teoricamente collisioni, ma trovarne deliberatamente una è considerato computazionalmente impraticabile con le tecnologie attuali.
I possibili hash SHA-256 sono infatti:
2²⁵⁶
un numero gigantesco, circa 10⁷⁷.
Per avere un’idea delle dimensioni, stiamo parlando di una quantità talmente grande che, nelle applicazioni normali, possiamo considerare estremamente improbabile che due file differenti generino casualmente la stessa impronta.
Dove viene utilizzato SHA-256?
Le funzioni hash sono presenti in moltissimi settori dell’informatica.
SHA-256 può essere utilizzato per controllare l’integrità dei file, verificare dati digitali, creare firme digitali e certificati, identificare informazioni all’interno di diversi sistemi informatici e partecipare ai meccanismi utilizzati da alcune blockchain, come Bitcoin.
Qui è importante fare una precisazione.
Dire che SHA-256 viene utilizzato in alcuni sistemi di gestione delle password non significa che sia una buona idea salvare semplicemente una password usando SHA-256 puro.
Le password richiedono tecniche specifiche, come salt e algoritmi progettati appositamente per rallentare i tentativi di attacco, come Argon2, scrypt, bcrypt o PBKDF2.
SHA-256 è estremamente veloce, caratteristica utilissima in molti contesti ma non ideale quando vogliamo rendere costoso provare milioni o miliardi di password.
Hash e crittografia non sono la stessa cosa
È facile confondere i due concetti.
La cifratura serve generalmente a nascondere un’informazione permettendo successivamente a chi possiede la chiave corretta di recuperarla.
L’hash, invece, viene utilizzato soprattutto per creare un’impronta dei dati.
Possiamo semplificare così:
Cifratura
messaggio → cifratura → messaggio illeggibile → decifratura → messaggio originale
Hash
messaggio → SHA-256 → impronta
Il secondo percorso non prevede una normale operazione di “de-hash” che permetta di ritornare al messaggio iniziale.
Ma allora perché online esistono siti che “decifrano” gli hash?
Questa è una domanda molto interessante.
In alcuni siti possiamo inserire un hash e apparentemente ottenere la parola da cui deriva.
Il sito, però, normalmente non ha invertito matematicamente SHA-256.
Ha semplicemente confrontato quell’hash con enormi database di valori già calcolati.
Per esempio qualcuno potrebbe aver precedentemente calcolato:
password123 → ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f
Se un database contiene già questa associazione, quando inseriamo lo stesso hash il sito può rispondere:
“Questo valore corrisponde a password123.”
Non ha decifrato SHA-256.
Ha riconosciuto un risultato già conosciuto.
È una differenza fondamentale.
Una piccola macchina per creare impronte digitali
Possiamo quindi immaginare SHA-256 come una macchina molto particolare.
Inseriamo un’informazione.
La macchina la elabora.
Dall’altra parte esce una sequenza di 256 bit che funziona come impronta digitale del contenuto.
Se cambiamo qualcosa nell’originale, anche pochissimo, l’impronta cambia completamente.
Ed è proprio questa combinazione di caratteristiche — risultato di dimensione fissa, sensibilità alle modifiche, difficoltà nel risalire al contenuto originale e bassissima probabilità pratica di collisione — che rende SHA-256 così utile nell’informatica moderna.
Dietro quella fila apparentemente incomprensibile di lettere e numeri non c’è quindi un messaggio segreto da decifrare.
C’è qualcosa di diverso e, per certi versi, ancora più interessante:
l’impronta matematica di un dato digitale.
Piccolo vocabolario SHA-256
Le immagini e i testi presenti sono il risultato di una cooperazione consapevole tra intelligenza umana e artificiale.
Seguimi anche sul canale WhatsApp per non perderti nessuna novità!

Commenti
Posta un commento