La mia funzione di hashing è abbastanza buona

1

C'è una falla evidente con questa funzione di hashing (scritta in PHP)?

function hash($password) {
  sleep(1); // Make hashing slow
  $hash = "";
  $iterations = strlen($password);
  for ( $i = 0; $i < $iterations; $i++ ) {
      $hash = hash('sha512', USER_PASSWORD_SALT . $password);
  }
  return $hash;
}

Grazie.

    
posta Jonathan Roy 02.04.2015 - 18:35
fonte

2 risposte

15

Sì, ci sono evidenti difetti. Eccone alcuni:

  • Non è possibile rallentare l'hashing introducendo semplici ritardi. Un attaccante non deve valutare l'hash nello stesso modo in cui hai fatto; hanno solo bisogno di ottenere la stessa risposta alla fine. Ciò significa che qualsiasi cosa stia facendo l'hash slow deve essere un componente necessario dell'hash - deve essere impossibile calcolare l'hash senza farlo. In effetti, il sleep(1) è il tipo di cosa che devi evitare , in quanto rende l'hashing legittimo più lento dell'hacker dell'attaccante (l'intero punto del design hash è di minimizzare il vantaggio di un utente malintenzionato ).
  • Il numero di iterazioni è la lunghezza della password. Questo non è abbastanza Vuoi almeno decine di migliaia di iterazioni.
  • Il sale sembra essere globale. Quello non è un sale; un sale deve essere diverso per ogni utente.
  • Questo non è un algoritmo standard. Ciò significa che non è una buona idea affidarsi a un uso effettivo. Ci sono tre algoritmi con una buona dose di analisi ( scrypt , bcrypt , PBKDF2). Questi sono stati osservati da veri crittografi e sembrano sicuri. Usane uno.
  • Il modo corretto per eseguire un hash della password in PHP è con la funzione password_hash , che gestisce tutto per te (implementare un algoritmo tu stesso è una pessima idea per la sicurezza tanto quanto creare il tuo algoritmo).
risposta data 02.04.2015 - 18:46
fonte
1

n. sembra che tu stia usando una costante globale per il sale. vuoi che cambi per ogni record utente.

vedi link

Inoltre, @coverosgene ha ragione - non ha senso rallentare il tuo metodo di hash.

    
risposta data 02.04.2015 - 18:41
fonte

Leggi altre domande sui tag