Beneficiare di utilizzare PBKDF2 sulla chiave generata da RNGCryptoServiceProvider?

5

Ho un programma che genera una password a 32 byte (256 bit) a lunghezza fissa usando RNGCryptoService provider e quindi usa Rfc2898DeriveBytes su quella password per arrivare a una chiave di crittografia.

Tuttavia, per risparmiare risorse di sistema, stavo pensando solo a usare la password originale. Ho ragione che non c'è alcun vantaggio nell'usare Rfc2898DeriveBytes sulla password a 256 bit generata da RNGCryptoServiceProvider ? 256 bit è la dimensione della chiave per l'algoritmo (AES-256), quindi dovrei essere in grado di utilizzare la password invariata. RNG è crittograficamente abbastanza sicuro da generare direttamente le chiavi?

    
posta Razick 18.12.2013 - 15:45
fonte

2 risposte

4

"PBKDF2" inizia con "PB" che significa "Basato su password". Questo è per password . Una password non è solo una sequenza di lettere; è una sequenza di lettere che un umano può ricordare e digitare . Una chiave a 256 bit, generata come dovrebbe essere la chiave (con un PRNG crittograficamente strong), non è una password, anche se la si codifica come lettere.

Un altro modo per dire che il nucleo della funzionalità di PBKDF2 è far fronte alla debolezza intrinseca delle password: poiché possono essere gestite da cervelli umani, sono deboli e possono essere forzate brutali. Una chiave crittografica corretta (come quella che generi con RNGCryptoServiceProvider ) non ha questa debolezza e quindi non ha bisogno di PBKDF2.

Ora c'è un uso tangenziale: PBKDF2 non è solo PB, è anche un KDF . Ha una lunghezza di uscita configurabile. Pertanto, se la tua chiave di origine è più breve di quella che ti serve, un KDF, in particolare PBKDF2, può essere utile per ottenere tutto il materiale chiave che desideri. Ad esempio, hai una chiave a 256-bit, ma hai bisogno di crittografare e per verificare l'integrità, e per questo ti piacerebbe avere una chiave AES a 256 bit e una chiave a 256 bit per HMAC. Per trasformare una chiave master a 256 bit in 512 bit di materiale chiave, è necessario un KDF. Tuttavia, PBKDF2, con le sue idiosincrasie specifiche della password (l'input è lettere , non i bit, c'è bisogno di un sale), non è adatto in generale per tali lavori. SSL / TLS utilizza per tali lavori una funzione personalizzata (che è stata analizzata in modo approfondito, poiché SSL è un obiettivo di alto profilo per crittografi) che chiama "il PRF".

    
risposta data 18.12.2013 - 15:54
fonte
3

Sì, hai ragione. Non avrai problemi nell'usare un codice a 256 bit generato casualmente password generata utilizzando un CSPRNG come chiave di crittografia.

RNGCryptoServiceProvider chiama direttamente CSPRNG CryptGenRandom di Windows in modo da poter essere sicuro che la tua chiave sia generata con un RNG sicuro.

    
risposta data 18.12.2013 - 15:49
fonte

Leggi altre domande sui tag