È possibile utilizzare una funzione di derivazione della chiave per convertire la password dell'utente in una chiave di crittografia. Quindi si utilizzerà un generatore di numeri pseudocasuali crittograficamente sicuro per generare una chiave separata che crittograferebbe i dati dell'utente. Dovresti quindi utilizzare la chiave derivata per crittografare la chiave generata. Il testo cifrato risultante della chiave di crittografia dei dati potrebbe quindi essere salvato in modo sicuro nella tabella utente del database (chiamare il campo "encryptedkey" se lo si desidera). In questo modo, la password dell'utente diventerà il mezzo per decodificare la chiave crittografata dell'utente. La chiave che effettivamente crittografa i dati viene decodificata solo per un tempo sufficiente a decrittografare i dati crittografati. È necessario memorizzare quella chiave nella sessione per evitare la necessità di chiedere all'utente la sua password per ogni occorrenza di decrittografia.
In alternativa, è possibile memorizzare la chiave di crittografia della chiave in un servizio di gestione delle chiavi come quello offerto da Amazon AWS. In questo modo si recupera la chiave da Amazon su TLS usando solo un riferimento alla chiave. Ovviamente in questo caso sarà comunque necessario memorizzare le credenziali di autenticazione per il KMS da qualche parte nella propria architettura, possibilmente in un file di configurazione altamente sicuro recuperato da remoto.
-
Generatore di numeri casuali ⟶ Aiuta a creare la chiave # 1.
Questa chiave crittografa i tuoi dati. Rimane costante nel tempo. È necessario generare questa chiave quando l'utente si registra per la prima volta. Utilizzare un CSPRNG (generatore di numeri pseudo casuali crittograficamente sicuro) per garantire casualità e imprevedibilità sufficienti.
-
Password ⟶ Convertita in chiave # 2 con PBKDF2.
Questa chiave, la chiave # 2, viene utilizzata per crittografare la chiave 1. Dovrai insistere sulla chiave # 2 nella sessione dell'utente. Memorizza il modulo crittografato di Key # 1 nella tabella utente, in un campo chiamato (forse) "encryptedkey".
-
Modifica delle password
Ogni volta che l'utente cambia la propria password, è sufficiente eseguire nuovamente il punto 2, piuttosto che crittografare tutti i dati, tutto da capo. Basta convertire la nuova password in una chiave (Chiave n. 2), ricodificare la chiave n. 1 e sovrascrivere il vecchio valore per la forma crittografata della chiave n. 1.
-
Crittografia / decrittografia dei dati
Quando l'utente ha effettuato l'accesso, eseguire il passaggio 2. Una volta convertita la password in una chiave, decifrare la chiave n. 1. Ora che hai decrittografato la chiave # 1, puoi utilizzare la chiave 1 per crittografare e decrittografare i tuoi dati.