Come utilizzare in modo sicuro una funzione di derivazione chiave per proteggere i dati privati, è necessaria una guida

1

Ho alcuni dati protetti creati nella mia app client che desidero memorizzare sul server come backup per l'utente.

L'utente ha già una password per l'autenticazione con il server. La password non viene mai inviata al server (io uso SRP6 per autenticare l'utente).

Quindi ecco il mio pensiero ...

  1. Utilizza Fortuna PRNG con più ingressi evento (mouse, tastiera, ecc.) per generare un salt.
  2. Utilizza sale e password come input su Scrypt o PBKDF2 + SHA512 con oltre 40.000 iterazioni per generare una chiave a 512 bit.
  3. Usa i primi 256 bit della chiave per criptare i dati privati usando AES-256-CBC con IV casuale.
  4. Invia il testo cifrato e sale al server.
  5. Mostra all'utente l'iterazione KDF come numero da memorizzare. Lo chiederemo quando avremo bisogno di decodificare i dati lato client in un secondo momento.

Quindi la mia domanda è ... è abbastanza sicuro? Inizialmente avrei archiviato anche il conteggio delle iterazioni sul lato server, ma ho ritenuto che un utente malintenzionato che ha ottenuto l'accesso al server potrebbe quindi essere in grado di forzare la chiave. Poi di nuovo, se gli utenti saranno in grado di ricordare una password e un numero è un'altra domanda.

    
posta hiddentao 31.12.2013 - 19:30
fonte

1 risposta

1

"È abbastanza sicuro?" Questo dipende da chi ti stai difendendo.

In teoria, sembra che resisterà abbastanza facilmente agli attaccanti non TLA, anche se la decifratura potrebbe essere un po 'complicata, dato che non sembra che stia memorizzando la crittografia IV ovunque.

In pratica, ha un grosso buco nella sicurezza. Nessun utente del mondo reale memorizzerà il numero di iterazioni KDF. Verranno scritti da qualche parte e, poiché l'utente lo sta scrivendo, probabilmente metteranno il loro nome utente e la password proprio accanto ad esso.

    
risposta data 13.09.2014 - 04:03
fonte

Leggi altre domande sui tag