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.
¿A qué te refieres con integridad? ¿Integridad de los datos? – NullUserException
Claro, integridad de datos – berkay
+1 gran pregunta. – rook