È buona pratica scrivere le password SHA512 prima di passarle a bcrypt?

9

Desidero consentire l'invio di password di qualsiasi dimensione. Attualmente utilizzo bcrypt come funzione di derivazione delle chiavi per le password, tuttavia mi sono reso conto che ha una lunghezza massima di inserimento di 72.

Per questo motivo, mi piacerebbe sha512 password prima di passarle a bcrypt, consentendo la registrazione di password di qualsiasi dimensione, perché capisco che sha512 emetta 64 byte.

Questa pratica è OK? Ho sentito che mescolare e abbinare gli hash, o "creare la tua crittografia" è una cattiva pratica, ma questo sembra una valida soluzione al difficile limite.

Grazie.

    
posta InvokeStatic 21.06.2014 - 23:46
fonte

3 risposte

13

Hashing password con una funzione hash decente e sicura prima di inviarle in bcrypt è un modo ragionevole e sicuro per mantenere tutta la bontà di bcrypt e inoltre supporta password di dimensioni arbitrarie.

Vuoi comunque esercitare cautela su alcuni dettagli pratici. In particolare, molte implementazioni di bcrypt prevedono una password , cioè una sequenza di caratteri, che termina con il primo byte del valore 0x00. L'output di SHA-512 è binario e quindi potrebbe contenere alcuni byte di valore 0x00. Ad esempio, 1/256 ° di tutte le password produrrà un valore hash che inizia con un byte di valore 0x00, che un'istanza di bcrypt basata su stringhe comprenderà come equivalente a una password vuota. Questo non va bene ...

La soluzione è utilizzare una codifica deterministica da byte a caratteri, ad es. Base64 . Poiché ciò implica un'estensione di dimensioni, SHA-512 non sarà più adeguato (Base64 trasforma 64 byte in 88 caratteri, oltre il limite 72 di bcrypt). Pertanto, usa SHA-256: l'output a 256-bit (32 byte) sarà codificato da Base64 in 44 caratteri, e andrà bene con bcrypt.

(La dimensione dell'output a 512 bit di SHA-512 è comunque eccessiva. SHA-256 è abbastanza buono.)

    
risposta data 22.06.2014 - 01:09
fonte
1

Per quanto ne so, l'input dell'utente è preceduto da una funzione hash crittografica e quindi è accettato il risultato con una funzione di hash della password.

Mozilla suggerisce un hmac + bcrypt , se scegli SHA512 per HMAC dovrebbe andare bene. (Credo che SHA512 sia lo stesso tipo di overkill di AES256, quindi potresti risparmiare alcuni cicli della CPU usando SHA256 senza sacrificare la sicurezza)

La funzione di hashing della password di Makwa, che è candidata al Concorso di hashing delle password di Thomas Pornin ha effettivamente il supporto per l'hashing pre e post.

    
risposta data 21.06.2014 - 23:58
fonte
0

Questo non indebolirà la tua password né aggiungerà sicurezza aggiuntiva. L'entropia, anche dopo il troncamento per le password più lunghe, sarà comunque abbastanza alta. In realtà PBKDF2, che è spesso utilizzato anche per le password hash, fa qualcosa di simile quando la chiave derivata da una password supera il blocco.

    
risposta data 21.06.2014 - 23:57
fonte

Leggi altre domande sui tag