Usa caso
Vorrei crittografare i dati in un database per un'applicazione Web. Esistono i seguenti requisiti:
- La decrittografia dovrebbe essere possibile solo quando un utente fornisce una passphrase
- La crittografia dovrebbe essere sempre possibile
Pertanto utilizzo la crittografia asimmetrica usando chiavi pubbliche e private. Un'operazione di crittografia può essere eseguita dall'app Web in qualsiasi momento, ma l'app Web può decrittografare solo quando l'utente fornisce una passphrase.
problema
Tutto questo funziona bene, ma il problema che ho è che ogni volta che l'utente vuole decodificare i dati, deve fornire una passphrase. Vorrei fornire all'utente l'opzione di "rimanere autenticato" per una sessione, dopo aver inserito la passphrase una volta.
Ecco dove sto avendo problemi. Se decido di memorizzare un hash della passphrase nella Session, il server sarebbe tecnicamente in grado di decodificare i dati senza l'input dell'utente. Anche ricordare un hash della passphrase in un cookie non è un'opzione.
Quali opzioni comuni ho? È possibile che il mio approccio complessivo non sia corretto?
Soluzione possibile?
Dopo un po 'di riflessione, ho intenzione di implementare quanto segue:
- L'utente invia passphrase al server
- Il server crea una chiave casuale a 128 bit
- Il server esegue l'hashing della passphrase e lo crittografa con la nuova chiave casuale utilizzando AES
- L'hash crittografato viene quindi memorizzato nella sessione sul server
- Gli utenti memorizzano nel suo cookie: ID sessione e chiave di crittografia
- Solo quando entrambi vengono forniti con una richiesta, il server può decrittografare i dati
- La sessione non sarà più valida dopo un determinato periodo
È un approccio sicuro?
I dati possono essere decifrati solo se:
- I dati crittografati vengono recuperati
- La chiave privata viene recuperata
- I dati della sessione vengono recuperati
- I cookie dell'utente vengono recuperati
Note:
-
I dati stessi non sono crittografati con la chiave pubblica, ma una chiave casuale viene generata e utilizzata per crittografare i dati utilizzando AES. Questa chiave viene quindi crittografata con la chiave pubblica, che consente una qualche forma di gestione degli utenti.
-
Tutto viene eseguito in HTTPS
-
La chiave privata è crittografata con un hash della passphrase, non con la passphrase stessa
Grazie in anticipo