2010-04-14 9 views
31

Non intendo per questo essere un dibattito, ma sto cercando di capire la logica tecnica dietro perché così tante app usano SHA1 per i segreti dell'hashing, quando SHA512 è più sicuro. Forse è semplicemente per la compatibilità all'indietro.Perché utilizzare SHA1 per i segreti di hashing quando SHA-512 è più sicuro?

Oltre alle ovvie dimensioni maggiori (128 caratteri contro 40), o lievi differenze di velocità, c'è qualche altro motivo per cui la gente usa il primo?

Inoltre, credo che SHA-1 sia stato prima incrinato da un elaboratore del videoregistratore anni fa. Qualcuno ha ancora rotto 512 (forse con un soffiatore di foglie), o è ancora sicuro da usare senza salatura?

+2

SHA-1 non è ancora rotto. – Joe

+12

non tutti gli usi di hash sono legati alla sicurezza – Javier

+0

@Joe sei sicuro? Di recente ho sentito di hacking di tutti i tipi di crittografia con tutto questo accadendo in Quantum Computing, che può rompere un sacco di algoritmi in pochi secondi. – Earlz

risposta

41

La maggior parte degli usi di SHA-1 sono per l'interoperabilità: utilizziamo SHA-1 quando implementiamo protocolli in cui è richiesto SHA-1. Anche la facilità di sviluppo viene presa in considerazione: le implementazioni SHA-1 in vari linguaggi e ambienti di programmazione sono più comuni delle implementazioni SHA-512.

Inoltre, anche la maggior parte degli usi di funzioni hash non hanno problemi di prestazioni (almeno, nessun problema di prestazioni in cui la funzione hash è il collo di bottiglia), ci sono alcune architetture in cui SHA-1 è molto più efficiente di SHA-512 . Considera un router Linksys di base: utilizza una CPU derivata da Mips, con clock a 200 MHz. Tale macchina può essere riprogrammata, ad es. con OpenWRT (un piccolo Linux per sistemi embedded). Come router, ha una rete veloce (100 Mbit/s). Supponete di voler hash alcuni dati (ad esempio come parte di alcuni software VPN - un router sembra un buon candidato per l'esecuzione di una VPN). Con SHA-1, otterrai circa 6 MB/s, utilizzando la CPU completa. Questo è già molto più basso della larghezza di banda della rete. SHA-512 non fornirà più di 1,5 MB/s sulla stessa macchina. Su un tale sistema, la differenza di prestazioni non è trascurabile. Inoltre, se utilizzo SHA-1 sul mio router Linksys per alcuni protocolli di comunicazione, la macchina all'altra estremità del collegamento dovrà utilizzare anche SHA-1.

La buona notizia è che è in corso una competizione per selezionare una nuova funzione di hash standard, nome in codice SHA-3. Alcuni dei candidati in competizione offrono prestazioni simili a SHA-1, o anche leggermente migliori, pur continuando a fornire un output a 512 bit e sono (probabilmente) sicuri quanto lo SHA-512.

+0

@Thomas grazie per l'ottima informazione. Sto semplicemente usando SHA512 per la protezione con password in una macchina privata in un colo, perché non voglio dati salati (per qualche motivo OCD) ma voglio che sia a prova di crack (almeno per un po '). La sicurezza è un problema, ma non vi è alcun rischio che i numeri delle carte di credito vengano persi, ecc. – orokusaki

+0

@Thomas Wow, è stato colpito dalla sua risposta, quindi ho controllato il tuo sito e il tuo CV. Dottorato in questa roba eh. Quindi, pensi che la mia password sia una cattiva idea? – orokusaki

+0

@orokusaki: per la protezione con password di una macchina privata in un colo, la crittografia è eccessiva. Se i potenziali aggressori sono davvero motivati, l'accesso fisico al sistema è tutto ciò di cui hanno bisogno (ad esempio per installare un dispositivo keylogger, quando si digita la password). Pertanto, puoi usare qualsiasi cosa ti faccia sentire "sicuro". –

23

Sia SHA1 che SHA512 sono funzioni hash. Se li stai usando come hash crittografico, forse questa è una buona ragione per usare SHA512; tuttavia, esistono applicazioni che utilizzano queste funzioni semplicemente per identificare gli oggetti. Ad esempio, Git usa SHA1 per distinguere a basso costo tra gli oggetti. In tal caso, poiché la possibilità di collisione tra due documenti è incredibilmente piccola con SHA1, non c'è davvero alcuna giustificazione per lo spazio aggiuntivo richiesto da SHA512 quando SHA1 è più che adatto per l'attività.

In termini di hash crittografici e la scelta di utilizzare o meno sale, potresti essere interessato a leggere Don't Hash Secrets. Anche con SHA512, usare un sale è una buona idea (ed è anche economico, perché non farlo?), Perché puoi indovinare le password migliori e vedere se hanno lo stesso hash, ma l'autore lo sottolinea HMAC è un meccanismo più sicuro. In ogni caso, dovrai determinare i costi associati al tempo + spazio aggiuntivo e i costi associati alla possibilità di una violazione e determinare in che modo paranoico vuoi essere. Come è stato recentemente scoperto da Microsoft, constantly changing passwords is a waste of money and doesn't pay off, quindi mentre la paranoia di solito è buona quando si tratta di sicurezza, devi davvero fare i conti per determinare se ha senso .... i guadagni in sicurezza superano i costi di archiviazione e tempo?

+0

@ Michaelico intendevo davvero: perché la gente usa ancora SHA1 come dispositivo di sicurezza (non per scopi di checksum o altri). – orokusaki

+5

@orokusaki; potresti voler aggiornare la domanda per dirlo. :-) –

+0

@Dean J Ho pensato che la parte 'più sicura?' Nel titolo e nella domanda si sarebbe occupata di ciò. Cos'altro potrei fare riferimento a 'sha1' e sicurezza? – orokusaki

3

Se hai bisogno di qualcosa da sottoporre all'hash in fretta, o hai solo bisogno di un hash a 160 bit, devi usare SHA-1.

Per confrontare rapidamente le voci del database tra loro, è possibile utilizzare 100 campi e creare un hash SHA-1, ottenendo 160 bit. Quei 160 bit sono 10^50 valori.

Se è improbabile che abbia mai più di una piccola frazione di 10 ° -50 ° valore, è più veloce semplicemente hash quello che ho con l'algoritmo più semplice e veloce.