Lavoro su un'applicazione web con il lato client come applicazione Javascript a pagina singola e il lato server come servizio REST. Questa applicazione gestisce i dati sensibili degli utenti che non devono essere letti anche da un utente malintenzionato con accesso completo in lettura al database attivo o qualche archivio di database.
Il nostro piano è:
- quando l'utente si registra, genera chiavi asimmetriche sul lato client e le invia al server, con la chiave privata crittografata con una chiave derivata dalla password dell'utente
- autentica l'utente richiedendo la chiave privata crittografata dal server e decrittografandola sul lato client utilizzando la password dell'utente. La decrittografia eseguita correttamente è un'autenticazione corretta
- genera chiavi simmetriche quando viene creato un documento sensibile, crittografa il documento e condividi queste chiavi con gli utenti autorizzati, in stile PGP
- per il recupero della password diamo all'utente la sua semplice chiave privata e fidati di lui per tenerlo al sicuro
Si noti che assumiamo che l'attaccante non controlli né il browser né un server in esecuzione.
In questo scenario, quali sono i vettori di attacco che vedi?
È possibile implementare un meccanismo di ripristino più semplice che non richiede all'utente di memorizzare la chiave privata?
Hai altre preoccupazioni / raccomandazioni?
Grazie