La salida SHA-3 más corta

8

En el nuevo estándar SHA-3 noté que tiene un tamaño de salida variable. Sabiendo que la salida más larga es obviamente mejor (mayor entropía), ¿cuál es el límite inferior teórico del tamaño de salida? Puede mi salida hash, por ejemplo ser 8 bits de largo? Sé que para la mayoría de los escenarios esto no sería seguro.

    
pregunta Sebastian 16.08.2015 - 12:06
fuente

4 respuestas

4

Tienes un error:
Con SHA3 / Keccak, al ser un poco extraño en comparación con las funciones hash anteriores, el tamaño de salida no es comparable a la seguridad. Un cierto nivel de seguridad requiere un tamaño de salida mínimo, pero la salida se puede prolongar sin aumentar la seguridad como hash.

El tamaño mínimo de hash (de Keccak en general, no del subconjunto estandarizado llamado SHA3) es 1 bit:

En la construcción de la esponja, el valor de la suma c+r está restringido, pero su porcentaje es c y cuánto r se puede elegir libremente. Haga r=1 y realice solo una iteración en la parte de compresión (después de la línea vertical), luego la salida de hash z0 tiene exactamente 1 bit.

    
respondido por el deviantfan 16.08.2015 - 12:24
fuente
3

El estándar SHA-3 es antiguo y nuevo.

Es "antiguo" porque la competencia para seleccionar la función de hash SHA-3 comenzó en 2009 y sabemos desde 2012 que Keccak ganó.

Por otro lado, la estandarización de SHA-3 es bastante nueva, considerando que FIPS-202 fue estandarizado en agosto de 2015.

Si desea utilizar SHA-3, la longitud de salida más corta es 224 bits (SHA3-224), la longitud de salida más larga para SHA-3 es 512 bits (SHA3-512).

Sin embargo, FIPS-202: Estándar SHA-3: Hash basado en permutación y ampliable -Output Functions también define dos funciones de salida exentables (XOF): SHAKE128 y SHAKE256 que tienen una longitud de salida variable. Tenga en cuenta que SHAKE128-256 no es lo mismo que SHA3-256 debido al diferente relleno.

Las funciones SHAKE permiten longitudes de salida arbitrarias, siempre que Keccak lo admita. Como Keccak se basa en la construcción de esponja , las salidas largas no son un problema, sin embargo, las salidas cortas arbitrarias pueden obtenerse mediante un simple truncamiento. Las funciones SHAKE aceptan la longitud del resumen en bits y no realizan ninguna comprobación de límite inferior, lo que significa que 1 bit es la salida más corta posible de estas funciones.

    
respondido por el SEJPM 16.08.2015 - 17:28
fuente
0

Si mira FIPS 202 (el documento estándar SHA-3), Las funciones de salida ampliable SHAKE (XOF) se definen así (pp. 20-21):

SHAKE128(M, d) = KECCAK[256](M || 1111, d),
SHAKE256(M, d) = KECCAK[512](M || 1111, d).

... donde M es el mensaje que se va a hashear y d es la longitud de salida deseada. La función KECCAK se define en la página 20:

KECCAK[c](N, d) = SPONGE[KECCAK-p[1600, 24], pad10*1, 1600–c](N, d).

El algoritmo SPONGE se define en p. 18, y especifican que el valor de d puede ser cualquier entero no negativo.

Se deduce que el tamaño de salida más corto permitido para las funciones SHAKE es en realidad 0 bits .

Tabla 4 en p. 23 del documento resume los niveles de seguridad de las diversas funciones de SHA. Para los SHAKE, los niveles de seguridad vienen dados por fórmulas que toman el tamaño de salida d como parámetro. Por ejemplo, para SHAKE128:

  • La resistencia a la colisión es min(d/2, 128) bits;
  • La resistencia de preimagen es min(d, 128) bits.
  • La segunda resistencia de preimagen también es min(d, 128) bits.

Aplicando esas fórmulas, cuando d = 0 obtenemos estos niveles de seguridad (para SHAKE128 y SHAKE256):

  • 0 bits de resistencia a la colisión;
  • 0 bits de resistencia de preimagen;
  • 0 bits de la segunda resistencia de preimagen.

Un nivel de seguridad de n -bit significa que se garantiza que un atacante tendrá éxito en no más de 2^n de intentos. Por lo tanto, un nivel de seguridad de 0 bits significa que un atacante no logra más que 2^0 de intentos. Y como prueba de ello, he aquí un exitoso ataque de colisión en la longitud de salida de 0 bits SHAKE256:

SHAKE256(0x00, 0) = SHAKE256(0xff, 0)

Así que las matemáticas funcionan bien, y las salidas SHAKE de longitud cero son exactamente tan seguras como suenan.

  

Sabiendo que una salida más larga es obviamente mejor (mayor entropía) [...]

Como han señalado otras respuestas, ya no significa necesariamente mejor. Las fórmulas a las que me referí anteriormente (p. 23 de FIPS 202) dan una respuesta precisa:

  • Los niveles de seguridad de SHAKE128 y SHAKE256 como funciones hash no pueden exceder los 128 y 256 bits respectivamente;
  • Si su salida es lo suficientemente corta, el nivel de seguridad estará por debajo de esos valores.
respondido por el Luis Casillas 30.12.2016 - 00:08
fuente
-3

La función Keccak tiene un estado interno de 1600 bits, en un punto llegó a 4800 bits ... independientemente del tamaño de salida, el estado interno es lo que determina la seguridad, no la longitud a la que se comprime.

    
respondido por el JDBtracker 06.12.2015 - 14:40
fuente

Lea otras preguntas en las etiquetas