¿Cómo usar una clave diferente y IV para cifrar un archivo con AES en C ++?

1

Sé cómo funciona el cifrado AES y los diferentes modos (por ejemplo, EAX, CBC, CCM, ...) y también sobre los métodos CipherBlock y StreamTransformationFilter y su implementación en C ++.

Estoy usando el kit de herramientas Crypto ++. Quiero usar el modo EAX para cifrar un archivo y usar el método AuthenticatedEncryptionFilter para el cifrado como StreamTransformation . Ahora, ¿qué sucede si utilizo una sola clave y IV para cifrar cada archivo ? ¿Es seguro usar la misma llave y IV? Si no, ¿cómo utilizo diferentes claves e IV para cifrar un archivo y dónde almacenar las claves e IV?

    
pregunta Mohammadreza Panahi 18.06.2016 - 12:26
fuente

1 respuesta

1

El uso de la misma clave y el par IV para el cifrado de varios archivos es muy peligroso porque cifrar los dos archivos con el mismo contenido dará como resultado el mismo texto cifrado para cualquier cifrado en modo de bloque. Aquí hay algunas publicaciones relacionadas con esto:

¿Por qué no se deben reutilizar IV / pares de claves en el modo CTR?

Peligros de usar el modo CTR para el cifrado

AES-CBC y IV: cifrar varios bloques de un archivo con el mismo IV?

  

Es inseguro reutilizar el IV con AES-CBC. Por lo menos, si el   los archivos tienen un prefijo común, esto se revelará como un prefijo común   de los textos cifrados. Para AES-CBC, la única manera de asegurar   La confidencialidad es usar IVs aleatorios.

¿Cuáles son las restricciones para un IV que usa AES en el modo CBC?

  

El IV para un cifrado de bloque en modo CBC no solo debe ser utilizado de forma única   para cada mensaje cifrado con la misma clave ". Generalmente se asume   ser indistinguible del azar por un adversario.

Tenga en cuenta que usar la misma clave y el mismo par iv para el modo GCM daría lugar a consecuencias desastrosas en cualquier caso. Puede consultar la siguiente pregunta (de hecho, en la mayoría de las preguntas relacionadas con el modo GCM, vería que las personas mencionan este caso de uso incorrecto).

¿Qué tan malo es usar el mismo IV dos veces con AES / GCM?

Mi consejo es utilizar clave simétrica aleatoria y IV aleatoria para cada cifrado de archivo y almacenarlos en el archivo cifrado utilizando Sintaxis criptográfica de mensajes (CMS) , puede utilizar el tipo de contenido EnvelopedData en el que almacenas contenido encriptado. En este caso, la clave de cifrado de contenido ( CEK ) ( clave simétrica aleatoria ) se cifra mediante la clave pública del usuario (puede obtenerse desde el certificado del usuario) y se almacena como cifrada con El contenido encriptado. En cuanto al random IV , se almacena como abierto porque no necesita ser privado, solo debe ser impredecible. Cuando un usuario necesita descifrar un archivo, descifra básicamente CEK utilizando la clave privada que tiene. A partir de ahí, utilizando CEK y IV se puede descifrar el contenido cifrado.

Si no puedes o no quieres usar CMS, puedes usar la misma clave con diferentes IVs para el cifrado de múltiples archivos. No conozco ninguna debilidad por este uso. Debe almacenar su clave como cifrada, pero puede almacenar los IV como no cifrados. Tenga en cuenta que es posible que desee almacenarlos como firmados para ver si se modificaron o no sin su notificación.

    
respondido por el Makif 18.06.2016 - 14:03
fuente

Lea otras preguntas en las etiquetas