¿Está bien cifrar un CRC con el texto sin formato?

0

Estamos usando encrypt-then-mac para el cifrado autenticado, y recientemente agregamos un CRC32 al texto plano. ¿Existe algún problema de seguridad con el uso de un mecanismo de hash no autenticado (por ejemplo, CRC32) para la detección de errores (es decir, garantizar que el mensaje no se dañó y que fue descifrado con la clave correcta)?

Entonces el formato sería ( || es concatenación):

encrypt(msg||crc32(msg))||mac(ciphertext)

¿Esto resulta en una reducción de la seguridad, similar al uso de encrypt-and-mac o mac-then-encrypt?

    
pregunta thecoop 19.05.2016 - 17:58
fuente

2 respuestas

3

No haría esto y no entiendo qué problema estás tratando de resolver (a menos que sea una pregunta puramente académica).

Encrypt-then-MAC donde definimos ciphertext=encrypt(K_enc, msg) y el envío ciphertext||MAC(K_mac, ciphertext) detectará cualquier error de transmisión o manipulación malintencionada por alguien que no conozca la clave MAC secreta K_mac con una probabilidad abrumadora; por ejemplo, si usó un MAC de 80 bits, la probabilidad de manipular un mensaje y hacer que el MAC pase es 1 en 2 ^ 80 ~ 8 x 10 ^ -25, lo cual es insignificante. Por ejemplo, si alguien genera un billón mensajes falsos cada segundo, pasarán unos 3,2 millones de años antes de que tengan un 8% de probabilidad de una falsificación exitosa (o unos 26 millones de años antes de que tengan un 50%). posibilidad de una sola falsificación exitosa).

Por lo tanto, el MAC de 80+ bits proporciona una gran seguridad contra falsificaciones exitosas o errores de transmisión por sí mismo.

Mientras tanto, el hash CRC32 no criptográfico no criptográfico de 32 bits no proporciona ninguna verificación de integridad adicional contra alguien que manipula deliberadamente un mensaje de texto sin formato que puede adivinar, al menos con cifrados de flujo (o cifrados de bloque que actúan como un cifrado de flujo) como CTR o el teclado de una sola vez) donde XORAR un cambio en el texto cifrado modifica los mismos bits en el texto plano. Por ejemplo, como los CRC32 no implican ningún secreto, pueden adivinar el mensaje original m , calcular su CRC32, tomar su mensaje intencionado deseado m' y calcular su CRC32, y luego modificar el texto cifrado en tránsito al c' = c XOR (m || CRC32(m)) XOR (m' || CRC32(m')) . Por supuesto, el MAC con clave proporcionado por el cifrado autenticado evita este ataque. Sin embargo, si tuviera una implementación incorrecta que dijera que proporcionó información (ya sea a través de un mensaje de error o cambio en el tiempo) de una diferencia entre el MAC que falla y el CRC32 que falla o cuando el MAC falla y el CRC32 pasa, debilitaría la seguridad de su sistema (y los atacantes podrían explotar esto).

La única protección contra la que el CRC32 podría protegerse es la corrupción accidental de la memoria en su computadora entre el cálculo del CRC32 del mensaje de texto sin formato y el cifrado de dicho mensaje, aunque la posibilidad de que eso suceda también es insignificante.

En resumen, si esto se implementa de manera deficiente (por ejemplo, el atacante puede darse cuenta de que el CRC falló / pasó incluso cuando falló el MAC), esto puede filtrar información. Si esto se implementa a la perfección, no brindaría ninguna seguridad adicional, ya que el MAC con clave es la parte que frustraría a un manipulador dedicado.

    
respondido por el dr jimbob 19.05.2016 - 19:29
fuente
0

Esto no dañará el cifrado, pero tampoco agrega nada.

Lo que has descrito es solo cifrado. Solo has cambiado la carga útil haciéndola un poco más grande. Esto es igual de seguro.

Sin embargo, un mac también contiene una comprobación de que si se modificó la transmisión en cualquiera de las partes (mensaje cifrado o mac) no se confirmaría en el otro extremo. Realmente no obtienes nada de esto y activamente empeora la usabilidad ya que ahora también tienen que eliminar los últimos 32 caracteres de la carga útil.

    
respondido por el Robert Mennell 19.05.2016 - 18:10
fuente

Lea otras preguntas en las etiquetas