Algoritmo hash delle password più sicuro?

41

Quali sono / sono attualmente gli algoritmi di hashing più crittograficamente sicuri? ( disponibile in PHP )

La velocità è irrilevante, perché sto iterando l'hash su un tempo fisso (piuttosto che su un numero fisso di iterazioni). Quello che mi interessa è la forza matematica.

La mia intuizione mi dice che è idromassaggio , essendo il più grande e il più lento del gruppo. Quello o SHA-512. Ma dove sulla rete posso vedere cosa consigliano gli esperti?

    
posta Core Xii 25.06.2011 - 19:26
fonte

6 risposte

33

I crittografi potrebbero sottolineare che, quando leggete la stampa fine, non vi è alcuna prova che esistano effettivamente funzioni di hash sicure. L'unica cosa che abbiamo ora sono candidati per i quali non è stata ancora trovata alcuna debolezza.

Quindi il meglio che puoi sperare è una funzione che è sopravvissuta da molti crittografi per lungo tempo. Inoltre, è necessario disporre di un output sufficientemente ampio (256 bit sono sufficienti se si desidera ottenere una "sicurezza a 128 bit" e andare oltre ha poco senso). In questo momento, a partire dall'estate 2011, questo indica SHA-256 o SHA-512, non Whirlpool.

Basare il conteggio delle iterazioni sul tempo impiegato da una macchina tipica è una buona idea - ma basandola sul tempo in cui realmente assume la tua macchina è < strong> non una buona idea. Altrimenti, si potrebbero ottenere conteggi di iterazioni bassi per alcune password perché la macchina stava gestendo molte richieste in quel momento (una situazione che un utente malintenzionato potrebbe forzare, comunque). L'uso di molte iterazioni ha lo scopo di ostacolare gli hacker rendendo l'hashing della password lento sul computer dell'attaccante - che rende anche lento il tuo sistema è uno sfortunato sottoprodotto; ma il vero bersaglio è qualunque sia la potenza della macchina che l'attaccante potrebbe radunare. Dal momento che non puoi davvero fare benchmark sulla macchina dell'attaccante, devi ricorrere a stime approssimative, quindi a un conteggio fisso, il più alto possibile, purché l'onere medio sia tollerabile sul tuo sistema (la parola chiave qui è "media", che squalifica una misura dinamica come intendi eseguire).

Inoltre, la macchina dell'attaccante non ha bisogno del tuo; potrebbe essere, ad esempio, una GPU o un FPGA , che offre capacità di calcolo distinte da ciò che è possibile ottenere su un server tipico. Si desidera una funzione per la quale un utente malintenzionato non sarà in grado di ottenere enormi incrementi di prestazioni utilizzando hardware non PC. Anche in questo caso, questo promuove SHA-256 o SHA-512, che sono pensati per l'efficienza della CPU (con operazioni aritmetiche a 32 o 64 bit), non Whirlpool, che può beneficiare di ottimizzazioni hardware simili a quelle per cui è stato progettato AES.

Infine, le iterazioni sono solo una parte del lavoro; hai anche bisogno di un sale abbastanza lungo, abbastanza unico. Le iterazioni e la salatura possono essere un po 'complicate da fare allo stesso tempo; sei caldamente incoraggiato a utilizzare una costruzione standard come PBKDF2 (sebbene fosse inteso come una funzione di derivazione della chiave, non una password hasher, PBKDF2 risulta essere abbastanza buono anche in questo caso.

    
risposta data 07.07.2011 - 18:56
fonte
20

Dal commento dell'OP:

"Secure" as in, based on a mathematical problem that has no known fast solution. "Most secure" as in, based on the most complex of such problems. A hashing algorithm is considered "strong" when breaking it would require a major contribution to cryptology/mathematics.

Sembra che tu stia leggendo Le tabelle" Basta con l'arcobaleno "di Thomas Ptacek: che cosa è necessario sapere sugli schemi di password sicura" , e ora ti stai chiedendo quale moderno hash crittografico ottimizzato per l'archiviazione delle password è considerato "il più sicuro".

Non penso che ci sia una risposta chiara. Per quanto ne so, alcuni degli attuali preferiti nella comunità di programmazione (scrypt e amp; bcrypt) non sono stati esaminati rigorosamente come funzioni di hashing della password. Almeno, non sono stati sottoposti a revisione paritetica da un gran numero di crittografi paragonabili a come le voci di concorso della funzione hash del NIST sono controllate .

Detto questo, l'attuale consenso di Hacker News è che l'ordine è:

  1. scrypt . Poiché è impegnativo sia per la memoria che per la CPU, scrypt è pensato per avere il più alto margine di sicurezza degli hash delle password correnti . Puoi vedere di più sul suo design qui .
  2. bcrypt è stato il precedente campione, come citato in Post del blog di Thomas Ptacek sopra .
  3. PBKDF2 e più turni di SHA2 (fx Unix Crypt con SHA256 ) si ritiene che sia il terzo migliore (il che uno di questi è" migliore "dipende in gran parte dal numero di iterazioni utilizzate).

(Si noti che "Hacker News" è per lo più una comunità di programmazione, e non come potrebbe significare il nome ad una comunità di specialisti della sicurezza (anche se alcuni di essi sono presenti anche lì).

Se ti guardi in giro su questo sito, sotto la crittografia password e hashing tag fx, quindi tu vedremo che di solito non c'è un solo hash di password "migliore" menzionato. Immagino che sia in parte perché i veri crittografi non hanno un consenso chiaro su quale sia il più "strong", a causa della revisione dei pari relativamente limitata.

Ecco un imparziale e facile da leggere (che non fa niente t include scrypt, presumibilmente perché è ancora troppo nuovo).

Speed is irrelevant, because I'm iterating the hash over a fixed time (rather than a fixed number of iterations).

Con alcuni di questi hash, non puoi davvero farlo. Fornisci un "fattore lavoro" quando chiami la biblioteca e la biblioteca si occupa di tutto il resto.

    
risposta data 26.06.2011 - 01:03
fonte
7

CRYPT_BLOWFISH (OpenBSD bcrypt, basato sul cifrario simmetrico blowfish, ma è un vero algoritmo di hashing, sembra esserci molta confusione a riguardo) e CRYPT_SHA512 sono i migliori. Entrambi offrono la possibilità di ridimensionare il numero di "round" utilizzati, consentendo di scegliere un compromesso tra sicurezza e prestazioni.

Ad esempio, il numero predefinito di colpi per blowfish è 7 (l'intervallo di valori è 4-31). Questo valore è logaritmico, quindi ogni aumento comporta l'esecuzione dell'algoritmo 10 volte di più. Un valore di 13, richiede quasi 1 minuto per hash su un Core2Duo 2.4 ghz

Se si ottimizzano le prestazioni in base alle tollerabilità, si otterrà la massima sicurezza.

nota: recentemente è stato trovato un bug in alcune implementazioni di bcrypt e, in quanto tale, potresti preferire usare SHA-512.

Nota: SHA-512 è più veloce da calcolare rispetto a SHA-256 su processori a 64 bit (specialmente se ottimizzato con SSE2_64. In particolare, dovresti considerare questo e utilizzare cicli aggiuntivi per garantire che gli hash siano abbastanza forti per il loro scopo.

L'applicazione open source hashkill , pubblicato alcuni benchmark delle prestazioni su quanto velocemente le GPU moderne potessero crackare attraverso i moderni algoritmi di hashing. Nello specifico, una Radeon HD 6990 può fare: 11001 Megahashes / sec di MD5 dritto (CRYPT_MD5 è salato e l'implementazione di FreeBSD utilizza 100 round). Straight SHA1 a 3444 Megahashes / s.

    
risposta data 25.06.2011 - 23:56
fonte
0

Ti consiglio di utilizzare phpass

This is a portable public domain password hashing framework for use in PHP applications. It is meant to work with PHP 3 and above, and it has actually been tested with at least PHP 3.0.18 through 5.3.0 so far.

The preferred (most secure) hashing method supported by phpass is the OpenBSD-style Blowfish-based bcrypt, also supported with our public domain crypt_blowfish package (for C applications), and known in PHP as CRYPT_BLOWFISH, with a fallback to BSDI-style extended DES-based hashes, known in PHP as CRYPT_EXT_DES, and a last resort fallback to MD5-based salted and variable iteration count password hashes implemented in phpass itself (also referred to as portable hashes).

Come il sito web dice che bcrypt basato su Blowfish è l'hashing più sicuro. Credo che questo sia vero perché è " a prova di legge di Moore " mentre la maggior parte degli altri non lo sono.

    
risposta data 25.06.2011 - 19:59
fonte
-2

Se la velocità non è un problema, basta aggiungere gli output di più funzioni hash. (Whirlpool, sha-512, ecc.). Lo stesso principio della crittografia multipla, qualsiasi debolezza progettata o trovata non funzionerà attraverso più funzioni hash. Fondamentalmente, prendi la stringa x, eseguila attraverso n hash separatamente (non concatenati, esegui ognuno separatamente sullo stesso input), aggiungi i risultati in un nuovo blocco. Ripeti facendo la stessa cosa nel nuovo blocco. Presumo che tu stia facendo questo per l'archiviazione sicura delle password. Assicurati di utilizzare anche un vero sale casuale e uno indipendente per ogni hash. (E si prega di utilizzare uno a figura intera).

    
risposta data 12.06.2014 - 15:03
fonte
-3

Secondo la mia esperienza personale, considero Blowfish come uno degli algoritmi di crittografia più sicuri

Fai clic qui per scaricare la documentazione pdf su Blowfish.

È un cifrario a blocchi simmetrico che può essere usato come rimpiazzo sostitutivo per DES o IDEA. Prende una chiave di lunghezza variabile, da 32 bit a 448 bit, che lo rende ideale per l'uso sia domestico che esportabile. A parte questo, Blowfish non è brevettato e senza licenza ed è disponibile gratuitamente per tutti gli usi.

    
risposta data 25.06.2011 - 19:43
fonte

Leggi altre domande sui tag