2010-09-28 17 views
10

Estoy tratando de determinar si un RNG de hardware es realmente más seguro que RNGCryptoServiceProvider.¿Es RNGCryptoServiceProvider tan bueno como un RNG de hardware?

Dado que la aleatoriedad de RNGCryptoServiceProvider se proporciona el uso de diversos datos de sistema y de usuario tal como el ID de proceso, ID hilo, reloj del sistema, la hora del sistema, el contador del sistema, estado de la memoria, las agrupaciones libre en disco, y hash bloque de entorno de usuario junto con algoritmos de criptografía de estándar internacional[ref], ¿existen realmente algunas buenas razones para usar un RNG de hardware para una aplicación de seguridad, además de la velocidad?

EDITAR: Me gustaría suponer en todo esto que la computadora en la que se ejecuta el RNG no está comprimida, es decir, no hay una aplicación de espionaje.

+8

La pregunta más importante debería ser: * ¿Es 'RNGCryptoServiceProvider' lo suficientemente seguro para mis requisitos *? – LukeH

+0

Tenga en cuenta que incluso los RNG de hardware presentan un sesgo ya que ningún proceso físico es perfectamente simétrico y equilibrado. La mayoría de los RNG de hardware (buenos) tienen etapas de blanqueamiento de datos y otros trucos (p. Ej., Actualizaciones periódicas de RNG h/w para un PRNG) para obtener "buenos" resultados. Las distribuciones entrópicas son idénticas (de lo contrario, un diseño no lo corta). – DeepSpace101

Respuesta

5

No, RNGCryptoServiceProvider no es tan bueno como usar hardware.

Pero es mucho más barato y está disponible en todas las máquinas. Y lo suficientemente bueno (y lo suficientemente rápido) para la mayoría de los casos de uso.

+0

Interesante. ¿Qué cualidades posee un hardware RNG que lo hace "mejor"? – PaulG

+0

@PaulG: todas las cosas que RNGCryptoServiceProvider usa para crear un número aleatorio, como las enumeró en su pregunta, pueden obtenerse fácilmente mediante un programa que se ejecute en la máquina, y así se puede calcular el siguiente número aleatorio que se generará (es decir, una aplicación de espionaje), y toda la idea de aleatoriedad puede ser subvertida. Con un hardware-RNG, esto no es posible, ya que depende de un fenómeno físico imposible de predecir. –

+0

@PaulG: el hardware puede ser 'realmente' aleatorio. Pero con un buen software, la diferencia se vuelve teórica. –

6

Es una gran pregunta, y sospecho que la respuesta es (como sugirió Henk) más teórica. Se podría emplear un componente de hardware para generar ruido blanco, luego tomar muestras y usarlo como hardware RNG. En teoría esto sería 'más aleatorio' que usar tiempos del sistema.

En la práctica, sin embargo, los RNG se ponen a prueba cuando pasan por FIPS certification. RNGCryptoServiceProvider ha calificado a través de la certificación FIPS 140-2 (fuente: http://technet.microsoft.com/en-us/library/cc750357.aspx)

Algunas de las respuestas se basan en la idea errónea de que, debido a que el software RNG utiliza fuentes conocidas para sus valores de entrada, entonces esos valores de entrada se pueden supervisar y descubierto.

Ésta no es una verdadera debilidad (si fue el mismo podría decirse de la RNG de hardware, podríamos monitorear su valor actual (solo?) Y determinar la semilla)

La debilidad (si los hay) es que la mayoría de las fuentes de entrada de uso de software RNG se pueden manipular (hasta cierto punto) en el software. Esto permitiría que un malware espectacularmente bien diseñado manipule el hardware hasta el punto en que el RNG produzca un número predecible (es decir, no aleatorio).

4

Independientemente de los parámetros que utiliza la implementación de PRNG como semilla, tienen una cantidad limitada de entropía, a lo sumo la longitud de las representaciones de los valores, pero en realidad mucho menores (por ejemplo, los PID son fáciles de restringir a un rango, el tiempo del sistema es muy fácil de adivinar con precisión, etcétera). No importa cuántos datos genere de un PRNG sembrado de esta manera, la cantidad de entropía sigue siendo la misma y, por lo tanto, la cantidad de trabajo requerida para determinar la semilla sigue siendo la misma.

Con un hardware RNG, en cambio, la cantidad de entropía es la cantidad de datos generados. No hay posibilidad de que la fuerza bruta busque el conjunto de posibles valores semilla, porque no hay un estado que explotar.

+0

Tengo la impresión de que RNGCryptoServiceProvider utiliza continuamente factores 'externos' (estado de la memoria, etc.). Entonces no está limitado como un PRNG determinista que usted describe. – Tom

+0

Todavía está limitado a la cantidad de entropía que puede obtener, y esa cantidad prácticamente garantiza que será más pequeña que la cantidad de datos aleatorios que genere. –

Cuestiones relacionadas