¿Cómo se calculan los cifrados SHACAL-2?

Jan 12 2021

Estoy tratando de aprender sobre la funcionalidad subyacente de las diferentes funciones hash (actualmente SHA) y estoy bastante atascado incluso después de ver un video de Stanford al respecto.

Un método de hash es usar la construcción Merkel-Damgård con la función de David Meyers y cifrados de bloque SHACAL-2.

Según tengo entendido, MD es el mensaje dividido en una cadena de bloques de 64 bits que contienen el valor del bloque anterior o IV (vector inicial definido por la función hash o una clave de sal personalizada). El valor del bloque o IV junto con el valor del bloque actual y alguna clave x bit es después de pasar por la función SHACAL-2 y luego el nuevo cifrado.

¿Es esto correcto entendido? Si es así: ¿Qué sucede dentro de la función SHACAL? ¿Qué son las matemáticas?

Encontré esto pero realmente no responde a mi pregunta: SHACAL en SHA-256

Respuestas

2 kelalaka Jan 12 2021 at 18:13

La construcción MD utiliza una función de compresión. $C$ ($F$ en las figuras) de modo que tenga dos entradas.

$$h_i = C(h_{i-1},m_i)$$

y el primero $h_{-1} = IV$ y el último $H = h_{2^k-1}$ es el valor hash.

La función de compresión puede usar un cifrado de bloque, donde el mensaje al cifrado de bloque es el valor hash anterior y la clave es el mensaje. $h_i = E_{m}(h_{i-1})$

La primera descripción del uso de un cifrado en bloque para la función de compresión existe en la tesis de Merkle en la página 11 . Esta construcción es totalmente insegura ya que el cifrado de bloque existente está directamente encadenado y se puede demostrar que tiene$\mathcal{O}(2^{n/2})$ resistencia a la segunda preimagen en lugar de $\mathcal{O}(2^{n})$.

No queremos ataques de claves relacionados como existen en algunos de los cifrados en bloque como AES y DES. Esto no crea un problema para el cifrado, ya que las claves se eligen uniformemente al azar, sin embargo, las claves relacionadas se pueden usar para atacar la función hash. Esto es discutido ampliamente por Mannik y Preenel.

Queremos grandes entradas debido a los ataques de colisión en las funciones de compresión [1] y, por lo tanto, más rondas para procesar. Por lo tanto, los diseñadores crean un nuevo cifrado de bloques para las construcciones MD en lugar de utilizar los existentes. Para SHA-1 se llama SHACAL y para SHA-2 se llama SHACAL-2.

El valor de división depende de la función de compresión, MD5, SHA-1 y SHA256 usa bloques de mensajes de 512 bits, SHA512 usa bloques de mensajes de 1024 bits. Los mensajes se rellenan para que sean múltiplos del tamaño del bloque con el tamaño del mensaje codificado al final.

Por ejemplo, relleno SHA-512 en NIST FIPS 180-4

Supongamos que la longitud del mensaje, $M$, es $\ell$bits. Agregue el bit 1al final del mensaje, seguido de$k$ cero bits, donde $k$ es la solución no negativa más pequeña de la ecuación $$\ell + 1 + k \equiv 896 \bmod 1024$$ Luego agregue el bloque de 128 bits que es igual al número $\ell$ expresado usando una representación binaria

Formalizar para tamaños de bloque arbitrarios $b$ y $d$Tamaño de mensaje codificado en bits (64 para SHA-1 y SHA256, 128 para SHA512.

$$\ell + 1 + k \equiv b-d \bmod b$$

Entonces, los criterios de diseño son tener un cifrado de bloque con muchas rondas, SHACAL tiene 80, SHA-256 tiene 64 y SHA512 tiene 80 rondas manteniendo simple la función de ronda.

Y el cifrado de bloque se utiliza como Davies-Meyer para crear una función de compresión unidireccional.

Por ejemplo, la matemática de SHA256 es

  • $\operatorname{Ch}(E,F,G) = (E \land F) \oplus (\neg E \land G)$
  • $\operatorname{Ma}(A,B,C) = (A \land B) \oplus (A \land C) \oplus (B \land C)$
  • $\Sigma_0(A) = (A\!\ggg\!2) \oplus (A\!\ggg\!13) \oplus (A\!\ggg\!22)$
  • $\Sigma_1(E) = (E\!\ggg\!6) \oplus (E\!\ggg\!11) \oplus (E\!\ggg\!25)$

La rotación bit a bit utiliza diferentes constantes para SHA-512. Los números dados son para SHA-256.
El rojo$\boxplus$ media $ c = a + b \mod 2^{32}$, es decir, módulo de adición.

Como podemos ver, operaciones simples que las CPU pueden manejar, función redonda ligera, con una estructura Feistel poco equilibrada y degradada.

Y aprendimos del algoritmo Tiny Encryption que, incluso las rondas simples pueden ser seguras después de 32 rondas.