Mi è stato detto, se volevo creare firme virali da file infetti da utilizzare per il rilevamento in futuro, dovrei fare attenzione perché alcuni di essi sono soggetti a attacchi di collisione?
Mi è stato detto, se volevo creare firme virali da file infetti da utilizzare per il rilevamento in futuro, dovrei fare attenzione perché alcuni di essi sono soggetti a attacchi di collisione?
Una collisione per una funzione di hash crittografica h è una coppia di elementi di dati (due sequenze di bit) m e m ', che sono distinti l'uno dall'altro, ma hash allo stesso valore ( m ≠ m' ma h ( m ) = h ( m ')). Poiché una funzione di hash accetta come sequenze di input di bit che possono essere molto più lunghe della dimensione di uscita fissa, il numero di ingressi possibili per una funzione hash supera il numero di uscite possibili; pertanto, è una certezza matematica che esistono le collisioni per qualsiasi funzione di hash. Una funzione di hash crittograficamente sicura è tale che in realtà trovare una collisione è impossibile da computare (sappiamo che esistono collisioni, ma non vogliamo che le persone siano in grado di trovarle).
Un attacco di collisione è un attacco che sfrutta le debolezze strutturali di una specifica funzione di hash per produrre collisioni. Funziona solo per la funzione di hash per la quale è noto un punto debole, ovvero funzioni che, per definizione, sono state dimostrate non crittograficamente sicure.
Che attacco di collisione consentirebbe a un utente malintenzionato, nel tuo caso, non è chiaro. Il tuo "database dei virus" previsto memorizza i valori di hash calcolati su sequenze di byte che sono stati considerati "dannosi" e dovrebbero essere sparati a vista; si desidera memorizzare i valori hash e non le sequenze dannose per lo più per rendere le ricerche più efficienti e mantenere bassi i costi di archiviazione. Se l'utente malintenzionato dispone l'hash di due virus sullo stesso valore, significa che l'inclusione nel database del valore hash (comune) causerebbe l'interdizione del virus entrambi in una volta, che è circa l'opposto di ciò che l'attaccante vorrebbe: l'attaccante vuole che il suo virus non venga individuato, non essere individuato in modo ancora più efficiente.
Gli attacchi di collisione sarebbero un grosso problema nel caso di un database di non virus. Se si crea un database di eseguibili "sane", l'utente malintenzionato tenterebbe di creare una collisione tra un eseguibile innocuo m e alcuni malware m ; quindi invia m per la verifica, in modo che h ( m ) venga aggiunto all'elenco di "file innocui verificati". Poiché l'attaccante ha sistemato le cose in modo che h ( m ) = h ( m '), quella collisione significherebbe che m ' (il virus) sarebbe stato dichiarato sano di mente.
Sebbene non sia chiaro cosa si possa ottenere (per l'attaccante) dalle collisioni di hash in un database di virus, è comunque meglio usare una funzione di hash crittograficamente protetta, per ogni evenienza. L'esempio principale di una funzione hash non -secure è MD5: le collisioni possono essere prodotte in modo molto efficiente per questa funzione. La situazione di SHA-1 è meno chiara: nessuna collisione è stata ancora esibita, ma è stato descritto un attacco teorico, che dovrebbe provocare collisioni con uno sforzo computazionale che è enorme (2 61 valutazioni del funzione) ma ancora sostanzialmente inferiore agli sforzi che sarebbero necessari per una funzione di hash "perfetta" con la stessa dimensione di uscita (2 80 ).
La solita raccomandazione per una funzione di hash sicura è SHA-256 o, più in generale, qualsiasi funzione di Famiglia SHA-2 (SHA-256 è uno dei sei membri attualmente di quella famiglia).