¿SHA-1 PRNG aún puede crear claves de cifrado seguras?

1

Me preocupa que un SHA-1 PRNG no pueda producir una clave de cifrado AES-256 con los 256 bits de seguridad esperados, o incluso cualquier clave de cifrado segura donde se esperan más de 165 bits de seguridad.

El SHA-1 PRNG es el único generador de números aleatorios seguros de Java puro proporcionado por Java sin bibliotecas de terceros. (Soy plenamente consciente de que existen bibliotecas de terceros que ofrecen otros algoritmos). Se puede ver una implementación aquí . El algoritmo comienza con un estado que consiste en 160 bits extraídos de una fuente externa. A medida que el algoritmo utiliza estos datos, realiza un seguimiento de qué byte se utilizó por última vez, un número entre uno y veinte y que requiere otros 5 bits de información para representar.

Una vez que se han agotado los 160 bits, los siguientes 160 bits se obtienen calculando:

estado (n + 1) = estado (n) + SHA1 (estado (n)) + I (SHA1 (estado (n))

donde I (x) = 1 si x = 0 e I (x) = 0 si x! = 1

Esto está totalmente determinado por los 160 bits de estado existentes.

Esto significa que si le da a alguien 165 bits de información, puede calcular la salida del SHA-1 PRNG en cualquier momento futuro. Por lo tanto, si tengo un cifrado AES-256 y sé que la clave se generó usando SHA-1 PRNG, solo tengo que probar 2 ^ 165 combinaciones posibles, no 2 ^ 256. Esto parece debilitar significativamente el cifrado.

Como la ley de conservación de la información dice que la información nunca puede crearse, no veo la posibilidad de que un algoritmo cuyo estado interno consiste en solo 165 bits de información pueda generar 256 bits de información.

Si esto es cierto y el SHA-1 PRNG que se incluye con Java solo puede generar claves débiles, ¿qué debería hacer uno?

¿Existe un recurso que enumera la cantidad de bits de información que incorpora una función PRNG segura para que uno pueda asegurarse de que el algoritmo tenga más bits que la clave de cifrado?

    
pregunta Simon G. 21.11.2013 - 18:15
fuente

1 respuesta

3

Acepto esta afirmación como verdadera: Por lo tanto, si tengo un cifrado AES-256 y sé que la clave se generó usando SHA-1 PRNG, solo tengo que probar 2 ^ 165 combinaciones posibles, no 2 ^ 256.

Sin embargo, cuestiono la suposición derivada de él: Esto parecería debilitar significativamente el cifrado. No es ahora, ni nunca será físicamente posible probar 2 ^ 165 claves posibles, o para iterar a través de SHA-1 2 ^ 165 veces.

Incluso si se logra un avance significativo en AES-256 que le permite a un atacante reducir el tamaño de su ataque, dependiendo del ataque, aún podría requerir iteración a través de 2 ^ 165 salidas SHA-1.

Por lo tanto, no estoy totalmente de acuerdo con el calificativo "significativo", o que las claves producidas son cualitativamente "débiles". (Sí, son "más débiles" de lo que produciría un algoritmo de hash de 256 bits, solo estoy abordando el significado de esa diferencia). En el mundo real y práctico en el que vivimos, los ataques mucho más probables se realizarán en el Protocolos que utilizan este sistema, o en la seguridad de los puntos finales. En lugar de intentar adivinar 2 ^ 165 posibles estados aleatorios, intentaría conocer su estado interno o intentar inyectar mi propio estado para que su salida ya no sea aleatoria.

    
respondido por el John Deters 21.11.2013 - 18:43
fuente

Lea otras preguntas en las etiquetas