Intentaré hacer esta idea lo más detallada posible, para ayudar a la comunidad a ayudar y, posiblemente, ayudar a otros con el mismo problema.
Información de fondo
Mi sistema tiene 60 usuarios. Cada usuario tiene una contraseña de 8 dígitos, que van desde 00000001-99999999. Estos son generados al azar para ser únicos por los administradores. Esta contraseña solo se usa como acceso de "verificación" a mi programa, no se usa para nada más. El programa y la contraseña se almacenan localmente.
Mi idea
Compilaría una base de datos de contraseñas de esta manera
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)
Esto significa que, aunque la contraseña del usuario solo tiene 10 mil millones de conjeturas, la contraseña para el cifrado tiene una longitud de 536870960 claves. Esto se convierte en mi tramo. Como en mi computadora, tratar de descifrar un archivo de este tipo tarda 60 segundos (esto es solo por concepto, lo haría un poco más rápido de uso).
Esto también significa que las contraseñas nunca se almacenan en el archivo, sino que es la propia contraseña que es la "verificación". Esto significa que una tabla de arco iris no funciona, la fuerza bruta sí lo hace y 10 billones no es enorme, pero si toma un segundo por supuesto, el valor de tiempo / esfuerzo entra en juego.
Aquí está el cifrado / cifrado que puedo usar;
- CALG_3DES 0x00006603 Triple algoritmo de encriptación DES.
- CALG_3DES_112 0x00006609 Cifrado DES triple de dos claves con una longitud de clave efectiva igual a 112 bits.
- CALG_AES 0x00006611 Estándar de cifrado avanzado (AES).
- CALG_AES_128 0x0000660e AES de 128 bits.
- CALG_AES_192 0x0000660f 192 bit AES.
- CALG_AES_256 0x00006610 AES de 256 bits.
- CALG_AGREEDKEY_ANY 0x0000aa03 Identificador de algoritmo temporal para los identificadores de las claves acordadas por Diffie-Hellman.
- CALG_CYLINK_MEK 0x0000660c Un algoritmo para crear una clave DES de 40 bits que tiene bits de paridad y bits clave cero para que su longitud de clave sea de 64 bits.
- CALG_DES 0x00006601 algoritmo de cifrado DES.
- CALG_DESX 0x00006604 algoritmo de cifrado DESX.
Sé que CALG_AES_256 es extremadamente fuerte pero de mis pruebas se ejecuta muy rápido. Necesito uno lento, las costuras CALG_AES_192 tardan más y, según mi investigación, son igualmente irrompibles.
¿Es esta una idea válida?