2009-03-07 10 views
17

Sto pianificando di utilizzare jBCrypt per l'hashing della password in una nuova applicazione Web, poiché si suppone che sia il migliore da quello che ho letto. Come non l'ho usato prima che io stia esaminando se c'è qualche ragione per non usarlo.Che cosa utilizzare per l'hashing della password? Qualche ragione per non usare jBCrypt?

ho questo:

  • io non l'ho trovato nel repository Maven (cercato jbcrypt e bcrypt a mvnrepository.org) che è un handicap come mi piacerebbe avere le mie dipendenze gestito mediante un repository Maven se possibile. Se jBCrypt è la soluzione migliore per l'hashing delle password, dovrei configurare il mio repository locale e renderlo disponibile in questo modo. O l'ho appena perso? Forse è lì da qualche parte?
  • È solo alla versione 0.2, ma forse è comunque stabile e il motivo per un numero di versione basso ha qualche altra causa?

risposta

5

jBcrypt è probabilmente un algoritmo crittografico per le password; il blowfish è relativamente forte. Anche se ci sono stati alcuni difetti di implementazione segnalati in Blowfish stesso, non trovo nulla di molto riportato su jBcrypt. D'altra parte, Blowfish non è stato testato quasi altrettanto pesantemente degli altri algoritmi, e un attacco noto come plaintxt in stile crack spesso funziona meglio del previsto, sorprendentemente cripto-geek.

Quindi, ecco cosa mi suggeriscono:

  • andare avanti e usare jBcrypt ma proteggere i file di password criptate nella misura ragionevolmente possibile - come si farebbe usando/etc/shadow su un sistema UNIX.
  • Contrariamente a quanto suggerito da Nikhil, I inserire i sorgenti nel controllo della versione, per due motivi: chance la persona che fa jBcrypt passerà ad altre cose, e tu non vuoi trovarti a penzolare prima di una consegna (che è inevitabile quando lo scoprirai.) In questo tipo di situazione, vorrei metti i sorgenti nel tuo controllo di versione come se fossero il tuo codice, e quindi eventuali modifiche possono essere inserite come se avessi creato tu stesso una nuova versione. Non c'è bisogno di essere più complicato di quanto lo sarebbe normalmente.
+0

Sì, è nel mio controllo di versione ora. Dovrei Google per questi noti punti deboli in Blowfish, poiché è una novità per me. Riguardo a "crack style known-plaintext attack", intendi un attacco di tipo brute force dictionary? Se quello è il cast è l'intera ragione per cui voglio usare Blowfish, dato che è un algoritmo lento. –

+0

No, cerca il crack di Alec Muffet: precompone un grosso dizionario di password comuni e poi confronta i ciphertexts. E non è che Blowfish abbia conosciuto difetti, è che alcuni implementaitons sono stati segnalati per avere difetti. –

+0

Hm, va bene. Ma sto usando la pasword salting quindi un attacco del dizionario non dovrebbe essere possibile in quel modo. –

0

Dubito che la stabilità sarà un problema, poiché bcrypt stesso è maturo ei suoi piccoli wrapper standardizzati non fanno nulla di straordinario. Sono felice con l'altro wrapper bcrypt di Damien Miller, python-bcrypt, che è solo sulla versione 0.1.

Non ho familiarità con Maven, ma (avviso di eresia!) Dubito che sia necessario il controllo della versione per un componente semplice come bcrypt. Per citare il sito, le modifiche da v0.1 a v0.2 erano "correttezza, errori di battitura e API (completamente compatibili con le versioni precedenti)" e l'elenco TODO è vuoto.

+0

jBcrypt non è in realtà un wrapper. È un'implementazione nativa. Lo sto usando ora, ho incorporato il codice sorgente nel progetto. –

2

Per quanto riguarda la vostra preoccupazione che non è maturo, stavo per suggerire che si imposta il proprio test JUnit a confronto i risultati del jBcrypt e più collaudato Bcrypt, per vedere se si ottiene gli stessi risultati, e quindi contribuisci con il progetto jBcrypt.

Ma questo è già stato fatto:

...viene fornito con un set di test JUnit per verificare il corretto funzionamento di della libreria e la compatibilità con l'implementazione canonica C dell'algoritmo bcrypt .

Sfogliando i test JUnit per vedere se soddisfano il livello di soddisfazione è dove mi piacerebbe iniziare ...

+0

Sì, sì. I test JUnit sono ancora piuttosto limitati e basati su valori codificati nei metodi di test. Quindi, se non confronto quelli con i valori di BCrypt, non posso ancora essere sicuro che i valori siano effettivamente da BCrypt (che sono sicuro che siano). –

Problemi correlati