2010-10-26 12 views
9

Qual è la funzione di hash più adatta per il controllo dell'integrità dei file (checksum) per rilevare la corruzione?Un'adatta funzione di hash per rilevare la corruzione dei dati/verificare l'integrità dei dati?

Ho bisogno di prendere in considerazione quanto segue:

Ampia gamma di dimensioni del file (1 kb a 10 GB +)
Un sacco di diversi tipi di file
grande collezione di file (+/- 100 TB e in crescita)

I file più grandi richiedono dimensioni di digest più elevate (SHA-1 vs SHA 512)?

Vedo che la famiglia SHA è denominata funzione di hash crittografica. Sono inadatti per uso "generico" come il rilevamento della corruzione dei file? Qualcosa come MD5 o Tiger sarà migliore?

Se la manomissione dannosa è anche un problema, la risposta cambierà con la funzione hash più adatta?

Le librerie esterne non sono un'opzione, ma solo quelle disponibili su Win XP SP3 +.

Naturalmente anche le prestazioni sono motivo di preoccupazione.

(Si prega di scusare la mia terminologia se è errata, la mia conoscenza su questo argomento è molto limitata).

risposta

15

Qualsiasi funzione di hash crittografica, anche una rotta, va bene per rilevare la corruzione accidentale. Una determinata funzione hash può essere definita solo per gli input fino a un certo limite, ma per tutte le funzioni standard di hash tale limite è almeno 2 bit, vale a dire circa 2 milioni di terabyte. È abbastanza grande.

Il tipo di file non ha alcuna incidenza. Le funzioni di hash operano su sequenze di bit (o byte) indipendentemente da ciò che rappresentano questi bit.

È improbabile che le prestazioni della funzione hash rappresentino un problema. Anche le funzioni di hash "lente" (ad es. SHA-256) funzioneranno più velocemente su un PC tipico rispetto al disco rigido: la lettura del file sarà il collo di bottiglia, non l'hashing (un PC a 2,4 GHz può eseguire hash con SHA-512 a una velocità vicino a 200 MB/s, utilizzando un singolo core). Se le prestazioni della funzione hash sono un problema, allora la tua CPU è molto debole, oi tuoi dischi sono SSD veloci (e se hai 100 TB di SSD veloci, allora sono un po 'geloso). In tal caso, alcune funzioni hash sono leggermente più veloci delle altre, MD5 è una delle funzioni "veloci" (ma MD4 è più veloce, ed è abbastanza semplice che il suo codice possa essere incluso in qualsiasi applicazione senza troppi problemi).

Se la manomissione dannosa è un problema, questo diventa un problema di sicurezza, e questo è più complesso. Innanzitutto, ti piacerebbe utilizzare una delle funzioni di hash crittograficamente ininterrotta, quindi SHA-256 o SHA-512, non MD4, MD5 o SHA-1 (le debolezze riscontrate in MD4, MD5 e SHA-1 potrebbero non essere applicabili a uno specifico situazione, ma questa è una questione delicata ed è meglio giocare sicuri). Quindi, l'hashing può o non può essere sufficiente, a seconda che l'attaccante abbia accesso ai risultati dell'hash. È possibile che sia necessario utilizzare uno MAC, che può essere visualizzato come una sorta di hash con chiave. HMAC è un modo standard per costruire un MAC con una funzione hash. Esistono altri MAC non basati su hash. Inoltre, un MAC utilizza una chiave "simmetrica" ​​segreta, che non è appropriata se si desidera che alcune persone siano in grado di verificare l'integrità del file senza essere in grado di eseguire modifiche silenziose; in tal caso, dovresti ricorrere alle firme digitali. Per essere brevi, in un contesto di sicurezza, è necessaria un'analisi approfondita della sicurezza con un modello di attacco chiaramente definito.

+0

Ottima risposta! Grazie mille. – links77

Problemi correlati