Si tratta di una configurazione sicura per un gestore di password Java?

0

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.

  1. 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.

  2. 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
  3. 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
  4. 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!

    
posta jmon117 29.10.2016 - 19:34
fonte

1 risposta

3

Prima di tutto non dovresti tirare da solo in situazioni in cui la sicurezza è di qualsiasi importanza. (Solo giocando per divertimento e l'apprendimento è una questione diversa, ovviamente.)

In secondo luogo, sono d'accordo con schroeder che dovresti esaminare il codice sorgente dei gestori di password esistenti e imparare da loro.

Detto questo, ecco due grossi problemi con il tuo progetto:

  • Diciamo che un utente malintenzionato conosce ad es. la password Facebook della vittima. Esegue la password attraverso la tua funzione e ottiene 15347201. Quindi sottintende il valore memorizzato per Facebook nel tuo file di testo (4363454) e ottiene il numero segreto 10983747. Ora ha il numero che le consentirà di decifrare qualsiasi altra password.
  • Non c'è alcun passaggio che è lento in fase di progettazione per prevenire la forzatura bruta. Solitamente viene usato lo stretching delle chiavi per questo, cioè l'hashing della password principale con una lenta funzione hash (ad esempio bcrypt di PBKDF2) per generare la chiave di crittografia.

Potrebbero esserci anche altri difetti, ma questo dovrebbe essere sufficiente per farti scegliere un altro schema.

    
risposta data 29.10.2016 - 20:04
fonte

Leggi altre domande sui tag