Para calcular la etiqueta de autenticación en el modo Galois / Counter (GCM), primero se calcula una MAC utilizando GHASH sobre el cifrado texto y los datos adicionales. Después de eso, esta MAC se encripta usando GCTR (usando el primer contador).
Mi pregunta es: ¿Por qué es necesario este último paso de encriptación? ¿Cuál sería el problema de seguridad si solo usara la salida de GHASH directamente como etiqueta de autenticación?
Respuesta
¿Cuál sería el problema de seguridad si solo usara la salida de GHASH directamente como etiqueta de autenticación?
Entonces, alguien que esté escuchando mensajes cifrados podría recuperar $ H $ , uno de los cuales es correcto.
La salida de GHASH es un polinomio público (basado en el texto cifrado y el AAD), evaluado con un valor secreto $ H $ . Resulta que, dado ese polinomio, $ H $ se puede recuperar de manera eficiente, ya sea reescribiendo el polinomio como $ \ mathrm {GHASH} (H) + \ mathrm {Tag} = 0 $ , y recuperando las raíces de eso (que se puede hacer en un campo finito), o incluso más fácil, obteniendo dos de esos textos cifrados, reescribiendo ambos y utilizar un valor euclidiano extendido para recuperar su raíz común.
Dado $ H $ , un atacante puede hacer modificaciones arbitrarias a los mensajes cifrados de forma trivial ; sí, eso es malo.
Comentarios
- Una pregunta más: ¿Por qué es necesario usar GCTR para cifrar el bloque GHASH en lugar de simplemente usar ¿$ Enc_H (GHASH) $ como etiqueta? De esa manera, GMAC podría usarse sin la necesidad de un IV.
- @mat: te refieres a enviar $ GHASH $ a través de AES (usando $ H $ como clave )? Bueno, en realidad, ese tipo de cosas funcionaría (bueno, yo no ' t usaría $ H $ como clave, pero aparte de eso …) y sería un diseño más conservador; sin embargo, GCM fue diseñado originalmente para ser un modo de canalización; es decir, podría implementarse dada una implementación de hardware AES donde cada ciclo de reloj, le damos el siguiente bloque de texto plano al hardware, y a cada ciclo de reloj, el aparece el texto cifrado de hace 10-14 ciclos. Al realizar un cifrado en el GHASH, ' bloqueamos la canalización …
- Me refiero a un simple Cifrado ECB (usando $ H $ o $ K $ como clave) del GHASH en lugar de hacerlo con GCTR. Eso es Tendría la ventaja de que GMAC sería más fácil de usar, porque ya no ' necesitaría un nonce. La canalización no es un problema aquí, ya que el cifrado de la etiqueta es el último paso que se realiza en GCM de todos modos, por lo que la canalización está definitivamente vacía en esta etapa.
- @David 天宇 Wong: principalmente rendimiento ( GHASH es parallizable, los hashes sin clave normalmente no son ' t)
- @David 天宇 Wong: oh, cierto, eso también …