È sicuro usare PBKDF2 per l'hashing?

11

Vorrei avere alcune opinioni su come sarebbe sicuro o meno usare 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).

Sarebbe meglio usare un numero enorme di iterazioni SHA-256 (in sostituzione delle 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);
    
posta Razick 17.12.2013 - 18:47
fonte

2 risposte

14

La risposta breve è che PBKDF2 è considerato appropriato e sicuro per l'hashing della password. Non è il massimo che si possa desiderare perché può essere implementato in modo efficiente con una GPU; vedi questa risposta per alcune discussioni (e quella per ulteriori informazioni sull'argomento) .

Ci sono alcuni punti discutibili, in particolare che PBKDF2 è stato progettato per essere una funzione di derivazione chiave , che non è lo stesso tipo di animale di una funzione hash; ma si è rivelato abbastanza utilizzabile anche per l'hashing delle password, purché non si faccia nulla di stupido con esso (ovvero: assicurarsi di conservare almeno 80 bit di output e utilizzare un numero di iterazioni sufficientemente elevato, idealmente il più alto possibile) come puoi tollerare sul tuo hardware).

Non provare a creare la tua funzione di hash; queste cose sono sorprendentemente difficili da ottenere, specialmente perché è quasi impossibile valutare se una data costruzione è sicura o meno. Usa PBKDF2. Se vuoi veramente 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.

    
risposta data 17.12.2013 - 19:04
fonte
2

Penso che sia un buon KDF anche se ce ne sono di migliori.

La stessa entropia della password è di maggiore importanza.

link

Se è possibile ricordare la password, è possibile utilizzare tecniche di scorciatoia speciali che riducono la forza teorica della password. In pratica, pensa alle parole come a un singolo personaggio quando si tratta di calcolare l'entropia.

Una password di 6 caratteri con un KDF a costi davvero elevati verrà comunque eliminata in pochissimo tempo.

    
risposta data 17.12.2013 - 19:02
fonte

Leggi altre domande sui tag