L'utilizzo di una funzione a senso unico (ad esempio BCrypt) per la gestione delle password in accesso basato su password è un approccio comune.
Quando un'applicazione utilizza una chiave derivata dalla password dell'utente per crittografare una chiave privata, è sicuro affidarsi a una decifrazione corretta all'accesso?
Esempio:
-
Registrazione (tutti i passaggi eseguiti dal lato client):
- Ricava una chiave (A) dalla password dell'utente (ad esempio utilizzando PBKDF2 con iterazioni di 100k).
- Utilizza la chiave A per crittografare la chiave privata dell'utente (utilizzando la crittografia autenticata, ad esempio AES in modalità GCM).
- Archivia le informazioni richieste nel record del database dell'utente (ad esempio ciphertext, salt, ...).
-
Login (tutti i passaggi eseguiti sul client):
- Carica il record del database dell'utente per nome utente.
- Ricava la chiave (B) dalla password dell'utente (utilizzando lo stesso metodo utilizzato per la registrazione).
- Prova a decodificare la chiave privata degli utenti utilizzando la chiave B.