Cercherò di rendere quest'idea il più dettagliata possibile, per aiutare la comunità ad aiutare e ad aiutare gli altri con lo stesso problema.
Informazioni di background
Il mio sistema ha 60 utenti. Ogni utente ha una password di 8 cifre, che va da 00000001-99999999. Questi sono generati casualmente per essere unici dagli amministratori. Questa password è utilizzata solo come "controllo" per accedere al mio programma, non è utilizzato per nient'altro. Il programma e la password sono entrambi memorizzati localmente.
La mia idea
Vorrei compilare un database di password in questo modo
Password = UsersPassword
Data = Randomly generated 128bit string (So every encryption is unique)
NewPassword = ""
For I to 20
NewPassword = NewPassword & Hash(Password, SHA_512)
Next
EncryptFile(Data, UserPassword, ALG)
Ciò significa che, sebbene la password dell'utente abbia solo 10 miliardi di tentativi, la password per la crittografia è lunga 536870960 chiavi. Questo diventa il mio tratto. Dal momento che il mio computer tenta di decodificare un file di questo tipo impiega 60 secondi (questo è solo per il concetto, lo renderei un po 'più veloce per l'uso).
Questo significa anche che le password non sono mai memorizzate nel file, ma piuttosto la password stessa che è il "controllo". Ciò significa che un rainbowtable non funziona, il brute-forcing lo fa e 10 miliardi non sono enormi ma se ci vuole un secondo per indovinare il valore di tempo / sforzo entra in gioco.
Ecco la crittografia / crittografia che posso usare;
- CALG_3DES 0x00006603 Algoritmo di crittografia Triple DES
- CALG_3DES_112 0x00006609 Crittografia DES tripla a due chiavi con lunghezza della chiave effettiva pari a 112 bit.
- CALG_AES 0x00006611 Advanced Encryption Standard (AES).
- CALG_AES_128 0x0000660e AES 128 bit.
- CALG_AES_192 0x0000660f AES 192 bit.
- CALG_AES_256 0x00006610 AES a 256 bit.
- CALG_AGREEDKEY_ANY 0x0000aa03 Identificatore di algoritmo temporaneo per handle di chiavi concordate da Diffie-Hellman.
- CALG_CYLINK_MEK 0x0000660c Un algoritmo per creare una chiave DES a 40 bit con bit di parità e bit chiave azzerati per rendere la lunghezza della chiave di 64 bit.
- CALG_DES 0x00006601 Algoritmo di crittografia DES.
- CALG_DESX 0x00006604 Algoritmo di crittografia DESX.
So che CALG_AES_256 è estremamente strong ma dai miei test viene eseguito molto velocemente. Ho bisogno di uno lento, CALG_AES_192 cuciture da prendere più a lungo e dalla mia ricerca è ugualmente indistruttibile.
Questa è un'idea valida?