Suppongo che tu "usi sha1sum
" nel seguente contesto: distribuisci alcuni pacchetti software e vuoi che gli utenti siano in grado di controllare che il loro download sia il pacchetto corretto, fino all'ultimo bit. Ciò presuppone che tu abbia un modo per trasmettere il valore hash (calcolato con SHA-1) in un modo "inalterabile" (ad esempio come parte di una pagina Web che viene pubblicata su HTTPS).
Suppongo anche che stiamo parlando di attacchi qui, cioè di un individuo malintenzionato che può in qualche modo alterare il pacchetto mentre viene scaricato, e vorrebbe inserire alcune modifiche che non verranno rilevate.
La proprietà di sicurezza che la funzione di hash utilizzata dovrebbe offrire qui è la resistenza alle seconde preimmagini . Ancora più importante, questo è non uguale alla resistenza alle collisioni. Una collisione avviene quando l'utente malintenzionato può creare due messaggi distinti m e m ' che ha hash sullo stesso valore; un secondo preimage è quando l'attaccante riceve un m fisso e sfidato a trovare un distinto m ' che hash allo stesso valore.
Le seconde pre-immagini sono molto più difficili da ottenere rispetto alle collisioni. Per una funzione di hash "perfetta" con bit di n di output, lo sforzo computazionale per trovare una collisione è di circa 2 invocazioni n / 2 del funzione di hash; per un secondo preimage, questo è 2 n . Inoltre, le debolezze strutturali che consentono un attacco di collisione più veloce non si applicano necessariamente a un attacco di seconda preimage. Questo è vero, in particolare, per le note debolezze di SHA-1: al momento (settembre 2015), ci sono alcune note debolezze teoriche di SHA-1 che dovrebbero consentire il calcolo di una collisione in meno del 2 ideale 80 sforzo (questo è ancora uno sforzo enorme, circa 2 61 , quindi non è stato ancora dimostrato); ma queste debolezze sono percorsi differenziali che intrinsecamente richiedono che l'attaccante realizzi sia m sia m ', quindi non ripercorrono le seconde preimmaginazioni.
Per il momento, non c'è nessun attacco di secondo-preimage noto su SHA-1 che sia teoricamente o accademicamente più veloce dell'attacco generico, con un costo di 2 160 che va ben oltre la tecnologia fattibilità, da un tiro lungo .
Bottom-line: nel contesto di ciò che stai cercando di fare, SHA-1 è sicuro, e probabilmente rimarrà al sicuro per qualche tempo (anche MD5 sarebbe ancora appropriato).
Un altro motivo per utilizzare sha1sum
è la disponibilità di strumenti lato client: in particolare, lo strumento di hashing della riga di comando fornito da Microsoft per Windows (chiamato FCIV ) conosce MD5 e SHA-1, ma non SHA-256 (almeno così dice la documentazione) (*).
Windows 7 e versioni successive contengono anche uno strumento da riga di comando chiamato "certutil" in grado di calcolare gli hash SHA-256 con il sottocomando "-hashfile". Questo non è molto noto, ma a volte può essere conveniente.
Detto questo, un potente motivo contro usando SHA-1 è quello di image : attualmente è molto di moda fare il tifo e prendere in giro qualsiasi utilizzo di SHA-1; le folle chiedono la rimozione, l'anatema, l'arresto e l'esecuzione pubblica. Usando SHA-1 stai dicendo al mondo che sei, sicuramente, non un hipster. Dal punto di vista del business, raramente fa bene a non cedere alla moda du jour , quindi dovresti usare una delle funzioni SHA-2, ad es. SHA-256 o SHA-512.
Non c'è una strong ragione per preferire SHA-256 su SHA-512 o viceversa; alcune piccole architetture solo a 32 bit sono più comode con SHA-256, ma questo raramente conta nella pratica (anche un'implementazione a 32 bit di SHA-512 sarà ancora in grado di eseguire hash diverse dozzine di megabyte di dati al secondo su un anemico laptop, e anche in modalità a 32 bit, una CPU x86 non troppo vecchia ha alcune capacità di calcolo a 64 bit con SSE2, che danno una buona spinta per SHA-512). Qualsiasi esperto di marketing ti direbbe di usare SHA-512 sulla base del fatto che 512 è maggiore di 256, quindi "deve essere migliore" in qualche (magico) modo.