Aggiornamento della sicurezza delle password hash [duplicate]

1

Diciamo che abbiamo un database con nomi utente e password, in cui le password sono ingenuamente protette usando un singolo round di SHA-1 (come era una buona pratica un po 'di anni fa).

Ora, diciamo che desideriamo aggiornare la sicurezza dello spazio di archiviazione delle credenziali, ma gli utenti devono rimanere beatamente inconsapevoli del fatto che qualsiasi cambiamento si sta verificando.

Ovviamente, non abbiamo le password in chiaro, ma sto considerando di considerare lo sha1 (password) come se fosse la password in chiaro, e sicuro anche per quello.

Ecco il mio pensiero:

  1. Genera salt random per utente (128 bit)
  2. Sostituisci "username","sha1(password)" nel database con "username","salt","bcrypt(salt,sha1(password)),iterations=20000"
  3. Modificare il codice di convalida per convalidare le password eseguendo prima sha1, quindi bcrypt il risultato con il sale n volte, quindi controllare.

Ci sono errori evidenti in questa strategia?

Anche se non è perfetto, è ragionevole dire che questo migliora notevolmente la sicurezza delle password degli utenti, in caso di violazione?

    
posta Niels2000 06.04.2016 - 10:19
fonte

2 risposte

1

Non vedo difetti lì. Quando si utilizza bcrypt, è spesso una buona idea usare un normale hash, perché bcrypt ha uno svantaggio noto di essere limitato a soli 72 caratteri di input. L'uso di un hash prima rende le dimensioni di input effettivamente illimitate, senza ridurre la sicurezza. Quindi non solo ottieni la forza extra di bcrypt, ma continuare a usare SHA-1 migliora la flessibilità di bcrypt, piuttosto che migliorarne la forza (che migliora solo di una quantità insignificante).

    
risposta data 06.04.2016 - 10:55
fonte
1

Con questo schema stai certamente rendendo più difficile la vita di un aggressore. Ecco l'algoritmo di attacco generale per il cracking delle password in chiaro con crittografia protetta da bcrypt:

  1. Ottieni hash (ovviamente)
  2. Genera password per lo strumento di cracking della password
  3. Esegui il tentativo di cracking

Ed ecco l'algoritmo di attacco per crackare le tue password sha1-hashed-than-bcrypted:

  1. Ottieni hash
  2. Genera password per lo strumento di cracking della password
  3. Calcola SHA-1 corrispondente
  4. Esegui il tentativo di cracking

Quindi, come puoi vedere, l'attaccante deve eseguire un passo aggiuntivo a buon mercato per decifrare la password. Pertanto, il tuo schema dovrebbe fornire almeno lo stesso livello di sicurezza dell'uso di bcrypt per proteggere le password in chiaro.

Come piccolo bonus, stai ricevendo uno schema che non è implementato immediatamente nei comuni strumenti di cracking. Renderà la password più difficile se l'aggressore non è molto sofisticato e non sarà in grado di capire lo schema di hashing. Ma questa caratteristica è la sicurezza per oscurità, quindi è meglio aspettarsi che l'attaccante sappia tutto sull'approccio di hashing della password.

    
risposta data 06.04.2016 - 10:46
fonte

Leggi altre domande sui tag