Come memorizzare le password nel database in modo che possano essere recuperate?

6

Sto sviluppando un'app Web per la gestione delle password. È solo per divertimento: non sto esponendo le password di nessuno.

La mia idea era di usare hashing + salting, ed è quello che ho fatto per la master password. Ma poi ho capito che devo recuperare le password degli account per usarle (e mi sono sentito un po 'stupido), quindi l'hashing non è un'opzione.

Ovviamente la crittografia simmetrica è inutile in questo caso perché abbiamo lo stesso problema con la chiave di decodifica. E la crittografia asimmetrica potrebbe essere un'opzione ma non molto pratica (l'utente ha la chiave privata e deve usare ogni volta che vuole ottenere una password: non pratico).

Non so come posso usare questi strumenti crittografici (o altri) per risolvere questo problema.

Riepilogo : devo memorizzare le password in un database, ma devo essere in grado di recuperarle in testo semplice.

    
posta Julen 29.07.2015 - 20:26
fonte

2 risposte

10

Il normale meccanismo per un gestore di password è di avere una sorta di "chiave master" e crittografare i dati (simmetricamente) con quella chiave. La chiave principale, nel tuo caso, derivata dalla password principale tramite corretta hashing della password (quindi diventa, in questo caso, derivazione della chiave basata su password ). Quindi usa bcrypt o PBKDF2 per trasformare la password principale dell'utente in una chiave K e mantenere tutti i dati per quell'utente crittografati con K .

Rendere ciò come un'applicazione Web è di saggezza discutibile. Anche se si fa tutto il lato client in JavaScript, quel codice JavaScript è ancora inviato dal server e il codice che vede tutte le password per tutti gli utenti, quindi il server diventa un bersaglio molto sensibile e succoso (se il server va sotto controllo ostile , che si trasformerebbe in un'orgia di furto di password).

    
risposta data 29.07.2015 - 21:03
fonte
0

Puoi vedere come le banche lo fanno probabilmente , ma la sicurezza dipende davvero dal link più debole e personalmente io prestare molta più attenzione alla sicurezza web (XSS, CSRF ecc.)

Sarà molto meglio se il front-end è responsabile della decrittografia, quindi la password principale e le password non sono mai presenti nella memoria del server o nella rete. Questo però limita la quantità di trucco che puoi inserire nel database di back-end.

    
risposta data 05.08.2015 - 17:23
fonte

Leggi altre domande sui tag