Web App che crittografa i dati sul client con la password di accesso?

1

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.

    
posta Philip 04.03.2017 - 20:57
fonte

1 risposta

2

Vedi questo e questa domande e tutte le risposte sull'hashing / encyption lato client.

Per riassumere, JavaScript del browser è troppo lento per la funzione di hashing della password come bcypt o scrypt che vorrete usare per ricavare una chiave per AES dalla password dell'utente. Sarà necessario ridurre il numero di iterazioni e / o altri parametri hash e quindi ridurre la sicurezza generale dell'implementazione. Se si desidera l'hashing / encyption lato client, sarà necessario creare estensioni del browser in modo molto simile ai popolari gestori di password online.

EDIT:

Se tu o l'utente non diffidate dell'ospite di WebApp leggendo i dati privati come potete fidarvi di WebApp che hoster per fornire codice affidabile? Cosa deve fermare l'hoster di WebApp che inietta codice JavaScript che perde informazioni prima della crittografia?

Per approfondire più direttamente i problemi con la crittografia del browser, vedi questi link: link

link

Per un parere più recente:

link

Riguardo alla privacy degli utenti, non archiviare testo semplice. È possibile utilizzare SSL per trasmettere testo in chiaro e memorizzarlo crittografato utilizzando una chiave derivata dalla password dell'utente. Memorizza la password con hash per l'autenticazione. Gestisci tutto il lato server di crittografia e hashing. O quello o consegnare l'estensione nativa di applicazione / browser web che può essere firmata e verificata. In tal caso non devi fidarti dell'hoster di WebApp, lo userai solo per l'archiviazione dei dati (criptata).

    
risposta data 04.03.2017 - 23:04
fonte

Leggi altre domande sui tag