SHA-256 e le funzioni hash: guida pratica per sviluppatori

SHA-256 è un algoritmo di hashing crittografico. Scopri come funziona, le differenze con MD5, le proprietà fondamentali e i casi d'uso principali.

Cos'è una funzione hash crittografica

Una funzione hash crittografica è un algoritmo che trasforma un input di lunghezza arbitraria in un output di lunghezza fissa (il digest o hash). Deve soddisfare tre proprietà fondamentali: determinismo (stesso input → sempre stesso output), efficienza (calcolo veloce) e resistenza all'inversione (impossibile risalire all'input dall'output).

SHA-256: le caratteristiche

SHA-256 (Secure Hash Algorithm 256) fa parte della famiglia SHA-2 progettata dalla NSA e standardizzata dal NIST nel 2001. Produce un digest di 256 bit (64 caratteri esadecimali). È computazionalmente infeasible trovare due input diversi con lo stesso hash (resistenza alle collisioni), rendendo SHA-256 adatto per applicazioni di sicurezza.

Esempio: SHA-256 di "hello" = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (sempre lo stesso, indipendentemente dal sistema).

SHA-256 vs MD5 vs SHA-1

  • MD5 (128 bit): veloce ma collisioni note dal 2004; non usare per sicurezza
  • SHA-1 (160 bit): collisioni pratiche dimostrate nel 2017 (SHAttered attack); deprecato
  • SHA-256 (256 bit): nessuna collisione pratica nota; standard attuale per la sicurezza
  • SHA-3 (256/384/512 bit): famiglia alternativa basata su Keccak; backup se SHA-2 fosse compromesso

Casi d'uso principali

  • Verifica integrità file: il hash del file scaricato deve corrispondere a quello pubblicato
  • Blockchain: ogni blocco contiene il hash del blocco precedente, creando una catena immutabile
  • Firma digitale: il documento viene hashato e poi il hash viene firmato con la chiave privata
  • Derivazione chiavi: PBKDF2, bcrypt, Argon2 usano hash ripetuti per rallentare gli attacchi bruteforce
  • HMAC: Message Authentication Code per verificare autenticità e integrità dei messaggi API

Hash per le password: non usare SHA-256 diretto

SHA-256 è troppo veloce per hashare le password: un attaccante con GPU moderna può provare miliardi di hash al secondo (brute force / rainbow table). Per le password usa sempre algoritmi lenti e con salt: bcrypt (work factor ≥ 12), Argon2id o scrypt. Questi sono progettati specificamente per rendere il brute force economicamente non conveniente.