2010-01-12 6 views
17

Qual è il miglior algoritmo consiglia di utilizzare per cifrare le password in php/mysqlalgoritmo migliore hash da utilizzare in PHP/MYSQL

+0

di hashing e crittografia non sono la stessa cosa. Hai bisogno di recuperare la password originale? –

+0

Basta memorizzare le password nel database in un formato illeggibile – Gatura

+0

qui è un buon articolo: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-qualsiasi cosa- -to-know-about-s.html – miki725

risposta

0

Vorrei usare la funzione del php crypt() perché non ci sarà comunque la password per essere decifrati . Quando ho bisogno di controllare la password neo entrato devo solo per cifrare che uno e confrontare i due risultati

+13

-1 completo non-sense: secondo il manuale: 'crypt() restituirà una stringa hash usando l'algoritmo standard basato su UN o algoritmi alternativi che potrebbero essere disponibili sul sistema .' – Johan

+6

@Johan È possibile modificare facilmente la funzione di hash da utilizzare, il sale e il numero di cicli con 'crypt()'. –

+1

@Daniel Jonsson +1 Il frammento di documentazione che Johan menziona lo dice anche lui! La maleducazione non dovrebbe essere il benvenuto qui. – allyourcode

4

C'è un articolo here decente - breve risposta, utilizzare crypt(), e assicurarsi di utilizzare un salt.

+1

Se vuoi (o anche puoi) aggiornare questo, è meglio usare password_hash e password_verify se hai PHP> = 5.5. –

+0

Grazie per la raccomandazione @KevinNelson - ha funzionato a meraviglia. – w5m

19

SHA-512 con un sale è un buon modo & per hash una password. Se questo non è disponibile hai SHA-1 ma la sicurezza è considerata un po 'debole in questi giorni, specialmente se non usi un sale.

+0

Stai dicendo che SHA-512 è peggiore o meno sicuro? –

+2

Beh, ovviamente SHA-512 è ancora più forte, ora sei solo un asino intelligente. – TravisO

+1

Non sarei d'accordo. Leggi questo articolo: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html – miki725

0

Ci sono molte opzioni - vedere the php hash docs per l'elenco completo.

La velocità non è un vantaggio, quindi usare sha-512 o idromassaggio è una buona idea. Non è necessario memorizzare l'intera lunghezza dell'hash in mysql, ad esempio è possibile eseguire l'hash di qualcosa come whirlpool, che è lungo 128 caratteri e memorizzare solo i primi 64 caratteri per l'efficienza.

+1

Troncare un hash è un pessimo consiglio, ed è assolutamente inutile, dato che sha256 restituirà 64 cifre esadecimali, ed è progettato per quella lunghezza. Troncare qualsiasi hash ridurrà significativamente la sicurezza! Inoltre stai scrivendo circa 128 caratteri - 0-9, a-f. Si tratta di una memorizzazione inefficiente di valori binari come l'hash, in quanto occupa il doppio dello spazio, quindi il campo binario a 64 bit memorizzerebbe i 128 caratteri e non è necessario troncare nulla. Sebbene potrebbe essere meglio per la manutenzione avere hash in un formato più leggibile, è possibile utilizzare la crittografia di base64. – marianboda

+0

@praksant Non sono un esperto di crittografia, ma mi sembra che archiviare i caratteri 32-96 di un hash whirlpool sia abbastanza buono per la maggior parte delle applicazioni. Aumenta le possibilità che un attaccante trovi una collisione, ma comunque, sarebbe molto meglio di SHA1/MD5, che ancora molte persone usano. Quale miglioramento sarebbe usare base64? – JAL

+1

Non sono nemmeno un esperto di crittografia, ma se c'è un modo per archiviare l'intero hash nello stesso numero di byte, perché qualcuno dovrebbe sacrificare la sicurezza per niente? Non sto dicendo che non sia abbastanza sicuro per molte applicazioni. Può essere. E la codifica base64 memorizzerà i dati binari a 6 bit per byte, la forma esadecimale solo 4 per byte. Quindi con base64 avresti bisogno di 86 byte per archiviare hash a 512 bit invece di 128 byte. Nel file binario grezzo sarebbe 64 byte. – marianboda

6
  1. Il pensiero corrente è quello di utilizzare un algo hash SLOW. Questo fa sì che i "forzuti brutali" impieghino molto tempo a generare tutti questi tentativi.

  2. Molto ancora più intelligente è tenere traccia delle richieste URI tramite IP e bloccare con spiegazione quando 5 tentativi di accesso falliscono dallo stesso IP in un dato periodo di 5 minuti.

  3. La banca più intelligente ha ancora da fare # 1, # 2 e richiede anche un passaggio secondario una volta che il primo ha superato il test. Il triplo fallimento alla seconda sfida determina il blocco.

Il livello 3 di sicurezza è molto, molto forte. Probabilmente troppo forte.

+0

Un chiarimento su ciò che hai scritto. Fai sembrare che il # 2 sia "migliore" del # 1 ... ma sono completamente indipendenti ed entrambi sono necessari. Non hai l'hash per prevenire attacchi brute-force contro il tuo server. Quel tipo di attacco a forza bruta non "vede" mai l'hash. Quindi, per questo, fai solo l'articolo 2. Hai cancellato le tue password per impedire alle persone che hanno accesso al DB o ottenere un dump di esso di essere in grado di forzare in modo economico le password degli utenti a loro piacimento. –

0

Miki725 solleva punti interessanti con the Matasano article Mentre sha512 è meglio di md5 crittografia, bcrypt li batte tutti, perché è più lento e quindi costa di più per attaccare. Più lento non è male internet è lenta già, è milioni di volte più lento di cache della CPU, e migliaia di volte più lento di disco. Effettuare i controlli della password richiede 200 ms anziché 1 ms per il calcolo non ha intenzione di infastidire alcun utente.

più importante non dimenticare di usare un nonce che è casualmente generato e diverso per ogni utente.

bcrypt sta per essere sub-ottimale in PHP perché PHP è interpretato e questo dà l'attaccante qualche vantaggio, ma c'è un modo per in this stackoverflow article

Problemi correlati