Para convertir una contraseña en una clave AES, PBKDF2 es la forma más sencilla de manejarlo. Simplemente asegúrese de que la contraseña tenga suficiente entropy .
Usted hace necesita usar sal, porque está allí para protegerse contra los ataques de la mesa del arco iris.
Dependiendo de su plataforma, es posible que ya haya bibliotecas disponibles para ayudar con esto. Si no, recomendaría algo parecido a la solución de Lucus Kaufman.
Configuración:
- Genere una clave aleatoria de 128 bits (k1), una aleatoria IV y una aleatoria salt (64 bits probablemente sea suficiente).
- Use PBKDF2 para generar una clave de 256 bits a partir de su contraseña y la sal, luego divídala en dos teclas de bit (k2, k3).
- Asegúrese de que la salida nativa de su algoritmo sea de al menos 256 bits, o esto será lento. PBKDF2- SHA256 es una buena opción. No use dos algoritmos separados para esto, ya que solo lo hará más lento y más complicado para usted, pero no ralentizará a un atacante.
- Si su contraseña ya tiene una entropía suficientemente alta, entonces puede permitirse utilizar un número bastante bajo de iteraciones. 1000 iteraciones serán tan rápidas que ni siquiera lo notará (especialmente porque solo tendrá que descifrar la clave cuando se inicie el programa), así que no hay razón para ir por debajo de eso. Si su contraseña es más débil, puede aumentar el número de iteraciones para compensar.
- No recomiendo usar bcrypt para esto, ya que su salida es del tamaño incorrecto y deberías hacer un hash De nuevo, lo que añade una complejidad innecesaria.
- Creo que scrypt puede generar resultados de tamaño arbitrario, por lo que sería una buena opción si está disponible (esto puede no estar permitido si desea conformidad con FIPS ).
- Usa k2 para AES encripta k1 usando el IV aleatorio.
- Guarde la clave cifrada, k3, el salt y el IV en un archivo en alguna parte.
Cifrado / Descifrado:
- Use PBKDF2 + su contraseña y la sal del archivo para regenerar k2 y k3.
- Verificar k3. Si no coincide, su contraseña es incorrecta o alguien manipuló su archivo. Detente aquí.
- Usa k2 y el IV del archivo para descifrar k1.
- Use k1 para cifrar o descifrar archivos.
Cambio de contraseña
- Descifre k1 como en la sección Cifrado / Descifrado .
- Siga los pasos en Configuración , utilizando el mismo k1, pero regenere todo lo demás (nuevo salt aleatorio e IV, genere k2 y k3 a partir de la nueva contraseña).
No almacene k2 en ningún lugar. No almacene k1 sin cifrar. Hacer cualquiera de estas cosas romperá la seguridad de su sistema.
Si no te importa poder cambiar tu contraseña (consideraría que esta es una característica muy importante, pero tal vez no lo hagas), entonces podrías omitir los pasos relacionados con k1 y usar k2 como tu clave AES y k3 para verificarlo.
También puede resultar útil generar otra clave para HMAC , para que pueda verificar que los archivos cifrados no han sido manipulados Si desea hacerlo, puede generar una clave HMAC de 128 bits y cifrarla y almacenarla con la clave AES principal.