2010-09-07 20 views
19

Para construir un sistema seguro, ¿podemos suponer que el cifrado garantiza la integridad es verdadero antes de comenzar una programación segura?¿El cifrado garantiza la integridad?

  • Tanto en simétrica y de clave pública cifrado, es mi pregunta así a prueba de?
  • En caso negativo, ¿cuáles son las vulnerabilidades , puede dar un ejemplo ?
+1

¿A qué te refieres con integridad? ¿Integridad de los datos? – NullUserException

+0

Claro, integridad de datos – berkay

+1

+1 gran pregunta. – rook

Respuesta

21

No. Esto es fácil de ver si se tiene en cuenta el one-time pad, un sistema simple (teóricamente) perfectamente seguro.

Si cambia algún bit de la salida, un poco del texto sin formato cambiará y el destinatario no podrá detectarlo.

Este es un caso obvio, pero la misma conclusión se aplica a la mayoría de los sistemas de cifrado. Solo proporcionan confidencialidad, no integridad.

Por lo tanto, es posible que desee agregar un digital signature. Curiosamente, cuando se utiliza criptografía de clave pública, no es suficiente firmar, cifrar (SE) o cifrar y firmar (ES). Ambos son vulnerables a los ataques de repetición. Tienes que firmar-encriptar-firmar o encriptar-firmar-encriptar para tener una solución generalmente segura. Esto paper explica por qué en detalle.

Si utiliza SE, el destinatario puede descifrar el mensaje y luego volver a cifrarlo en un destinatario diferente. Esto engaña al nuevo destinatario sobre el destinatario previsto del remitente.

Si utiliza ES, un espía puede quitar la firma y agregar la suya. Por lo tanto, a pesar de que no pueden leer el mensaje, pueden atribuirse el mérito, pretendiendo ser el remitente original.

+0

¿Qué sucede si cifro mi mensaje con mi clave privada y lo envío? ¿Cómo se puede violar la propiedad de integridad? – berkay

+1

Encriptar con tu clave privada es más comúnmente conocido como firmar. Esto proporciona integridad, pero no confidencialidad. Todos conocen su clave pública, por lo que pueden "descifrar" (verificar) el mensaje. –

+0

será mejor encriptar el mensaje hash que será más rápido y efectivo así que esto es firma, ok su suposición no es un agujero de seguridad solo por la integridad al encriptar con mi clave privada. – berkay

2

Si la integridad de los datos es una preocupación específica para usted, debe usar un cryptographic hash function, combinado con y un algoritmo de encriptación.

Pero realmente se trata de utilizar la herramienta correcta para el trabajo. Algunos algoritmos de encriptación pueden proporcionar algún nivel de validación de suma de comprobación integrada, mientras que otros no.

+0

o use el modo cmac ... – rook

10

En resumen, la respuesta es no. La integridad y el secreto del mensaje son diferentes y requieren diferentes herramientas.

Consideremos un simple lanzamiento de monedas, y en este caso apostamos por los resultados. El resultado es un bool simple y lo encripto utilizando un cifrado de flujo como RC4 que produce 1 bit encriptado y se lo envío por correo electrónico. No tiene la llave, y le pido que me envíe la respuesta por correo electrónico.

Algunos ataques pueden ocurrir en este escenario.

1) Un atacante podría modificar la broca en tránsito, si fuera un 0, hay un 50% de posibilidades de que se convierta en 1 y todo lo contrario. Esto se debe a que RC4 produce un flujo prng que está XOR'ed con el texto plano produce el texto cifrado, similar a un pad de una sola vez.

2) Otra posibilidad es que pueda proporcionarle una clave diferente para asegurarse de que su respuesta sea incorrecta. Esto es fácil de usar con fuerza bruta, solo sigo probando las teclas hasta que obtengo el salto correcto.

Una solución es utilizar un cifrado de bloque es CMAC Mode. Un CMAC es un código de autenticación de mensaje similar a un hmac pero utiliza un cifrado de bloque en lugar de una función de resumen de mensaje. La clave secreta (K) es la misma clave que usa para encriptar el mensaje. Esto agrega n + 1 bloques al texto de cifrado. En mi escenario, esto evita tanto los ataques 1 como 2. Un atacante no puede voltear un solo bit porque el texto plano está rellenado, incluso si el mensaje solo ocupa 1 bit, debo transmitir un mínimo de 1 bloque usando un cifrado de bloque. El bloque de autenticación adicional me impide encadenar la clave, y también proporciona integridad a cualquiera que intente modificar el texto de cifrado en tránsito (aunque esto sería muy difícil de hacer en la práctica, la capa adicional de seguridad es útil).

WPA2 usa AES-CMAC por estos motivos.

+0

+1 Por mencionar CMAC – NullUserException

+0

gracias por la respuesta, estaba esperando esto ... – berkay