Revisión del algoritmo de almacenamiento de datos cifrados

0

Estoy creando una pequeña herramienta de línea de comandos (principalmente para diversión) que está destinada a almacenar datos (como contraseñas o archivos) encriptados en una base de datos local, con una contraseña suministrada por el usuario, más o menos la misma funcionalidad que KeePass.

Estoy buscando una revisión de lo que estoy haciendo para confirmar que no estoy dejando ningún agujero de seguridad y estoy usando algoritmos conocidos correctamente o si hay demasiada redundancia.

También es importante la resistencia de la fuerza bruta a los datos.

El proceso es el siguiente:

Encriptación:

  • El usuario proporciona una contraseña y datos

  • Dos claves de 32 bytes se derivan de la contraseña del usuario (llámela d_key y s_key), utilizando PBKDF2 con un 16 RNG de sal (diferente del valor para cada clave) y 10000 iteraciones (configurables)

  • Los datos se cifran utilizando el CTR de AES con d_key y la firma se calcula a partir del texto cifrado mediante HMAC sha512 con s_key

  • Las firmas de texto cifrado y hmac se almacenan en la base de datos, junto con el recuento de sales y iteraciones utilizadas.

Descifrado:

  • El usuario ingresa su contraseña e identificación de los datos que desea recuperar

  • d_key y s_key se generan usando las sales almacenadas existentes y el recuento de iteraciones.

  • Los datos se cargan descifrados usando d_key

  • HMAC se vuelve a calcular a partir de los datos encriptados, utilizando s_key y se compara con el almacenado para confirmar que los datos no se modificaron y la clave es válida.

  • Todos los datos buenos, devueltos al usuario.

Ahora mi pregunta principal es que HMAC parece redundante, pero parece ser la única forma de comprobar que la clave es válida; de lo contrario, habría que comparar un hash de los datos de texto sin formato, lo cual sería muy fácil de revertir. fuerza bruta.

Además, ¿realmente necesito dos claves separadas para AES y HMAC? Incluso si se utiliza una sal?

Por último, ¿ayuda PBKDF2 realmente? ¿O sería lo mismo simplemente usar una función hash para derivar la clave? Dado que la clave no se almacena en ningún lugar, también parece redundante, aunque supongo que si la clave no está salada y bruta iterada podría ser más fácil.

    
pregunta user1777914 05.02.2018 - 18:40
fuente

1 respuesta

1
  

Ahora mi pregunta principal es que HMAC parece redundante, pero parece ser la única forma de comprobar que la clave es válida; de lo contrario, habría que comparar un hash de los datos de texto sin formato, lo cual sería muy fácil de revertir. fuerza bruta.

HMAC es importante. El cifrado AES CTR le da confidencialidad. Pero eso no es suficiente. También necesita una verificación de integridad, que HMAC puede proporcionar. Busque Autenticación encriptada para más detalles.

Obtener la implementación correcta puede ser complicado, por lo que recomiendo usar AES GCM, que tiene la verificación de integridad incorporada.

Pero como está realizando su propia verificación de integridad ...

  

Además, ¿realmente necesito dos claves separadas para AES y HMAC?

Sí, pero fácil de hacer. Repita la misma contraseña a través de PBKDF2 pero con un recuento de iteraciones diferente (por ejemplo, 20000). Lo interesante de este enfoque es que podría usar la clave derivada de HMAC para autenticar al usuario, es decir, si la verificación HMAC falla, no intente descifrar el texto cifrado; simplemente devuelva un error que indique que la contraseña fue incorrecta. Aunque es una simplificación, así es como los administradores de contraseñas trabajan en pocas palabras: la misma contraseña se utiliza para la autenticación y el cifrado.

  

Por último, ¿ayuda PBKDF2 realmente?

Sí, para mitigar los ataques de fuerza bruta mediante:

  1. Intencionalmente, hacer que PBKDF2 sea una operación costosa, especialmente con iteraciones más altas.
  2. Expandiendo la contraseña para ocupar todo el espacio de 128 o 256 bits de AES. De lo contrario, necesitarías contraseñas ridículamente largas.
respondido por el HTLee 14.02.2018 - 17:34
fuente

Lea otras preguntas en las etiquetas