Utilizzo di PBKDF2 con AES e SHA2

4

Uso i seguenti input per crittografare usando AES:

  • UserPassword (testo normale)
  • secretkey
  • RandomIV

Uso i seguenti input per crittografare usando SHA512:

  • UserPassword (testo normale)
  • RandomSalt

Mi piacerebbe migliorare entrambi i metodi di crittografia sopra utilizzando la funzionalità di derivazione della chiave. Userò la classe .NET Rfc2898DeriveBytes che richiede quanto segue:

  • MasterPassword
  • Salt
  • iterazioni


Per AES:

Devo usare AES SecretKey per il parametro PBKDF MasterPassword? Attualmente sto generando un AES RandomIV e memorizzo IV + CIPHER nel DB, quando si aggiorna per usare PBKDF è corretto fare quanto segue:

  • Non generare AES RandomIV
  • Genera un nuovo Salt casuale per il PBKDF
  • Utilizza i primi x bit di DerivedKey come AES SecretKey
  • Usa i secondi x bit di DerivedKey come AES RandomIV
  • Salva il "nuovo random random" + CipherText nel DB
  • Sia AES Encrypt & I metodi di decifrazione avranno un parametro Salt PBKDF piuttosto che un parametro AES IV (ignorare il fatto che sono entrambi solo byte [] 's)

Per SHA512:

  • È corretto utilizzare UserPassword (testo in chiaro) per il parametro PBKDF MasterPassword (invece di memorizzare in modo sicuro una MasterPassword segreta come AES)?

  • Devo usare SHA512 RandomSalt come PBKDF Salt?

  • Quando si chiama il metodo SHA.computehash, dovrebbe essere presente solo il comando DerivedKey, o dovrebbe essere aggiunto il sale al DK?

  • Quanti byte di DerivedKey dovrebbero essere crittografati, 64?

posta ShocK 01.06.2012 - 14:55
fonte

1 risposta

6

Consente di rimuovere alcune regole di base. SHA512 non è una funzione di crittografia, è una funzione di hash. PBKDF2 (Supponendo che si stia utilizzando la seconda variante più recente ...) non è una funzione di hash o una funzione di crittografia, è un modo di utilizzare una funzione di hash e viene comunemente utilizzata per generare la chiave per un codice a blocchi o un codice di flusso.

Nella maggior parte dei casi non credo che PBKDF2 sia molto utile. Il problema è che se si utilizza una funzione di hash come SHA512 con PBKDF2, un utente malintenzionato può ancora utilizzare un cluster FPGA o GPU. Bcrypt è più difficile da attaccare utilizzando queste tecnologie rispetto a PBKDF2 + SHA512, indipendentemente dal numero di round che scegli di utilizzare con PBKDF2. Potresti usare PBKDF2 + Bcrypt e questa non è una cattiva scelta, tuttavia continuo a pensare che scrypt sia una scelta migliore perché sia l'utilizzo della CPU che l'utilizzo della memoria sono variabili, in cui, come per PBKDF2, solo l'utilizzo della CPU e la funzione hash utilizzata sono variabili.

Al prossimo progetto IV:

Use the first x bits of the DerivedKey as the AES SecretKey
Use the second x bits of the DerivedKey as the AES RandomIV

Ok, quindi sulla base di questo disegno vorrei concludere che non hai idea di cosa sia un IV o perché sia usato. Quindi il punto di un IV è che in nessun punto citerà lo stesso messaggio con lo stesso tasto + iv. Il tuo design proposto è in chiara violazione di CWE-329 . L'attaccante può conoscere la IV, non importa, ma deve sempre essere casuale . Esistono alcuni motivi per cui , e suggerisco di prendere una copia di Crittografia pratica perché ha un intero capitolo dedicato a questo argomento.

Anche la modalità CBC non è autenticata, sono un fan di modalità OMAC1 .

    
risposta data 02.06.2012 - 18:49
fonte

Leggi altre domande sui tag