Sto cercando alcuni consigli su come progettare un'applicazione web sicura per memorizzare le password. Perché reinventare la ruota? Perché non mi fido di una terza parte con tutte le mie password.
Ecco i miei pensieri:
- Ci sono 3 componenti principali: Client, Application Server, Database Server. Idealmente, mi piacerebbe che il sistema fosse abbastanza robusto, così che se l'Application Server o il Database Server sono compromessi, l'hacker non ottiene tutti i dati (se il client è compromesso, non riesco a vedere alcun modo per proteggere i dati).
- Per riuscirci, penserei che fare tutto il codice di crittografia sul client abbia senso. Quindi, se il server database è compromesso, otterrebbero solo i dati crittografati e, se il server delle applicazioni è compromesso, non otterrebbero le chiavi di crittografia perché il client le mantiene.
-
Questo crea almeno 2 problemi:
-
Crypto lato client in questo contesto indica crypto javascript che è problematico . Ecco come sto pensando di risolvere alcuni dei problemi principali.
- Non buono CSPRNG. Utilizza solo i browser con getRandomValues () e utilizza una libreria crittografica js che lo supporta.
- L'uomo nel mezzo. Forza TLS per tutte le connessioni (non aiuta se App Server è compromesso, ovviamente).
- vulnerabilità XSS. Scrivi uno script utente complementare (Greasemonkey) che calcola gli hash di ogni pagina nell'app e avvisa l'utente quando il contenuto di una pagina è cambiato. Ovviamente, questo porterà a falsi positivi quando si effettuano gli aggiornamenti, ma dovrebbe consentire di rilevare se qualcuno ha modificato il proprio codice sul server delle app o di aver inserito correttamente qualsiasi contenuto nella pagina.
-
La ricerca su dati crittografati è complicata .
- Non ho ancora soluzioni concrete per questo, ma se il piano generale sembra fattibile, ci sono buone opzioni là fuori.
-
Mi rendo conto che questa domanda è un po 'ampia, quindi sentitevi liberi di chiuderla se non è adatta al sito. Spero solo di avere qualche indicazione generale su cosa potrei mancare o dove sono i buchi nel mio piano.
Aggiornamento: Grazie a tutti per il feedback molto utile. Alla luce di alcuni dei problemi sollevati, il mio nuovo piano è rendere tutto molto più semplice. Mantenere un singolo file JSON compresso e crittografato sul server. Scrivi un'app JS che viene eseguita localmente. Tutto ciò che fa è prendere il file, decodificarlo localmente e quindi ricaricarlo quando vengono apportate modifiche. Pensieri?
Inoltre, vedo il tuo punto sull'uso di un sistema ben controllato e comprovato. Chiamami un paranoico dalla stagnola, ma non posso fidarmi di qualcun altro con così tanto accesso. Tutto ciò che serve è un dipendente / collaboratore scontento o un buco di sicurezza per per avere una giornata davvero brutta.