¿Cuánta entropía es lo suficientemente buena para sembrar un CSPRNG?

7

Tengo algunas preguntas fundamentales sobre el uso de generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG).

¿Cuál debería ser el tamaño de la semilla con la que inicializo un CSPRNG? ¿Con qué frecuencia debo volver a colocarlo? ¿Y cómo determinar el tamaño de la entropía resembrada?

Cualquier puntero será útil.

    
pregunta SkypeMeSM 22.07.2015 - 20:04
fuente

2 respuestas

5

Lo que importa es entropía .

Lo que hace que un PRNG sea criptográficamente seguro es la incapacidad de los atacantes para predecir los siguientes bytes. Precisamente, hay tres "niveles de seguridad" que definen la seguridad, en el siguiente modelo:

  • Al atacante se le dan s bits de salida consecutiva del PRNG.
  • Las habilidades de computación del atacante están limitadas a 2 k operaciones elementales.
  • El atacante tiene el reto de predecir el siguiente bit del PRNG, y no debe poder tener éxito con una probabilidad mayor que 0.5 + 2 - e para algún valor < em> e .

Tenga en cuenta que predecir un bit siempre se puede hacer con una probabilidad de 0.5 (con una estimación puramente aleatoria), por lo que lo que necesitamos es que el atacante no pueda hacerlo sustancialmente mejor.

En general, normalmente queremos que el PRNG cumpla estas propiedades con k + e ≥ 128. El "128" es un límite tradicional. Básicamente, el atacante intentará enumerar los valores de semilla posibles y ver qué coincide con la salida conocida; si el atacante encontró la semilla real, entonces puede predecir todos los resultados posteriores con el 100% de precisión; de lo contrario, el atacante no sabe nada y vuelve a la adivinación basada en la suerte, es decir, la probabilidad 0.5 para cada bit.

Para alcanzar este nivel, la semilla debe representar una entropía de al menos 128 bits . De hecho, afirmar que "seed S tiene entropía de 128 bits" realmente significa "atacantes que intentan adivinar S y lo hacen mediante ensayos sucesivos en orden óptimo, comenzando con los más valores probables, tendrán éxito después de un promedio de 2 127 ensayos ". El término "promedio" es el importante aquí: la entropía tiene que ver con probabilidades y promedios.

Para tener 128 bits de entropía, necesita al menos 128 bits de datos, ya que no puede ajustar n bits de entropía en menos de n bits de datos. Sin embargo, los datos "aleatorios" de la vida real se extraen de las medidas físicas y están sesgados, por lo que necesitan más bits para ser representados. Por ejemplo, puede obtener cierta aleatoriedad de la sincronización de las pulsaciones de teclas del usuario: biológicamente hablando, el usuario no puede reproducir las temporizaciones exactas de las pulsaciones de teclas hasta el microsegundo, por lo que el retraso entre dos pulsaciones de teclas, expresado en nanosegundos, "contendrá" aproximadamente 10 bits de entropía, pero un retraso de un segundo requiere que se codifiquen 30 bits en nanosegundos.

En general, como escritor de aplicaciones, no tiene que hacer el trabajo complejo de estimar la entropía: el sistema operativo ya agrega la aleatoriedad de las fuentes físicas y calcula estas estimaciones. Cuando le pide al sistema operativo que le proporcione "bytes aleatorios" (al abrir /dev/urandom en sistemas Linux o al llamar a CryptGenRandom() en Windows), ya obtiene bits que están repletos de entropía. Por lo tanto, solicite 128 bits (16 bytes) y tendrá una semilla lo suficientemente fina para su PRNG.

(El "128" es tradicional. El límite tecnológico actual para los atacantes más ricos está cerca de 2 operaciones 75 , y es poco probable que aumente más allá de 2 100 en la próxima dos o tres décadas. "128" es considerado elegante por los criptógrafos porque es una potencia de 2.)

Si su PRNG es realmente criptográficamente seguro , entonces no es necesario volver a sembrar; la necesidad de resembrar realmente contaría como una pausa, lo que contradice la idea de que el PRNG es criptográficamente seguro.

Muchas personas y estándares siguen insistiendo en volver a sembrar, principalmente debido a un dogma establecido que dice que usted debe resembrar, por razones que en realidad nunca se especifican. Este dogma proviene de días mucho más antiguos, cuando PRNG no era no criptográficamente seguro, y en realidad no se ejecutaban en computadoras, porque eso era antes de que se inventaran las computadoras.

Por lo tanto, debe reiniciar la sesión tantas veces como sea necesario para mantener contentos a sus auditores, pero no se preocupe por los problemas de seguridad de la reinicialización o no de la reinicialización: no lo reinicia para lograr más seguridad, pero para mantener a otras personas felices y calladas.

(Si su CSPRNG NO es criptográficamente seguro, es poco probable que la resiembra salve su aspecto).

    
respondido por el Tom Leek 22.07.2015 - 21:01
fuente
2
  

¿Cuál debería ser el tamaño de la semilla con la que inicializo un CSPRNG?

Seed Length y otros requisitos para los algoritmos de cifrado de bloque aprobados se resumen en aquí :

  

¿Conquéfrecuenciadeboreiniciarlo?

Lasemillaessegurasiempreycuandoseadesconocidaparaelatacante.Creoquenopuedoexplicarmejorqueesto respuesta .

La entropía de CSPNRG se calcula utilizando el principio Min Entropy .

    
respondido por el user45139 22.07.2015 - 20:41
fuente

Lea otras preguntas en las etiquetas