Sarebbe sufficiente dire se bcrypt o SHA-512 (nel contesto di un algoritmo appropriato come PBKDF2) è sufficientemente buono. E la risposta è sì, entrambi gli algoritmi sono abbastanza sicuri che una violazione si verificherà attraverso un difetto di implementazione, non una crittoanalisi.
Se si insiste a sapere quale è "migliore", SHA-512 ha avuto recensioni approfondite da parte del NIST e di altri. Va bene, ma sono stati riconosciuti difetti che, sebbene non siano ora sfruttabili, hanno portato alla competizione SHA-3 per i nuovi algoritmi di hash. Inoltre, tieni presente che lo studio degli algoritmi di hash è "più recente" di quello dei cifrari, e i crittografi stanno ancora imparando a conoscerli.
Anche se bcrypt nel suo insieme non ha avuto lo stesso controllo di Blowfish stesso, credo che basarsi su un codice cifrato con una struttura ben definita gli conferisca una sicurezza intrinseca a cui manca l'autenticazione basata su hash. Inoltre, è più facile utilizzare GPU comuni come strumento per attaccare gli hash SHA-2 – basati; a causa dei suoi requisiti di memoria, l'ottimizzazione di bcrypt richiede hardware più specializzato come FPGA con alcuni RAM di bordo.
Nota: bcrypt è un algoritmo che utilizza internamente Blowfish. Non è un algoritmo di crittografia in sé. È usato per oscurare in modo irreversibile le password, proprio come le funzioni di hash sono usate per fare un "hash a senso unico".
Gli algoritmi di hash crittografici sono progettati per essere impossibile da invertire. In altre parole, dato solo l'output di una funzione di hash, dovrebbe richiedere "per sempre" per trovare un messaggio che produrrà lo stesso output di hash. In effetti, dovrebbe essere computazionalmente impossibile trovare due messaggi che producano lo stesso valore di hash. A differenza di un cifrario, le funzioni di hash non sono parametrizzate con una chiave; lo stesso input produrrà sempre lo stesso output.
Se qualcuno fornisce una password che blocca il valore memorizzato nella tabella della password, vengono autenticati. In particolare, a causa dell'irreversibilità della funzione hash, si presume che l'utente non sia un utente malintenzionato che ha ottenuto l'hash e lo ha invertito per trovare una password funzionante.
Ora considera bcrypt. Usa Blowfish per crittografare una stringa magica, utilizzando una chiave "derivata" dalla password. Successivamente, quando un utente immette una password, la chiave viene nuovamente derivata e se il testo cifrato prodotto dalla crittografia con quella chiave corrisponde al testo cifrato memorizzato, l'utente viene autenticato. Il testo cifrato è memorizzato nella tabella "password", ma la chiave derivata non viene mai memorizzata.
Per rompere la crittografia qui, un utente malintenzionato dovrebbe recuperare la chiave dal testo cifrato. Questo è chiamato attacco "testo in chiaro", poiché l'attacco conosce la stringa magica che è stata crittografata, ma non la chiave utilizzata. Blowfish è stato studiato estensivamente e non sono ancora noti attacchi che permettano a un utente malintenzionato di trovare la chiave con un solo testo in chiaro noto.
Quindi, proprio come gli algoritmi irreversibili basati su digest di crittografia, bcrypt produce un output irreversibile, da una password, sale e costo. La sua forza risiede nella resistenza di Blowfish a noti attacchi in testo normale, che è analogo a un "primo attacco pre-immagine" su un algoritmo di digestione. Dal momento che può essere utilizzato al posto di un algoritmo hash per proteggere le password, bcrypt viene confusamente chiamato algoritmo "hash".
Supponendo che i tavoli arcobaleno siano stati ostacolati da un uso corretto del sale, qualsiasi funzione veramente irreversibile riduce l'attaccante a tentativi ed errori. E il tasso che l'attaccante può fare prove è determinato dalla velocità di quell'algoritmo "hash" irreversibile. Se viene utilizzata una singola iterazione di una funzione hash, un utente malintenzionato può eseguire milioni di prove al secondo utilizzando apparecchiature che costano nell'ordine di $ 1000, testando tutte le password di massimo 8 caratteri in pochi mesi.
Se, tuttavia, l'output di digest viene "restituito" migliaia di volte, occorreranno centinaia di anni per testare lo stesso set di password su quell'hardware. Bcrypt ottiene lo stesso effetto di "rinforzo chiave" iterando all'interno della sua routine di derivazione delle chiavi, e un metodo basato su hash appropriato come PBKDF2 fa la stessa cosa; a questo proposito, i due metodi sono simili.
Quindi, la mia raccomandazione di bcrypt deriva dalle ipotesi 1) che un Blowfish ha avuto un analogo livello di controllo della famiglia di funzioni hash SHA-2, e 2) che i metodi crittografici per cifrari sono meglio sviluppati rispetto a quelli per funzioni di hash.
Non è sbagliato; vedere gli aggiornamenti alla mia risposta per una spiegazione di come funziona bcrypt e perché ha lo stesso scopo di un algoritmo "unidirezionale" basato su hash. – erickson
'bcrypt' ha semplicemente un" fattore di lavoro "più elevato per impostazione predefinita. Si presume che SHA non ... a meno che non si usi passhash9, che può essere utilizzato insieme a un fattore di lavoro. perché questa domanda è chiusa? è tutt'altro che una risposta ancora molto importante. –
Il collegamento in questione è inattivo ............... – Pacerier