
Collisioni di hash e sfruttamenti
Di Ange Albertini e Marc Stevens.
D: È possibile fare in modo che un file ottenga un MD2/MD4/MD5/MD6/SHA1/SHA2/SHA3 arbitrario, o lo stesso hash di un altro file?
R: No.
D: Si possono creare 2 file diversi con lo stesso hash?
R: Con MD5, in pochi secondi su un computer standard. Con SHA1, è possibile ma non pratico per gli utenti finali (Complessità: 2^61.2 Prezzo: $11k).
D: Si può fare in modo che 2 file diversi ottengano lo stesso hash aggiungendo dati?
R: Con MD5, in poche ore su un computer standard. Con SHA1, è possibile ma non pratico per gli utenti finali (Complessità: 2^63.4 Prezzo: $45K)
D: I 2 file rimarranno validi?
R: In generale, sì, poiché la maggior parte dei formati di file tollera dati aggiunti. D'altra parte, le firme dei file saranno probabilmente rotte.
D: Si possono creare 2 file diversi con contenuti arbitrari e lo stesso hash?
R: Sì, può essere immediato facendo affidamento su strutture di file speciali:
D: Per quali formati posso ottenere una coppia di file con collisione MD5 istantanea?
R: JPG, PNG, GIF, GZIP, Portable Executable, MP4, JPEG2000, PDF, DOCX/PPTX/XSLX, EPUB, 3MF, XPS. Basta eseguire lo script specifico.
D: E per SHA1?
R: Per SHA1, JPG in un PDF è calcolato e implementato.
D: E i formati già supportati per MD5 (JPG, PNG...), ma per SHA1?
R: È molto probabile che siano supportati anche con SHA1, ma le loro collisioni non sono state calcolate.
D: I calcoli sono più veloci per contenuti simili (ma diversi)?
R: No. Qualsiasi minima differenza richiede un calcolo completo.
D: Quali formati non hanno questa scorciatoia?
R: ELF, Mach-O, Java Class, TAR, ZIP (tra gli altri...)
D: Le collisioni classiche (in poche ore) sono ancora possibili con questi formati?
R: Sì, purché venga tollerata qualsiasi quantità di dati aggiunti (cioè probabilmente non ZIP o Class).
D: Fornite esempi di collisioni?
R: Sì.
L'obiettivo è esplorare a fondo gli attacchi esistenti - e mostrare lungo il percorso quanto sia debole MD5 (collisioni istantanee di qualsiasi JPG, PNG, PDF, MP4, PE...) - e anche esplorare in dettaglio i formati di file comuni per determinare come possono essere sfruttati con attacchi presenti o futuri.
In effetti, lo stesso trucco del formato di file può essere usato su più hash (gli stessi trucchi JPG sono stati usati per MD5, malicious SHA-1 e SHA1), purché le collisioni seguano gli stessi pattern di byte.
Questo documento non riguarda nuovi attacchi (il più recente è stato documentato nel 2012), ma nuove forme di sfruttamento degli attacchi esistenti.
Stato attuale degli attacchi noti:
ottenere che un file abbia l'hash di un altro file o un hash dato: impossibile
ottenere due file diversi con lo stesso MD5: istantaneo
far ottenere a due file arbitrari lo stesso MD5: poche ore (72 ore.core)
far ottenere a due file arbitrari di formati di file specifici (PNG, JPG, PE...) lo stesso MD5: istantaneo
ottenere due file diversi con lo stesso SHA1: 6500 anni.core
(*) esempio con crypt - grazie Sven!```
import crypt crypt.crypt("5dUD&66", "br") 'brokenOz4KxMc' crypt.crypt("O!>',%$", "br") 'brokenOz4KxMc'
# Attacchi
MD5 e SHA1 lavorano con blocchi di 64 byte.