crittografia delle password

voti
27

Qual è il, eppure modo più veloce e sicuro per crittografare le password in (PHP preferito), e per il quale mai il metodo scelto è portatile?

In altre parole se ho poi migrare il mio sito web a un server diverso saranno le mie password continueranno a funzionare?

Il metodo che sto usando ora come mi è stato detto dipende l'esatta versione delle librerie installate sul server.

È pubblicato 03/08/2008 alle 12:50
fonte dall'utente
In altre lingue...                            


7 risposte

voti
29

Se si sceglie un metodo di crittografia per il sistema di accesso, allora la velocità non è tuo amico, Jeff aveva un a-e-frow con Thomas Ptacek sulle password e la conclusione è stata che si dovrebbe utilizzare il metodo di crittografia più sicura più lento che può permettersi di .

Dal blog di Thomas Ptacek:
La velocità è esattamente ciò che non si vuole in una funzione di hash della password.

schemi di password moderni sono attaccati con password cracker incrementali.

cracker incrementali non precalculate tutte le possibili password cracking. Considerano ogni hash della password individualmente, e si nutrono la loro dizionario attraverso la funzione di hash della password nello stesso modo la pagina di accesso PHP sarebbe. Arcobaleno cracker da tavolo come Ophcrack usano lo spazio per attaccare le password; cracker incrementali come John the Ripper, Crack, e il lavoro LC5 con il tempo: le statistiche e di calcolo.

Il gioco di attacco password viene segnato nel tempo impiegato per decifrare la password X. Con tabelle arcobaleno, che il tempo dipende da quanto è grande il vostro tavolo ha bisogno di essere e quanto velocemente è possibile cercare esso. Con i cracker incrementale, il tempo dipende da quanto velocemente si può fare la funzione di corsa hash della password.

Il meglio si può ottimizzare la funzione hash della password, la vostra funzione di hash della password più veloce ottiene, il più debole il vostro schema è. MD5 e SHA1, anche cifrari a blocchi convenzionali come DES, sono progettati per essere veloce. MD5, SHA1, e DES sono gli hash delle password deboli. Nelle CPU moderne, crudo cripto mattoni come DES e MD5 possono essere bitsliced, vettoriale, e parallelizzato per fare ricerche di password estremamente veloce. Gioco-over implementazioni FPGA costano solo centinaia di dollari.

Risposto il 03/08/2008 a 13:48
fonte dall'utente

voti
14

Sono con Peter. Developer non sembrano capire le password. Tutti noi scegliamo (e io sono colpevole di questo troppo) MD5 o SHA1 perché sono veloci. Pensando a questo proposito ( 'cuz qualcuno ha recentemente fatto notare a me) che non ha alcun senso. Dovremmo essere la scelta di un algoritmo di hash che è stupido lento. Voglio dire, sulla scala delle cose, un sito occupato sarà hash delle password che cosa? ogni 1/2 minuti? Chi se ne frega se si prende 0,8 secondi vs 0,03 server di secondi saggio? Ma che la lentezza in più è enorme per prevenire tutti i tipi di attacchi comuni brute-forcish.

Dalla mia lettura, bcrypt è specificamente progettato per l'hash password sicura. Si basa su pesce palla, e ci sono molti attuazione.

Per PHP, controlla PHPPass http://www.openwall.com/phpass/

Per chiunque fare NET, controlla BCrypt.NET http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

Risposto il 03/08/2008 a 14:48
fonte dall'utente

voti
8

Va sottolineato che non si vuole crittografare la password, si desidera hash esso.

password crittografate possono essere decifrati, lasciando che qualcuno veda la password. Hashing è un'operazione a senso unico quindi la password originale dell'utente è (crittografia) andato.


Per quanto riguarda quale algoritmo si dovrebbe scegliere - utilizzare il momento accettato standard di un:

  • SHA-256

E quando si hash della password dell'utente, essere sicuri di hash anche in qualche altra spazzatura con esso. per esempio:

  • parola d'ordine: password1
  • sale: PasswordSaltDesignedForThisQuestion

Aggiungere il sale per la password dell'utente:

String s = HashStringSHA256("password1PasswordSaltDesignedForThisQuestion");
Risposto il 17/09/2008 a 19:06
fonte dall'utente

voti
7

Qualunque cosa tu faccia, non scrivere il proprio algoritmo di crittografia. In questo modo si garantisce quasi (se non sei un crittografo) che ci sarà un difetto nell'algoritmo che renderà banale di crack.

Risposto il 17/09/2008 a 19:16
fonte dall'utente

voti
2

Prendere in considerazione di utilizzare bcryptè usato in molti quadri moderni come laravel.

Risposto il 16/07/2016 a 07:47
fonte dall'utente

voti
2

Non sto necessariamente cercando il più veloce, ma un buon equilibrio, alcuni dei server che questo codice è stato sviluppato per sono piuttosto lento, lo script che hash e memorizza la password sta prendendo 5-6 secondi per correre, e ho limitato giù al hashing (se io commento l'hashing fuori corre, in 1-2 secondi).

Non deve essere il più sicuro, io non sono codding per una banca (in questo momento), ma di certo NON memorizzare le password come testo normale.

Risposto il 05/08/2008 a 00:07
fonte dall'utente

voti
0

password_hash ( string $password , int $algo [, array $options ] ). (PHP 5> = 5.5.0, PHP 7)

password_hash () crea una nuova hash password utilizzando una forte algoritmo di hashing a senso unico. password_hash () è compatibile con crypt (). Pertanto, gli hash delle password create da crypt () possono essere utilizzati con password_hash ().

Risposto il 18/05/2018 a 18:27
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more