L'hash della password è migliore quando si concatena la password e il nome utente?

4

L'hash della password (con bcrypt) è migliore quando concatenate il nome utente con la password?

Ad esempio:

$this->hash($username . $password);

e

$this->hash($password);

L'ultima volta che ho usato sha1 ($ username. $ password), ma ora quando creo un nuovo progetto che voglio sapere è davvero importante? Aumenta la sua forza di crittografia?

    
posta Naki 05.07.2012 - 17:20
fonte

2 risposte

2

I nomi utente non sono molto validi per i sali perché non sono unici in tutto il mondo , e nemmeno timewise .

Il sale è pensato per impedire a un utente malintenzionato di ottimizzare la sua ricerca attaccando diversi hash delle password "in parallelo" e condividendo il costo computazionale. "Parallelismo" è un termine piuttosto ampio; non significa necessariamente "simultaneamente". Ad esempio, una tabella precalcata (es. tabella arcobaleno ) dei valori password-to-hash è una sorta di parallelismo (io sono solo ragionamento nello spazio-tempo senza distinguere la dimensione temporale dalle tre dimensioni spaziali qui).

In pratica, se il tuo software usa il nome utente come salt, come suggerisci, allora diventa utile precomporre una tabella per attaccare la password di admin perché le probabilità sono molte (la maggior parte? ) i server che utilizzano il tuo software avranno un utente chiamato admin . Questa è una violazione dell '"unicità mondiale": i nomi utente sono unici su un determinato server ma non su tutti i server esistenti che utilizzano questo software o un software simile , che consente l'attacco ottimizzazioni.

Per quanto riguarda l'unicità "a tempo", alludo a un utente che cambia la sua password. Se il nome utente è il salt, la vecchia e la nuova password useranno lo stesso salt, e quindi potrebbero essere attaccati in parallelo per meno del doppio del costo di attacco di una password. Le vecchie password sono preziose per gli aggressori, perché:

  • Quando gli utenti cambiano la loro password, tendono a usare "serie indovinate" (cioè se una vecchia password di un utente è "Password201207" allora è probabile che la nuova password, se scelta intorno a Natale, sia "Password201212 ").

  • Alcuni utenti riciclano le password: quando cambiano la password, spesso a causa di una politica di modifica delle password applicata da sysadmin, passano attraverso un breve elenco di password e ciclicamente; una vecchia password potrebbe essere la password che useranno quando cambieranno la loro password.

  • Gli utenti sono utenti, riutilizzano le password tra siti (quindi la vecchia password su un server potrebbe essere la password corrente per lo stesso utente su un altro sito).

Per questi motivi, i nomi utente non sono buoni sali.

Nota obbligatoria: la salatura è solo una parte del problema; è inoltre necessario che l'hashing della password sia lento . Una singola chiamata SHA-1 è troppo veloce; un attaccante con un paio di GPU calcolerà un miliardi di quei al secondo . I sali impediscono all'aggressore di riutilizzare lo sforzo di scomporre una password piuttosto che un'altra, ma è anche necessario che lo sforzo di scomporre una singola password sia non trascurabile. Le buone funzioni di hashing della password sono una cosa complicata. Usa bcrypt e astenetevi dal progettare i vostri schemi.

    
risposta data 17.01.2013 - 14:56
fonte
5

Quello che stai descrivendo è un Salt . Lo scopo principale di avere un sale è di proteggere dagli attacchi della tabella arcobaleno . Idealmente, tuttavia, il sale dovrebbe essere generato casualmente e non essere derivato dal nome utente.

    
risposta data 05.07.2012 - 17:23
fonte

Leggi altre domande sui tag