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 ...
- Utilizza Fortuna PRNG con più ingressi evento (mouse, tastiera, ecc.) per generare un salt.
- Utilizza sale e password come input su Scrypt o PBKDF2 + SHA512 con oltre 40.000 iterazioni per generare una chiave a 512 bit.
- Usa i primi 256 bit della chiave per criptare i dati privati usando AES-256-CBC con IV casuale.
- Invia il testo cifrato e sale al server.
- 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.