Cryptology Academy · Lezione

Attacchi del compleanno e delle collisioni

Applichi il paradosso del compleanno alle collisioni degli hash e all'estensione della lunghezza degli hash.

Lezione 3 di 413 passaggi

Attacchi del compleanno e delle collisioni è una lezione Cryptology Academy 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 Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.

Il paradosso del compleanno

In un gruppo di 23 persone, la probabilità che due abbiano lo stesso compleanno supera il 50%. Con 70 persone supera il 99,9%. Matematicamente, in un insieme di dimensione N, la probabilità di collisione supera il 50% dopo circa √N campioni. Questo è il birthday bound.

Birthday bound per le funzioni hash

Per una funzione hash di n bit, una collisione (H(m1) = H(m2), m1 ≠ m2) può essere trovata con circa 2^{n/2} tentativi casuali. Per SHA-256, a 256 bit, trovare una collisione richiede circa 2^{128} operazioni, una quantità computazionalmente impraticabile. Per MD5, a 128 bit, ne servono circa 2^{64}, una quantità al limite della fattibilità.

Algoritmo per gli attacchi di collisione

Ricerca generica delle collisioni: si generano 2^{n/2} messaggi casuali, se ne calcolano gli hash, si ordinano in base al valore hash e si cercano i duplicati. La memoria richiesta è O(2^{n/2}). L'algoritmo Rho, basato sulla ricerca dei cicli di Floyd, riduce la memoria a O(1) mantenendo lo stesso costo temporale. La ricerca parallela delle collisioni di van Oorschot-Wiener riduce il tempo utilizzando hardware.

Collisioni MD5

Wang e colleghi hanno trovato collisioni pratiche per MD5 nel 2004 utilizzando la crittanalisi differenziale, non l'attacco del compleanno. Due messaggi diversi di 1024 bit con hash MD5 identici possono essere generati in pochi secondi. Hertzbleed e le collisioni con prefisso scelto consentono collisioni tra certificati. MD5 è completamente compromesso per quanto riguarda la resistenza alle collisioni.

Collisioni con prefisso scelto

È un attacco più potente: dati due prefissi arbitrari P1 e P2, si cercano suffissi S1 e S2 tali che H(P1||S1) = H(P2||S2). Stevens e colleghi (2017) hanno trovato collisioni MD5 con prefisso scelto. La tecnica è stata utilizzata per creare un certificato CA dannoso con una firma MD5 valida. Ha portato al ritiro di MD5 dall'uso nei certificati.

Collisioni SHA-1

SHAttered di Google (2017) è stata la prima collisione pratica per SHA-1. Due file PDF diversi con lo stesso hash SHA-1. Sono state necessarie 2^{63.1} compressioni SHA-1, equivalenti a 6.500 anni di calcolo su CPU e 110 anni su GPU. Il costo è stato di circa 110.000 dollari. Nel 2017 i browser hanno deprecato i certificati SHA-1.

Attacchi di estensione della lunghezza

Per le funzioni hash Merkle-Damgård (MD5, SHA-1, SHA-2): se si conosce H(m), è possibile calcolare H(m||padding||m') senza conoscere m. Questo compromette costruzioni MAC come H(secret||message). Soluzione: usare HMAC (che utilizza un padding interno e uno esterno) oppure SHA-3 (costruzione a spugna, immune all'estensione della lunghezza).

Resistenza alle collisioni e resistenza alla preimmagine

Resistenza alle collisioni: trovare due messaggi distinti qualsiasi con lo stesso hash (2^{n/2} di lavoro). Resistenza alla seconda preimmagine: dato m, trovare m' ≠ m con lo stesso hash (2^n di lavoro). Resistenza alla preimmagine: trovare un messaggio qualsiasi per un determinato hash (2^n di lavoro). La resistenza alle collisioni è sempre la più debole.

Attacchi alle collisioni dei MAC

Se il MAC utilizza una funzione hash vulnerabile alle collisioni, un attaccante in grado di trovare collisioni in H può falsificare i MAC. HMAC-MD5 è considerato sicuro nonostante le collisioni di MD5, perché la costruzione HMAC richiede attacchi di preimmagine, non soltanto collisioni. Tuttavia, per i nuovi sistemi è consigliabile abbandonare HMAC-MD5.

Multicollisioni

Joux (2004): per le funzioni hash Merkle-Damgård, trovare collisioni tra 2^k messaggi (2^k messaggi con lo stesso hash) richiede soltanto k volte il lavoro necessario per trovare una singola collisione, non k volte tanto. Questo amplifica le vulnerabilità negli hash concatenati (H1(m)||H2(m) non è così sicuro come si potrebbe pensare).

Come evitare le collisioni

Usare SHA-256 o SHA-3 per l'hashing resistente alle collisioni. Evitare MD5 e SHA-1 per qualsiasi finalità di sicurezza. Per i MAC: HMAC-SHA-256 o HMAC-SHA-3. Per l'hashing delle password: Argon2 (non SHA-2 direttamente). Usare sempre SHA-3 quando è necessaria la resistenza all'estensione della lunghezza.

Verifica rapida

Approssimativamente, quante valutazioni dell'hash sono necessarie per trovare una collisione in una funzione hash di n bit?

Riepilogo

Un attacco del compleanno trova collisioni hash con 2^{n/2} di lavoro. MD5 presenta collisioni pratiche a prefisso scelto; SHA-1 è stato violato nel 2017. Gli attacchi di estensione della lunghezza compromettono i MAC ingenui H(key||msg). Usare SHA-256 o SHA-3 e HMAC per l'autenticazione dei messaggi. Prossimo argomento: gli attacchi meet-in-the-middle.

Gratis per iniziare

Impara Cryptology Academy con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
67
Lezioni
261

Domande Frequenti

La lezione «Attacchi del compleanno e delle collisioni» è gratuita?

Sì — il testo completo di «Attacchi del compleanno e delle collisioni» è 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 Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.

Cosa imparerò in «Attacchi del compleanno e delle collisioni»?

Applichi il paradosso del compleanno alle collisioni degli hash e all'estensione della lunghezza degli hash. Eserciti Cryptology 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 Cryptology Academy?

Non è richiesta alcuna esperienza precedente. Cryptology 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 3 di 4.

Quanto tempo richiede la lezione «Attacchi del compleanno e delle collisioni»?

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 Cryptology Academy?

Sì. Ogni lezione Cryptology 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. Fondamenti della crittoanalisi differenziale
  2. Crittoanalisi lineare e tabelle di approssimazione
  3. Attacchi del compleanno e delle collisioni
  4. Meet-in-the-Middle e compromessi tempo-memoria
← Torna a Cryptology Academy