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}