SHA512 vs. Blowfish e Bcrypt

Sto osservando gli algoritmi di hashing, ma non sono riuscito a trovare una risposta.

  • Bcrypt usa Blowfish
  • Blowfish è migliore di MD5
  • Q: ma Blowfish è meglio di SHA512?

Grazie..

Aggiornare:

Voglio chiarire che capisco la differenza tra hashing e crittografia. Ciò che mi ha spinto a porre la domanda in questo modo è questo articolo , in cui l’autore fa riferimento a bcrypt come “hashing adattivo”

Poiché bcrypt è basato su Blowfish, sono stato indotto a pensare che Blowfish sia un algoritmo di hashing. Se è la crittografia come hanno sottolineato le risposte, mi sembra che non dovrebbe avere un posto in questo articolo. Quel che è peggio è che sta concludendo che bcrypt è il migliore. Ciò che mi confonde anche adesso è che la class phpass (usata per hashing delle password credo) usa bcrypt (es. Blowfish, cioè crittografia). Sulla base di queste nuove informazioni che mi state dicendo (blowfish è crittografia), questa class suona male. Mi sto perdendo qualcosa?

Dovrebbe essere sufficiente dire se bcrypt o SHA-512 (nel contesto di un algoritmo appropriato come PBKDF2) è abbastanza 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 ti ostini 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 cifrario con una struttura ben definita gli dia una certa sicurezza intrinseca a cui manca l’autenticazione basata su hash. Inoltre, è più facile utilizzare GPU comuni come strumento per attaccare gli hash basati su SHA-2; 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 usa 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 imansible 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 imansible 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 delle 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.

Adesso 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 usato 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’aggressore 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 abbia avuto un analogo livello di controllo della famiglia di funzioni hash SHA-2, e 2) che i metodi crittografici per i cifrari siano meglio sviluppati rispetto a quelli per le funzioni hash.

Sono d’accordo con la risposta di erickson, con un avvertimento: per scopi di autenticazione della password, bcrypt è molto meglio di una singola iterazione di SHA-512 – semplicemente perché è molto più lento. Se non capisci perché la lentezza è un vantaggio in questo particolare gioco, leggi l’articolo a cui ti sei collegato di nuovo (scorri verso il basso fino a “La velocità è esattamente ciò che non vuoi in una funzione di hash della password. “).

Ovviamente è ansible creare un algoritmo di hashing della password sicuro attorno a SHA-512 ripetendolo migliaia di volte, proprio come funziona l’algoritmo MD5 di PHK. Ulrich Drepper ha fatto esattamente questo , per la crypt di glibc (). Non c’è una ragione particolare per farlo, però, se hai già a disposizione un’implementazione di bcrypt testata.

Blowfish non è un algoritmo di hashing. È un algoritmo di crittografia. Ciò significa che puoi crittografare qualcosa usando blowfish, e in seguito puoi decrittografarlo in testo normale.

SHA512 è un algoritmo di hashing. Ciò significa che (in teoria) una volta che hai cancellato l’input non puoi ottenere di nuovo l’input originale.

Sono 2 cose diverse, progettate per essere utilizzate per compiti diversi. Non c’è una risposta “corretta” a “blowfish è meglio di SHA512?” Potresti anche chiedere “le mele sono migliori dei canguri?”

Se vuoi saperne di più sull’argomento ecco alcuni link:

  • Blowfish
  • SHA512

Blowfish non è migliore di MD5 o SHA512, poiché servono a scopi diversi. MD5 e SHA512 sono algoritmi di hashing, Blowfish è un algoritmo di crittografia. Due funzioni crittografiche completamente diverse.

Vorrei raccomandare l’implementazione di crypt basata su SHA-256 / SHA-512 di Ulrich Drepper.

Abbiamo portato questi algoritmi su Java, e puoi trovare una versione liberamente autorizzata di loro su ftp://ftp.arlut.utexas.edu/java_hashes/ .

Nota che i più moderni (L) Unices supportano l’algoritmo di Drepper nei loro file / etc / shadow.

Mi sono appena imbattuto in questo:

http://codahale.com/how-to-safely-store-a-password/

L’autore di questo articolo può essere sbagliato?