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
# 5f4dcc3b5aa765d61d8327deb882cf99La 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 userbcrypt: 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 + hashAltri 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... # bcryptVerifica 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.