Introduzione

Le funzioni di hash permettono di ottenere una sequenza di bit tramite l’utilizzo di funzioni matematiche in base ai dati in ingresso; la loro caratteristica fondamentale Γ¨ che a partire dal loro output Γ¨ impossibile risalire agli input.

Ne ho giΓ  parlato nell’articolo sul funzionamento dei Bitcoin: lo SHA256 Γ¨ la base dell’algoritmo di consenso PoW.

Esistono numerose funzioni di hash, i fattori per cui scegliere uno rispetto all’altro sono principalmente 3:

  • VelocitΓ : maggiore Γ¨ la velocitΓ  maggiori saranno le performance del sistema;
  • Lunghezza: minore Γ¨ la lunghezza dell’hash minore Γ¨ lo spazio su disco richiesto per salvarlo;
  • Sicurezza: deve essere impossibile risalire alla sequenza di input originaria e inoltre deve essere estremamente difficile avere collisioni, quel problema per cui due sequenze diverse producono la stessa uscita.

I tre algoritmi di hashing piΓΉ utilizzati sono MD5, SHA1 e SHA256. Il primo produce un output a 16 byte, il secondo 20 byte e il terzo 32 byte.

Ovviamente la probabilitΓ  di avere collisioni diminuisce con l’aumentare dei byte dell’hash prodotto, ma anche la velocitΓ  ne risente.

La vulnerabilitΓ  di MD5

Nel Marzo 2005 in questo articolo Xiaoyun Wang e Hongbo Yu sono riusciti a rompere l’algoritmo MD5, quindi riuscendo a trovare un algoritmo che permettesse di trovare due sequenze di 128 bytes che forniscono lo stesso hash MD5.

Questo algoritmo puΓ² essere usato per creare quindi file diversi che perΓ² condividono lo stesso hash MD5 e questo puΓ² portare a diverse vulnerabilitΓ  (tipicamente l’hash MD5 viene utilizzato per controllare che un file non sia stato contraffatto da una persona terza malevola).

Per approfondire i collisioni attack consiglio la lettura di questa pagina di Wikipedia; in questa pagina invece trovate altre informazioni e risorse.

PicoCTF - It is my Birthday

Qualche anno fa PicoCTF ha proposto un problema che si basava proprio sul problema delle collisioni di MD5: l’obiettivo Γ¨ inserire nella pagina http://mercury.picoctf.net:11590/ due pdf di diverso contenuto con lo stesso hash MD5.

Conoscendo tale vulnerabilitΓ  il gioco Γ¨ stato semplice, basta scaricare due file con lo stesso MD5 (hello.exe e erase.exe o message1.bin e message2.bin), rinominare l’estensione in .pdf e caricarli nell’interfaccia.

Se tutto Γ¨ stato svolto correttamente comparirΓ  il codice sorgente del server con la chiave aggiunta come commento.

// FLAG: picoCTF{c0ngr4ts_u_r_1nv1t3d_3d3e4c57}