¿El cifrado simétrico proporciona integridad de los datos?

15

Supongamos que tengo un servidor que cifra un archivo con una clave simétrica, por ejemplo. AES-CBC, y lo envía a los clientes que lo descifran. ¿Proporciona eso integridad de datos cuando se descifra? ¿O es posible que alguien manipule el archivo mientras aún está encriptado, y luego cuando el cliente lo desencripta, produce un archivo modificado?

Por lo general, veo que la integridad y la autenticidad de los datos se tratan en términos de uso de firmas digitales o MAC, pero nunca en el contexto de cifrado. También he visto puntos de referencia que muestran que el cifrado es más caro que el hash, pero esa no es mi principal consideración.

ACTUALIZAR

Probé un experimento, donde usé la herramienta openssl en Linux para cifrar un archivo. Luego, intenté modificar el archivo de varias maneras (cambiando un byte, eliminando un byte, agregando un byte). En todos los casos, cuando intenté descifrar, recibí un mensaje de "descifrado incorrecto". Los comandos que utilicé fueron:

openssl enc -aes-128-cbc -in test -out test.enc
openssl enc -d -aes-128-cbc -in test.enc -out test.dec
    
pregunta 88keys 03.12.2011 - 23:17
fuente

5 respuestas

16

El cifrado simétrico no proporciona integridad. La cantidad de control que un atacante puede tener sobre los datos cifrados depende del tipo de cifrado; y algunos detalles específicos de algunos modos de encriptación pueden dificultar un poco la vida del atacante si desea realizar modificaciones quirúrgicas. Con CBC, el atacante puede voltear cualquier bit que desee, siempre que no le importe transformar una docena de otros bytes en basura aleatoria.

Hay modos de cifrado recientes que combinan el cifrado simétrico y la integridad comprobada (con un MAC ). Estos modos garantizan tanto la confidencialidad como la integridad. AES-CBC es no uno de ellos. Si desea un modo de cifrado con integridad, le recomiendo EAX .

Actualización: con respecto a su experimento: CBC es un modo en el que la longitud de los datos de origen debe ser un múltiplo de la longitud del bloque de cifrado del bloque (16 bytes, para AES). Dado que un mensaje de entrada arbitrario puede tener cualquier longitud, se agrega relleno : algunos bytes, con contenidos específicos que pueden eliminarse de forma inequívoca al descifrarlos. En su caso, OpenSSL se queja de que, al descifrarlo, no encuentra una estructura de relleno adecuada. Sin embargo, si el atacante no altera los últimos 32 bytes de los datos encriptados, el relleno no se dañará, por lo que las alteraciones de todos los últimos 32 bytes permanecerán sin ser detectadas. E incluso para los últimos 32 bytes, hay formas de evadir la detección con una probabilidad no tan pequeña.

    
respondido por el Tom Leek 04.12.2011 - 19:59
fuente
9

El cifrado CBC no proporciona integridad de datos. He aquí por qué:

Corregir alguna clave k (desconocida para el atacante). Sean E (k, -) y D (k, -) las funciones de cifrado y descifrado de algunos cifrados de bloque. Sea p un bloque simple de texto plano. Voy a denotar XOR por +. Después de arreglar algunos IV, ciframos de la siguiente manera:

c = E (k, p + IV).

Luego, enviamos IV y c sobre el cable. Para descifrarlo, computamos

p = D (k, c) + IV.

(Tenga en cuenta que esto es equivalente a la declaración D (k, c) = IV + p.)

Ahora, suponga que un atacante conoce un solo par de texto simple / texto cifrado. Vamos a denotarlos como p y (IV, c), como arriba. Ahora, supongamos que al atacante le gustaría crear un texto cifrado que descifre a algún otro bloque de texto simple que elija, digamos p '. Afirmo que (IV + p + p ', c) se desencripta a p'. ¿Por qué?

Bueno, simplemente seguimos el procedimiento de descifrado anterior, reemplazando IV con IV + p + p '. Tenemos

D (k, c) + (IV + p + p ') = (IV + p) + (IV + p + p') = p '.

Sorprendentemente, el modo ECB no es vulnerable a este problema (aunque tampoco apoyo su uso).

    
respondido por el iamtheneal 14.04.2012 - 04:35
fuente
6

El cifrado AES-CBC no proporciona integridad. Dependiendo de cómo se implementa y usa, puede ocurrir que se detecten algunas modificaciones accidentales en el texto cifrado, pero no se defiende contra la manipulación malintencionada del texto cifrado.

El cifrado sin autenticación es uno de los errores más comunes en el uso de la criptografía . Ha generado serias vulnerabilidades en muchos sistemas, incluyendo ASP.NET, encriptación XML, Amazon EC2, JavaServer Faces, Ruby on Rails, OWASP ESAPI, IPSEC y WEP. Vea el enlace anterior para más información.

La solución: debe usar un esquema de cifrado autenticado (no AES-CBC), como EAX, o debe usar un código de autenticación de mensaje, como CMAC, en el modo de cifrar y autenticar.

Si va a implementar la criptografía usted mismo, lo invito a leer la pregunta aquí titulada Lecciones aprendidas y conceptos erróneos con respecto al cifrado y criptología para ayudarlo a evitar algunos de los errores más comunes. El uso del cifrado sin autenticación es uno de ellos.

    
respondido por el D.W. 04.12.2011 - 21:06
fuente
3

Los cifrados simétricos por sí solos no proporcionan integridad porque no detectan modificaciones maliciosas o accidentales en el texto cifrado; el descifrado generará algo más que el texto sin formato original y, a menos que esto resulte en una violación del protocolo para la carga útil descifrada, entonces tiene un problema de integridad.

La solución es incluir texto simple dentro de paquetes que incluya datos que puedan usarse para validar la integridad del paquete, generalmente una suma de comprobación basada en hash ( editar: con clave HMAC). Esto es lo que se hace, por ejemplo. para la seguridad de la capa de transporte.

Aquí hay un ejemplo de un esquema de protección de texto sin formato utilizado en un byte seguro de Versile Platform protocolo de transporte (descargo de responsabilidad: estoy involucrado en el desarrollo de VP).

Editar: me di cuenta de que la encapsulación de mensajes es una exageración para su escenario, que involucra un archivo completo, por lo que es mejor que solo agregue un MAC con clave en el texto cifrado completo. Para formatos de paquetes protegidos, como D.W. señala que los detalles son importantes, y la "suma de comprobación" debe realizarse como un MAC con clave.

    
respondido por el Versile 04.12.2011 - 13:34
fuente
-1

Si incluye el texto simple, entonces diría que sí, utilizando una clave simétrica para cifrar algo, donde el receptor puede descifrarlo y compararlo con el texto simple, proporciona integridad de los datos.

    
respondido por el Ben 02.08.2016 - 13:22
fuente

Lea otras preguntas en las etiquetas