pregunta sobre el hashing de un archivo cifrado aes

4

Estoy almacenando múltiples datos confidenciales en un servidor que no tengo. Los datos se encriptan usando aes-256 usando el modo cbc. Las llaves están solo conmigo, y se almacenan de forma segura. Me preocupa que los datos se corrompan en el servidor a través de la transferencia (esto lo soluciono haciendo un hash md5 después de que se realiza la transferencia ssh). La otra cosa que me preocupa es que un atacante en el servidor modifique los datos a propósito, de modo que el hash md5 sea el mismo.

¿Descifrar un archivo alterado con aes simplemente causaría que los datos descifrados se corrompan? y por último es md5 débil para este escenario, ¿es hmac necesario?

    
pregunta marcwho 29.08.2013 - 15:00
fuente

2 respuestas

3

Si toma un archivo cifrado con CBC y modifica un bit (es decir, cambia un bit cero a uno, o viceversa), luego, al descifrarlo, esto:

  1. mezclar más o menos aleatoriamente el bloque correspondiente en los datos de texto simple;
  2. voltear exactamente un bit en el siguiente bloque (es decir, 128 bits más);
  3. cambiar nada más que nada . En particular, el descifrado no "fallará".

Vea el esquema en la página de Wikipedia para CBC para entender por qué funciona esto manera.

Lo que está viendo es que cuando usa el cifrado (por confidencialidad), por lo general, también desea verificar la integridad, con un MAC algoritmo como HMAC. Sucede que la combinación correcta de cifrado y un MAC es difícil . Lo mejor sería usar un formato de cifrado que ya haga las cosas correctamente. Si, por alguna razón, debe hacer su propio cifrado, intente utilizar un modo de cifrado que incluya inherentemente un MAC, por ejemplo. GCM o EAX . Si por razones técnicas (por ejemplo, la falta de implementación disponible) aún debe utilizar CBC, a continuación, agregue algunos HMAC con las siguientes reglas:

  • Hash su clave maestra K (la que "almacena de forma segura") con SHA-256. Divida el resultado de 256 bits en dos mitades de 128 bits, K1 y K2 .
  • Use AES-128 en modo CBC, con K1 como clave, para cifrar los datos. Asegúrese de usar un IV aleatorio, generado de nuevo para cada archivo, con un PRNG criptográficamente seguro.
  • Calcule HMAC / SHA-256, con K2 como clave, sobre la concatenación de la IV y el archivo encriptado .
  • Almacene el archivo en algún formato que incluirá el IV, la salida HMAC y el resultado del cifrado. La concatenación simple funcionaría, ya que la salida IV y HMAC tienen longitudes fijas conocidas (16 bytes para el IV, 32 bytes para HMAC / SHA-256).
  • Al descifrar, verifique el valor HMAC primero , y continúe con el descifrado de datos solo si el valor HMAC parece ser correcto.

Puede observar que abogo por AES-128, no AES-256. Esto se debe a que la clave de cifrado de 256 bits es exceso innecesario e incurre en una penalización de velocidad del 40%. Si aún desea una clave de cifrado de 256 bits, p. porque necesita atraer a un administrador despistado con el tamaño de su clave, luego use SHA-512 para codificar su clave maestra K en una salida de 512 bits, que se puede dividir en dos mitades de 256 bits .

También recomiendo HMAC / SHA-256, que debería ser "lo suficientemente rápido". Una PC básica puede hacer AES-128 y HMAC / SHA-256 combinados a más de 60 megabytes por segundo. Si necesita más velocidad y tiene una plataforma de 64 bits, entonces HMAC / SHA-512 puede darle una ventaja, pero a costa de hacerlo más difícil para los sistemas de 32 bits. En cualquier caso, la red de 100 Mbit / s alcanzará los 11 megabytes por segundo, por lo que la velocidad de encriptación probablemente no sea un problema de todos modos.

    
respondido por el Tom Leek 29.08.2013 - 16:07
fuente
1

Hash, luego cifre si le preocupa que los datos se modifiquen en el servidor. Dado que un atacante no tiene una clave, no podrían almacenar correctamente un nuevo hash. Este es el mismo principio que firmar un archivo, aunque hacerlo con cifrado simétrico (que solo verifica que alguien con la clave haya autenticado el archivo).

    
respondido por el AJ Henderson 29.08.2013 - 15:47
fuente

Lea otras preguntas en las etiquetas