Sono abbastanza nuovo per la crittografia, ma di recente ho deciso di raccogliere la sfida di provare a scrivere un gestore di password Java in grado di memorizzare le password sul computer locale mentre sono ancora al sicuro. Questi erano i miei pensieri, quindi mi chiedevo se qualcuno potesse evidenziare evidenti difetti di sicurezza.
-
L'utente inserisce la propria password principale, ad esempio "password". "password" viene crittografata utilizzando 2 diversi semi-primari RSA a 2 diversi valori BigInteger. Per questo esempio non userò numeri massivi. Dì 5324541 e 10983747. Il primo valore crittografato, 5324541, è stato memorizzato in un file .txt in modo tale che il valore crittografato della password principale venga confrontato con questo per determinare se il programma procede o meno.
-
Ci sarà un altro file .txt che memorizza i numeri corrispondenti alle password degli utenti, ad esempio
- Facebook, 4363454
- Twitter, 3423421
- Instagram, 9997532
- Bank, 671
- iTunes, 1400000
-
Il secondo numero, 10983747 (questo non è stato memorizzato sulla macchina, è stato generato al volo quando l'utente ha inserito la password principale) verrà quindi utilizzato per generare i valori effettivi necessari per recuperare le password.
- 10983747 + 4363454
- 10983747 + 3423421
- 10983747 + 9997532
- 10983747 + 671
- 10983747 + 1400000
-
Questi saranno i valori a cui le singole password sono state assegnate. Ho pianificato l'hashing di ciascuna delle singole password in Big Integer per evitare collisioni, ma ho intenzione di rendere questa funzione abbastanza facile da calcolare e facilmente invertibile (non sicura affatto). Ad esempio, la password "ciao" si assocerebbe ad un numero, ad esempio 54338988, ma il numero memorizzato nel file txt sarebbe (54338988 - 10983747). In questo modo, nessuno è riuscito a capire quale fosse l'hash effettivo senza conoscere la seconda chiave che può essere generata al volo solo dalla password principale.
Ho anche pensato di implementare una funzionalità per la protezione contro il keylogging, se l'utente lo desiderava. Genererebbe una biiezione casuale dall'insieme di caratteri a se stessi ogni volta che correva. Se la password dell'utente era "ab" (esempio semplificato) e la mappa diceva di digitare "F" per a e "!" per b poi inseriresti "F!" come password e il programma userebbe la biiezione che ho costruito per capire cosa intendevi realmente.
Come ho detto, sono un po 'nuovo alla crittografia, quindi potrebbe esserci qualche svista importante qui. Gradirei davvero qualche idea su possibili problemi, difetti di sicurezza o suggerimenti, dato che sono davvero interessato a conoscere l'argomento. Grazie!