0Pricing
Cloud & IT Cert Prep · Lezione

Hashing e integrità dei dati

Impari come SHA-256, MD5 e HMAC producano digest di lunghezza fissa per verificare che i dati non siano stati alterati durante il transito o l’archiviazione.

Hashing e integrità dei dati è una lezione Cloud & IT Cert Prep gratuita su CoddyKit. Questa è la lezione 3 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 Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.

Che cos'è una funzione di hash?

Una funzione di hash crittografica è un algoritmo matematico che accetta un input di qualsiasi dimensione e produce un output di lunghezza fissa chiamato hash, digest o impronta. Le funzioni di hash sono unidirezionali: dato un hash, dovrebbe essere computazionalmente impraticabile determinare l'input originale. Sono deterministiche: lo stesso input produce sempre lo stesso hash. Le funzioni di hash sono alla base della verifica dell'integrità dei dati, delle firme digitali, della memorizzazione delle password e di molti altri meccanismi di sicurezza.

Proprietà delle funzioni di hash sicure

Una funzione di hash crittografica sicura deve possedere quattro proprietà fondamentali. Resistenza alla preimmagine: dato un output hash, è computazionalmente impraticabile trovare un input che lo produca. Resistenza alla seconda preimmagine: dato un input, è impraticabile trovare un input diverso con lo stesso hash. Resistenza alle collisioni: è impraticabile trovare due input diversi che producano lo stesso output hash. Effetto valanga: la modifica anche di un solo bit dell'input causa un output hash completamente diverso, rendendo rilevabili le manomissioni.

# Avalanche effect demonstration
echo -n 'Hello' | sha256sum
# 185f8db32...  (completely different when one char changes)
echo -n 'Hello!' | sha256sum
# 334d016f7...  (entirely different hash)

# Same input ALWAYS produces same hash (deterministic)
echo -n 'Security+' | sha256sum
echo -n 'Security+' | sha256sum
# Both outputs are identical

MD5: compromesso e deprecato

MD5 (Message Digest 5) produce un hash di 128 bit ed è stato ampiamente utilizzato in passato. Tuttavia, nel 2004 i ricercatori hanno dimostrato l'esistenza di attacchi alle collisioni contro MD5, ovvero la possibilità di trovare due input diversi che producono lo stesso hash. Questo è catastrofico per la verifica dell'integrità: un attaccante potrebbe sostituire un file originale con un file dannoso avente lo stesso hash MD5. MD5 è completamente compromesso per la sicurezza crittografica e non deve essere utilizzato per la verifica dell'integrità, le firme digitali o l'hashing delle password. Talvolta è ancora utilizzato per checksum non legati alla sicurezza (verifica di file legacy), il che è accettabile esclusivamente per rilevare danneggiamenti accidentali.

Famiglia SHA: SHA-1, SHA-256, SHA-3

La famiglia Secure Hash Algorithm (SHA) è l'insieme più importante di funzioni di hash per Security+. SHA-1 (160 bit) è stato lo standard per anni, ma nel 2017 è stato compromesso da un attacco pratico alle collisioni (il progetto SHAttered di Google) ed è ora deprecato. SHA-256 (parte della famiglia SHA-2, con output di 256 bit) è l'attuale standard del settore per le firme digitali, i certificati TLS e la verifica dell'integrità dei file. SHA-3 (Keccak) è l'algoritmo alternativo di NIST e offre resistenza agli attacchi che prendono di mira la struttura di SHA-2, sebbene SHA-256 rimanga la scelta predominante per la maggior parte delle applicazioni.

# Common hash computations
echo -n 'password123' | sha256sum
# a665a4592...64 hex chars = 256 bits

echo -n 'password123' | sha512sum  
# b109f3bb...128 hex chars = 512 bits (SHA-512)

# File integrity check
sha256sum /path/to/downloaded_file.iso > file.sha256
sha256sum -c file.sha256
# file.iso: OK

Funzioni di hash per la memorizzazione delle password

Memorizzare le password in chiaro non è mai accettabile. Quando un utente crea una password, nel database viene memorizzato un hash invece della password stessa. Quando l'utente accede, la password inserita viene sottoposta a hashing e confrontata con l'hash memorizzato. Tuttavia, SHA-256 standard è troppo veloce per la memorizzazione delle password: gli attaccanti usano GPU per testare miliardi di hash al secondo contro database di password rubati. Le funzioni di hashing delle password progettate appositamente, come bcrypt, PBKDF2 e Argon2, aggiungono un costo computazionale (fattori di lavoro) e requisiti di memoria che rendono impraticabile il cracking su larga scala.

# bcrypt hash example (Python-style pseudocode)
import bcrypt
password = b'mySecretPassword'
# Hash with work factor of 12 (2^12 = 4096 iterations)
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Stored in DB: $2b$12$H0qS/LkPkAiH8KlxJb3lFuK...

# Verify (never compare raw hashes for bcrypt)
bcrypt.checkpw(password, hashed)  # Returns True

Salt: contrastare le rainbow table

Una rainbow table è una tabella di ricerca precalcolata che associa le password comuni ai relativi hash, consentendo a un attaccante di cercare istantaneamente un hash e trovare la password originale. Per contrastare le rainbow table, gli hash delle password devono essere sottoposti a salt. Un salt è un valore casuale aggiunto alla password prima dell'hashing, che rende unico l'hash di ogni utente anche quando due utenti hanno la stessa password. Il salt viene memorizzato insieme all'hash e non deve essere segreto. Anche se un attaccante dispone dell'intero database delle password, le rainbow table precalcolate sono inutili perché per ogni hash è stato utilizzato un salt diverso.

# Salt demonstration
# Without salt: same password = same hash (rainbow table attack works)
# SHA256('password123') = always the same hash

# With salt: same password + random salt = unique hash
# SHA256('password123' + 'aBc8xZ') = unique hash for this user
# SHA256('password123' + 'mK2pYq') = completely different hash

# The salt is stored in the database alongside the hashed value
# Format: $salt$hash or combined as in bcrypt output

HMAC: aggiungere l'autenticazione all'hashing

HMAC (Hash-based Message Authentication Code) è una costruzione che usa una funzione di hash con una chiave segreta per produrre un codice di autenticazione. A differenza di un semplice hash, un HMAC può essere calcolato e verificato solo dalle parti che conoscono la chiave segreta. In questo modo garantisce sia l'integrità (rilevando le modifiche) sia l'autenticazione (dimostrando che il messaggio proviene da qualcuno in possesso della chiave). HMAC-SHA256 è ampiamente utilizzato nell'autenticazione delle API (per firmare le richieste API), nei token JWT e nelle operazioni MAC di TLS. Impedisce a un attaccante che intercetta un messaggio di sostituirlo con un'alternativa appositamente elaborata.

# Compute HMAC-SHA256 with OpenSSL
openssl dgst -sha256 -hmac 'my-secret-api-key' -hex api_request.json
# Output: HMAC-SHA256(api_request.json)= 3d4e2f...

# Only someone with 'my-secret-api-key' can generate or verify this HMAC
# Used in AWS Signature V4 for API authentication
# Used in JWT HS256 algorithm for token integrity

Funzioni di hash nelle firme digitali

Le funzioni di hash svolgono un ruolo centrale nelle firme digitali. Quando si firma un documento di grandi dimensioni, non si cifra l'intero documento con la chiave privata, poiché sarebbe estremamente lento. Si procede invece in questo modo: (1) si calcola l'hash del documento (operazione rapida, che produce un digest piccolo e di lunghezza fissa), quindi (2) si firma il piccolo hash con la chiave privata. La firma è semplicemente un hash cifrato. La verifica segue lo stesso schema: si decifra la firma per ottenere l'hash, si calcola indipendentemente l'hash del documento e si confrontano i due valori. SHA-256 è obbligatorio in tutti i certificati PKI moderni; SHA-1 è vietato nei nuovi certificati.

Monitoraggio dell'integrità dei file (FIM)

File Integrity Monitoring (FIM) usa le funzioni di hash per rilevare modifiche non autorizzate ai file di sistema critici. Come riferimento iniziale, lo strumento FIM calcola l'hash di tutti i file monitorati e memorizza gli hash in modo sicuro. Periodicamente (o continuamente), calcola nuovamente l'hash dei file e lo confronta con il riferimento iniziale. Qualsiasi differenza indica che un file è stato modificato, potenzialmente da un malware o da un'azione non autorizzata di un amministratore. Strumenti FIM come Tripwire, AIDE (Linux) e il controllo dell'integrità integrato in Windows usano hash SHA-256. Il FIM è richiesto da framework di conformità come PCI-DSS per la protezione degli ambienti contenenti dati dei titolari di carte.

# AIDE (Advanced Intrusion Detection Environment) - Linux FIM
# Initialize baseline database
aide --init
# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

# Check for changes (run via cron daily)
aide --check
# Output shows any files that were added, changed, or deleted
# File: /etc/passwd changed
# MD5 : old_hash != new_hash

Checksum e hash crittografici a confronto

È importante distinguere i checksum dagli hash crittografici. I checksum come CRC32 sono progettati per rilevare il danneggiamento accidentale dei dati durante la trasmissione: sono veloci e semplici, ma possono essere facilmente falsificati da un attaccante. Gli hash crittografici (SHA-256) sono progettati per essere resistenti alle collisioni e per rendere rilevabili le manomissioni anche in caso di alterazioni intenzionali da parte di un attaccante. Usi i checksum quando deve solo verificare che un download non sia stato danneggiato durante il trasferimento; usi gli hash crittografici quando deve verificare che un file non sia stato manomesso intenzionalmente da un avversario.

Attacchi alle collisioni degli hash nella pratica

Gli attacchi alle collisioni degli hash hanno conseguenze concrete. Nel 2017, i ricercatori hanno creato due file PDF diversi con lo stesso hash SHA-1, dimostrando che i certificati SHA-1 potevano essere falsificati. Nel 2008, i ricercatori hanno sfruttato collisioni MD5 per creare un certificato CA falso che sembrava legittimo. È per questo che i browser rifiutano i certificati MD5 e SHA-1 e che le autorità di certificazione devono usare almeno SHA-256. Comprendere gli attacchi alle collisioni aiuta a spiegare le decisioni di deprecazione degli algoritmi e perché «ma produce comunque un hash» non è un argomento sufficiente per usare algoritmi compromessi.

Verifica rapida

Verifichi la Sua comprensione dei concetti di CompTIA Security+ (SY0-701) trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha appreso che: le funzioni di hash producono digest di lunghezza fissa per la verifica dell'integrità; MD5 e SHA-1 sono compromessi e deprecati; SHA-256 è l'attuale standard; il salt contrasta gli attacchi con rainbow table; infine, HMAC aggiunge l'autenticazione all'hashing usando una chiave segreta condivisa. Ora passeremo a Scambio di chiavi e crittografia ibrida.

Domande Frequenti

La lezione «Hashing e integrità dei dati» è gratuita?

Sì — il testo completo di «Hashing e integrità dei dati» è 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 Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.

Cosa imparerò in «Hashing e integrità dei dati»?

Impari come SHA-256, MD5 e HMAC producano digest di lunghezza fissa per verificare che i dati non siano stati alterati durante il transito o l’archiviazione. Eserciti Cloud & IT Cert Prep 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 Cloud & IT Cert Prep?

Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Hashing e integrità dei dati»?

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 Cloud & IT Cert Prep?

Sì. Ogni lezione Cloud & IT Cert Prep 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. Algoritmi di crittografia simmetrica
  2. Crittografia asimmetrica e coppie di chiavi
  3. Hashing e integrità dei dati
  4. Scambio di chiavi e crittografia ibrida
← Torna a Cloud & IT Cert Prep