it-swarm.dev

È sicuro utilizzare PBKDF2 per l'hashing?

Vorrei avere alcune opinioni sull'opportunità o meno di utilizzare PBKDF2 per generare un hash di una password. Per i miei scopi, vorrei presumere che l'hash stesso sarà pubblicato sulla pagina Twitter della Casa Bianca (in altre parole sarà pubblico).

Starei meglio usando un numero enorme di iterazioni SHA-256 (in sostituzione delle mie 100.000 iterazioni PBKDF2)? Ci sono attacchi che possono invertire PBKD2?

Questo è il codice che sto usando:

        string salt = Utility.RandString(32);
        // convert to byte[] and store in both forms
        this.Salt = salt;
        this.BSalt = Utility.ToByteArray(salt);
        // generate the password hash
        Rfc2898DeriveBytes preHash = new Rfc2898DeriveBytes(this.Password,  this.BSalt, 100000);
        byte[] byteHash = preHash.GetBytes(32);
        this.Hash = Convert.ToBase64String(byteHash);
15
Razick

La risposta breve è che PBKDF2 è considerato appropriato e sicuro per l'hash della password. Non è buono come si potrebbe desiderare perché può essere implementato in modo efficiente con una GPU; vedi questa risposta per qualche discussione (e quella risposta per ulteriori informazioni sull'argomento).

Ci sono ci sono alcuni punti discutibili, in particolare che PBKDF2 è stato progettato per essere un Key Derivation Function , che non è lo stesso tipo di animale come funzione hash; ma si è rivelato abbastanza utilizzabile anche per l'hash della password, a condizione che non si faccia nulla di stupido (significato: assicurarsi di mantenere almeno 80 bit di output e di utilizzare un conteggio di iterazioni abbastanza elevato, idealmente alto come puoi tollerare sul tuo hardware).

Non provare a rendere la tua funzione di hash; queste cose sono sorprendentemente difficili da correggere, soprattutto perché è quasi impossibile valutare se una determinata costruzione sia sicura o meno. Usa PBKDF2. Se vuoi davvero SHA-256 (o SHA-512), usa PBKDF2 con SHA-256: PBKDF2 è una costruzione configurabile, che è tradizionalmente configurato per usare SHA-1, ma funziona ugualmente bene con SHA-256 o SHA-512.

17
Tom Leek

Penso che sia un buon KDF sebbene ce ne siano di migliori.

L'entropia della password stessa è di maggiore importanza.

http://arstechnica.com/security/2013/05/how-crackers-make-minced-meat-out-of-your-passwords/

Se riesci a ricordare la tua password, puoi utilizzare speciali tecniche di scelta rapida che riducono la forza teorica della password. Fondamentalmente pensa alle parole come a un singolo personaggio quando si tratta di calcolare l'entropia.

Una password di 6 caratteri con un costo KDF davvero elevato verrà comunque decifrata in pochissimo tempo.

2
Andrew Hoffman