Pregunta

Estoy escribiendo un programa que toma una frase de contraseña del usuario y, a continuación, escribe algunos datos cifrados a archivo.El método que he llegado hasta ahora es la siguiente:

  • Generar un 128 bits IV de hashing el nombre de archivo y la hora del sistema, y la anota en el principio del archivo.
  • Generar una clave de 256 bits a partir de la contraseña utilizando SHA256.
  • Cifrar los datos (a partir de 32 bits firma estática) con esta clave el uso de AES en modo CBC, y escribir en archivo.

Cuando descifrar, el IV es de lectura y, a continuación, la frase de contraseña que se utiliza para generar la clave de la misma manera, y la primera de 32 bits se compara con lo que la firma debe estar en el fin de saber si la clave es válida.

Sin embargo, yo estaba mirando el AES ejemplo siempre en PolarSSL (la biblioteca estoy utilizando para hacer el hashing y de cifrado), y una mucho más compleja método:

  • Generar un 128 bits IV de hashing el nombre de archivo y el tamaño del archivo, y la anota en el principio del archivo.
  • Generar una clave de 256 bits de hashing (SHA256) la frase de paso y el IV juntos 8192 veces.
  • Inicializar el HMAC con esta clave.
  • Cifrar los datos con esta clave el uso de AES en modo CBC, y escribir en archivo, mientras que la actualización de la HMAC con cada bloque encriptado.
  • Escribir el HMAC para el final del archivo.

Tengo la impresión de que el segundo método es más seguro, pero no tengo el conocimiento suficiente para que una copia de seguridad, aparte de que se ve más complicado.

  • Si es más seguro, ¿cuáles son las razones para esto?
  • Se anexa un HMAC para el final del archivo es más seguro que tener una firma en el comienzo de los datos cifrados?
  • ¿Hash 8192 veces aumentar la seguridad?

Nota: Este es un proyecto de código abierto para cualquiera que sea el método que yo uso, que estará disponible gratuitamente para cualquier persona.

¿Fue útil?

Solución

La segunda opción es más segura.

Su método, no proporciona ningún mensaje de integridad.Esto significa que un atacante puede modificar partes del texto cifrado y alterar lo que el texto descifra a.Siempre que no modifique nada de lo que va a alterar su 32 bits firma estática, a continuación, vas a confiar en él.El HMAC en el segundo método proporciona la integridad del mensaje.

Por hash de la clave 8192 veces se añade computacional pasos para que alguien pruebe y bruteforce la clave.Suponga que un usuario tomará un diccionario basado en contraseña.Con su método, un atacante debe realizar SHA256(someguess) y, a continuación, intentar descifrar.Sin embargo, con el PolarSSL versión, tendrán que calcular SHA256(SHA256(SHA256...(SHA256(someguess))) para 8192 veces.Esto sólo será lento que un atacante hacia abajo, pero podría ser suficiente (por ahora).

Para lo que vale, por favor, utilice una biblioteca existente.La criptografía es duro y es propenso a sutiles errores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top