Ho bisogno di memorizzare l'input sensibile di un utente su un sito web (come SSN) in un database. Questi dati non possono essere un hash unidirezionale. I dati, una volta inseriti in db, non verranno mai più inviati a un sito Web oa qualcuno non affidabile, ma potrebbero essere inviati tramite il server a un'altra API attendibile, quindi devo essere in grado di leggerlo.
Supponiamo di disporre di adeguati controlli di accesso, che le chiavi siano archiviate / gestite correttamente e che tutte le informazioni siano trasmesse in modo sicuro tramite HTTPS.
Da quello che ho letto online, il metodo che sembra avere più senso è l'utilizzo di una crittografia a chiave asimmetrica pubblica / privata. Quindi:
- Genera una chiave pubblica / privata
- Fornisci la chiave pubblica al client
- Cripta i dati con la chiave pubblica sul client e invia al server
- Archivia i dati crittografati in DB
- Decodifica con chiave privata quando necessario
Alcune domande:
- Mi mancano alcuni passaggi qui o frainteso qualcosa?
- Devo generare una nuova chiave pubblica per ciascun utente sul mio sito web? O va bene usare la stessa chiave pubblica ogni volta che un utente mi invia un SSN?
- Va bene archiviare i dati crittografati pubblicamente direttamente sul db? O c'è qualcos'altro che dovrei fare prima di memorizzarlo?
Grazie!