Metodo di crittografia e altri problemi di sicurezza per un semplice gestore di password [chiuso]

0

Ho pensato di imparare un po 'di programmazione della crittografia rendendomi un semplice programma di gestione password che posso potenzialmente utilizzare anche per tenere traccia delle mie password. L'idea è che il mio programma manterrebbe un elenco di password in forma crittografata e nomi dei servizi per i quali vengono utilizzate le password. Quindi potrei fornire come input il nome del servizio a cui vorrei accedere e una password principale e il programma mi assegnerebbe la password per quel servizio.

Quale metodo di crittografia dovrei usare? Quali altri problemi di sicurezza dovrei pensare? È un obiettivo praticabile (senza esperienza) fare di me stesso un gestore di password che sia abbastanza sicuro da usarlo effettivamente?

    
posta Echows 28.11.2013 - 16:01
fonte

2 risposte

2

Buono per te per aver provato a imparare questo. Tieni presente che qualsiasi cosa produca non dovrebbe essere inserita in un vero ambiente di produzione, nemmeno a livello personale. Considera questa come un'opportunità apprendimento e non una ricetta per cucinare il tuo gestore di password. Di solito, dovresti fare qualcosa in questo modo:

  • Genera una chiave casuale a 256 bit. Questa è la tua chiave di crittografia master.

  • Prendi la password principale ed eseguila attraverso PBKDF2 insieme a 64-bit salt e ottieni 128 -bit chiave. Questa è la tua chiave di crittografia secondaria.

  • Utilizza la chiave di crittografia secondaria per crittografare la chiave di crittografia master utilizzando AES nel Modalità SEEX e memorizzala da qualche parte.

  • Per il database, utilizza il formato che desideri. Dato che non sono sicuro quale scegliere, ti dirò XML . Cripta il database utilizzando la chiave di crittografia master.

  • Quando l'utente vuole accedere al database, carica il file crittografato nella memoria, prendi la password principale ed eseguila attraverso PBKDF2 con sale e ottieni la chiave secondaria, usa la chiave secondaria per decodificare la chiave master, e finalmente usa la chiave master per decifrare il database.

  • Dopo che l'utente ha terminato l'accesso; aggiungendo; modifica; o eliminando le voci dal database, è sufficiente crittografarlo nuovamente e scartare tutto dalla memoria.

  • Quando l'utente vuole cambiare la password, decifrare la chiave secondaria dalla vecchia password, decrittografare la chiave master, derivare una nuova chiave secondaria dalla nuova password, usare quella chiave per crittografare la chiave principale. In questo modo, non è necessario decrittografare e crittografare nuovamente il database quando la password viene modificata, poiché la chiave principale viene mantenuta uguale.

Infine, ti consiglio di dare un'occhiata al codice sorgente di KeePassX . Un sacco di informazioni possono essere raccolte da lì.

Lo ripeto, non utilizzare l'applicazione effettiva che produci . Potresti (e molto probabilmente lo farai) fare qualcosa di sbagliato ad un certo punto. Diamine, le mie istruzioni potrebbero essere (e probabilmente sono) sbagliate.

Buon apprendimento!

    
risposta data 28.11.2013 - 17:01
fonte
0

Se vuoi imparare come creare un buon gestore di password, inizierei guardando ai gestori di password open source. Verifica come funzionano (implementazione del database + metodi di crittografia) e prova a creare qualcosa da te.

Per la crittografia utilizzata vorrei utilizzare AES256 CBC. AES è ben documentato.

Non utilizzare la tua implementazione!

    
risposta data 28.11.2013 - 16:18
fonte

Leggi altre domande sui tag