Sto lavorando su un'app Web e voglio offrire agli utenti l'opzione di "crittografare" il loro account. Ciò non crittograferebbe tutto ciò che è relativo a loro nel database. Solo alcuni campi critici.
Ho già letto l'ottima risposta di DWs sul problema ( link ), e nonostante tutto ciò , Voglio farlo, a causa di alcune differenze chiave:
Prima di tutto: nessuno dei dati che sto crittografando è di fondamentale importanza. Questa è un'app giocattolo, per lo più per me, da cui imparare e forse mettere su un curriculum. Non ci sono utenti reali.
In secondo luogo, sto usando i framework e le tecnologie esistenti. È un'app Django, quindi ho già un sacco di protezioni e alcune impostazioni predefinite sane come la protezione CSRF. Sono consapevole che non è la polvere magica di Pixie che renderà sicura la mia applicazione, ma "... sto ancora imparando e facendo il meglio che posso."
Con tutto ciò, ecco come voglio implementarlo:
- L'utente registra un account. Durante la registrazione, viene offerta l'opzione per la crittografia dell'account e una password separata da utilizzare per i campi crittografati.
- Gli account crittografati hanno un bool
encrypted
, impostato su true. Questa è l'unica differenza negli account sul back-end. - Quando l'utente esegue il login, se
encrypted=True
, viene visualizzato un prompt per consentire loro di digitare la propria password, che è archiviata nella memoria lato client, e utilizza la crypto JS del browser (lo so, lo so ... ) per crittografare / decodificare le voci.
Voglio assicurarmi che nessuno tranne l'utente possa leggere le proprie voci e questo sembra un modo semplice per raggiungere questo obiettivo. Ma siccome questa è la sicurezza, c'è probabilmente un milione di modi per farlo in modo sbagliato, e non c'è un modo perfetto per farlo, quindi sono molto interessato alle opinioni di qualcuno più esperto di me e sarei davvero grato se qualcuno potesse evidenzia potenziali vulnerabilità o aree in cui le cose possono andare storte.