0Pricing
Ethical Hacking Academy · Lezione

Hashing

MD5, SHA, bcrypt

Hashing è una lezione Ethical Hacking Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Ethical Hacking Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ethical Hacking Academy include 4 lezioni in totale.

Che cos'è un hash?

Una funzione hash prende in input dati di qualsiasi dimensione e produce un output di dimensione fissa chiamato digest. Lo stesso input produce sempre lo stesso digest.

È fondamentale comprendere che l'hashing è un'operazione a senso unico. Non è possibile invertire matematicamente un digest per ottenere l'input originale. È questo che distingue gli hash sia dalla codifica sia dalla crittografia.

Proprietà di un buon hash

Una funzione hash crittografica dovrebbe essere:

  • Deterministica: lo stesso input produce lo stesso output.
  • Veloce da calcolare (per l'hashing generico), ma idealmente lenta per l'hashing delle password.
  • Resistente alla preimmagine: dato un digest, non è possibile trovare l'input.
  • Resistente alle collisioni: è difficile trovare due input con lo stesso digest.
  • Dotata di effetto valanga: la modifica di un bit cambia circa metà dei bit dell'output.

MD5

MD5 produce un digest di 128 bit (32 caratteri esadecimali). È veloce e storicamente comune, ma è crittograficamente compromesso: esistono attacchi pratici alle collisioni.

Non utilizzi mai MD5 per la sicurezza. Lo incontrerà ancora nei checksum dei file e nei sistemi legacy, il che lo rende un bersaglio frequente durante gli assessment.

echo -n 'password' | md5sum
# 5f4dcc3b5aa765d61d8327deb882cf99

La famiglia SHA

La famiglia SHA (Secure Hash Algorithm) è più robusta:

  • SHA-1: 160 bit. Ora è considerata compromessa (attacco alle collisioni 'SHADOW HAMMER' / SHAttered). Da evitare.
  • SHA-2: include SHA-256 e SHA-512. È ampiamente utilizzata e attualmente sicura.
  • SHA-3: un design più recente basato su Keccak, un'alternativa a SHA-2.
echo -n 'password' | sha256sum
# 5e884898da28047151d0e56f8dc629...

L'hashing non è crittografia

La crittografia è reversibile con una chiave. L'hashing non è affatto reversibile. È proprio per questo che l'hashing viene usato per memorizzare le password: al server non serve mai quella originale.

Quando effettua l'accesso, il server calcola l'hash di ciò che ha digitato e lo confronta con l'hash memorizzato. Se corrispondono, l'autenticazione ha esito positivo. La password in chiaro non viene mai memorizzata.

Il problema: le rainbow table

Poiché l'hashing è deterministico, il digest di 'password' è lo stesso per ogni utente. Gli aggressori precalcolano enormi tabelle di ricerca che associano digest e testo in chiaro, chiamate rainbow table.

Se due utenti condividono la stessa password, i loro hash memorizzati sono identici, rivelando questo fatto. Gli hash veloci e semplici come MD5 o SHA-256, usati da soli, non sono adatti per le password.

Il salting

Un salt è un valore casuale univoco aggiunto a ogni password prima dell'hashing. Questo significa che:

  • password identiche producono hash diversi.
  • le rainbow table precalcolate diventano inutili.

Il salt viene memorizzato insieme all'hash; non è segreto. Il suo scopo è rendere ogni hash univoco, costringendo gli aggressori a craccarli singolarmente.

stored = salt + hash(salt + password)
# salt is random and unique per user

bcrypt: progettato per le password

bcrypt è progettato specificamente per la memorizzazione delle password. È intenzionalmente lento e include un fattore di costo (work factor) configurabile, che lo rende più lento con il miglioramento dell'hardware.

Un hash bcrypt incorpora algoritmo, costo e salt in un'unica stringa. La lentezza è una caratteristica: limita la velocità con cui gli aggressori possono tentare le password.

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
# $2b$ = bcrypt, 12 = cost factor, then salt + hash

Altri hash lenti

Oltre a bcrypt, le moderne opzioni per l'hashing delle password includono:

  • scrypt: richiede molta memoria e resiste agli attacchi tramite GPU e ASIC.
  • Argon2: vincitore della Password Hashing Competition, configurabile in termini di tempo e memoria. È la scelta moderna consigliata.
  • PBKDF2: applica un hash veloce per molte migliaia di iterazioni; è accettabile, ma più debole dei precedenti.

HMAC e integrità

Gli hash vengono usati anche per l'integrità, non solo per le password. Un HMAC (Hash-based Message Authentication Code) combina un hash con una chiave segreta per verificare sia l'integrità sia l'autenticità di un messaggio.

I checksum dei file (spesso SHA-256) consentono di verificare che un download non sia stato manomesso. In qualità di hacker, checksum diversi possono rivelare file modificati o dannosi.

Gli hash nel mondo reale

In qualità di hacker, incontrerà continuamente degli hash:

  • /etc/shadow su Linux memorizza gli hash delle password con salt, preceduti da prefissi come $6$ (SHA-512) o $2b$ (bcrypt).
  • Windows memorizza gli hash NTLM nel database SAM.
  • Le applicazioni web memorizzano le password sottoposte ad hashing nelle tabelle degli utenti.

Riconoscere il prefisso indica immediatamente l'algoritmo e la strategia di cracking da adottare.

$6$rounds=5000$salt$hash   # SHA-512 crypt
$2b$12$saltandhash...      # bcrypt

Verifica rapida

Scelga l'opzione più sicura per memorizzare le password degli utenti.

Riepilogo

Ora comprende il funzionamento dell'hashing:

  • L'hashing è una trasformazione a senso unico, di dimensione fissa e deterministica, diversa da codifica e cifratura.
  • MD5 e SHA-1 sono compromessi; usi SHA-256 per l'integrità generale.
  • Per le password utilizzi algoritmi lenti e con salt: bcrypt, scrypt o Argon2.
  • I salt neutralizzano le rainbow table; HMAC aggiunge l'integrità basata su una chiave.

Successivamente esplorerà la cifratura simmetrica e asimmetrica con AES e RSA.

Domande Frequenti

La lezione «Hashing» è gratuita?

Sì — il testo completo di «Hashing» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Ethical Hacking Academy, passa a CoddyKit PRO. Il corso Ethical Hacking Academy include 4 lezioni in totale.

Cosa imparerò in «Hashing»?

MD5, SHA, bcrypt Eserciti Ethical Hacking Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Ethical Hacking Academy?

Non è richiesta alcuna esperienza precedente. Ethical Hacking Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Hashing»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Ethical Hacking Academy?

Sì. Ogni lezione Ethical Hacking Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Codifica e cifratura a confronto
  2. Hashing
  3. Crittografia simmetrica e asimmetrica
  4. Cracking degli hash
← Torna a Ethical Hacking Academy