Sto scrivendo un'app Web per la gestione delle informazioni personali che viene eseguita nel cloud. Per questo sto considerando la crittografia lato client usando AES256 con window.crypto e SJCL come fall-back per i browser più vecchi. La crittografia sarebbe quindi basata sulla password di accesso dell'utente. Inoltre, sto anche pensando di eseguire l'hashing della password sul lato client.
In realtà aumenta la privacy degli utenti? O mi sto perdendo qualcosa? So che il modo standard è quello di archiviare i dati "in chiaro" e fare l'hashing sul lato server.
EDIT Per aggiungere un ambito più chiaro, l'intenzione è: nel caso in cui il database venga rubato, i dati dell'utente dovrebbero essere difficili da leggere. (Almeno non saranno dati chiari in quel caso.) Allo stesso tempo, quando l'utente [email protected] usa 123456 per il suo account di posta e per il suo account PIM WebApp, un utente malintenzionato deve ancora invertire l'hash della password in per accedere a Gmail.com di foo.
In particolare, immagina il seguente scenario: un utente malintenzionato può ottenere il database e controlla i record del database dell'utente [email protected]. Ottiene l'hash e alcuni dati utente crittografati. Con l'hash egli può accedere alle API PIM di WebApp. Tuttavia non può leggere i dati dell'utente.
Con l'hash trapelato, l'utente malintenzionato potrebbe facilmente compromettere i dati tramite l'API, ma non importa tanto per questo scenario. L'obiettivo principale è aumentare la privacy dei dati dell'utente in caso di perdita di un database.
(Inoltre, vorrei consentire all'utente di non fidarsi un po 'di meno dell'hoster WebApp leggendo i dati privati.Sono sicuro che questa soluzione non si avvicina a questo, ma almeno potrebbe essere un primo passo.)
Per quanto riguarda le prestazioni: l'API Web Crypto può fare PBKDF2 che mi sembra soddisfacente per l'hashing. ( Esempio Github ) SJCL potrebbe essere troppo lento come fallback, quindi potrebbe avere senso traspondere C ++ in (asm. ) js.