¿Cuáles son las diferencias entre la función rand () y el periférico RNG (generador de números aleatorios)?


9

Me pregunto por el periférico RNG (generador de números aleatorios) en las MCU STM32F4XXXX. consulte este Manual de referencia (página 748). Por otro lado, tenemos la función rand () en la biblioteca stdlib que hace la misma tarea. Ahora tengo dos preguntas:

  1. ¿Cuáles son las diferencias (ventaja y desventaja) entre la función rand () y el periférico RNG (generador de números aleatorios)?
  2. Mira esta parte:

caracteristicas

Por favor explique sobre estas dos opciones (especialmente la segunda opción).

Respuestas:


12

La respuesta de Dave lo reanudó bastante bien, pero para aclarar un poco más sobre la segunda opción:

Un generador de números aleatorios de hardware real utiliza una fuente de entropía física. Tal fuente de entropía podría ser radiación cósmica, ruido eléctrico, efecto avanlanche de un diodo de polarización inversa (o transistor BJT), circuito de chua, etc. Cuanto menos determinista sea la fuente de entropía, mejor será la calidad de la salida aleatoria. Una fuente de entropía ideal sería utilizar un efecto de física cuántica, o algo que no se pueda modelar con ecuaciones deterministas.

Otro factor importante con los generadores de números aleatorios es que la fuente de entropía puede generar solo una cantidad limitada de entropía por unidad de tiempo. Un buen ejemplo es el circuito de chua: si bien es bastante aleatorio, tiene una velocidad muy baja y no puede utilizarse para aplicaciones de la vida real.

En muchos procesadores / microcontroladores con RNG incorporados, se utiliza la deriva del reloj de 2 a 4 relojes que se sincronizan de manera deliberadamente incorrecta. Luego, usan filtros analógicos y digitales para aleatorizar aún más el patrón y cambiar el resultado en un registro. Realizar dicho filtrado requiere unos pocos ciclos, lo que explica la cantidad mínima de ciclos requerida en un reloj dado antes de que esté disponible el valor más nuevo.

La deriva del reloj no es un efecto cuántico, por lo que podría modelarse, pero es lo suficientemente aleatorio, ya que depende de muchos parámetros, como la temperatura, el proceso de silicio, la frecuencia de operación, el ruido eléctrico, las radiaciones de fondo, etc. .

En aplicaciones donde el RNG de hardware no tiene un rendimiento suficiente (como en aplicaciones criptográficas muy exigentes), es bastante común usar el RNG de hardware como semilla para un generador de números pseudoaleatorios como la función rand () en el sdtlib. Sin embargo, dicha aplicación generalmente proporciona una mejor implementación de rand (), que está específicamente diseñado para ejecutarse desde una semilla que puede descartarse muy a menudo con valores aleatorios verdaderos . En el procesador Intel más nuevo con RNG de hardware integrado, la parte del algoritmo pseudoaleatorio está directamente integrada en el silicio, por lo que es realizada por hardware, produciendo un rendimiento aleatorio muy alto.

Si le importa el método rand () en sí mismo, es solo una expresión matemática diseñada para generar una cantidad de entropía lo suficientemente grande. Lo suficientemente grande como para depender de la aplicación: para generaciones de claves criptográficas, se requiere que la aleatoriedad sea de mayor calidad que la aleatoriedad requerida para un aleatorio aleatorio simple en su reproductor de música favorito. Es obvio que cuanto mayor sea la calidad de la salida aleatoria, mayor será el costo computacional del número aleatorio.

Las operaciones involucradas en un número aleatorio son bastante similares a las involucradas en el cálculo del hash MD5 de un archivo: intentan usar una especie de efecto de avalancha de bits para que un solo cambio de bit en un valor semilla cambie todo el patrón generador. Como nota al margen, NO recomiendo usar MD5 como generador de números pseudoaleatorios; fue solo un ejemplo. Sería ineficiente y no tan aleatorio, pero el punto está ahí: si alimenta el mismo archivo a un algoritmo de hasing MD5, siempre obtendrá el mismo resultado determinista, casi de la misma manera que siempre obtendría el mismo resultado de la función rand () si ingresa la misma semilla a menos que su implementación dependa de algunos elementos arbitrarios como la hora actual.


7

La diferencia clave es que la rand()función de biblioteca es un generador de números pseudoaleatorios; dado cualquier valor inicial (inicial) particular, siempre producirá la misma secuencia de números.

Por otro lado, el periférico RNG es un verdadero generador de números aleatorios, y producirá secuencias de números no repetibles.


Gracias. y esas dos opciones ..?
Roh

2
¿Qué significa "y esas dos opciones ...?" ¿media? ¿Es una pregunta?
John U

2

Los dos temas que describe pueden describirse con relativa facilidad:

  • 1: No puede generar números aleatorios más rápido que una vez cada 40 ciclos de reloj, por lo que esto resulta en 48MHz / 40 = ~ 1M Muestra / s
  • 2: El hardware contiene un monitor que verificará cada número generado por comportamiento extraño. Por ejemplo, si usó la temperatura como fuente y tuvo un entorno de temperatura altamente estable, podría ocurrir que el RNG genere las mismas secuencias de números una y otra vez (como lo haría un generador de números pseudoaleatorios si comienza con el mismo valor inicial) . El componente supervisaría esto y le proporcionaría una señal si el RNG funciona como se espera. En caso de que necesite que sus números sean "realmente" aleatorios, es posible que desee controlar este indicador para ver si realmente lo son. La forma exacta en que se hace esto y cómo funciona realmente el RNG se da probablemente en el texto restante.

1

Supongamos que uno diseña una ruleta mecánica de ruleta que energiza un motor durante un cierto período de tiempo, espera a que la rueda y la bola descansen y observa en qué bolsillo está la bola. Normalmente, después de cada giro, la bola y la rueda se moverán. terminan en un lugar ligeramente diferente, y pequeñas variaciones en la ubicación de la pelota después de un giro pueden hacer una gran diferencia en el lugar donde termina en el siguiente giro. Por lo tanto, incluso si el motor siempre está energizado durante el mismo período de tiempo, el bolsillo donde cae una bola en un giro será independiente del lugar donde aterrizó el giro antes.

Ahora supongamos, sin embargo, que algunos de los números tienen o desarrollan ligeras depresiones en ellos, y los cojinetes del motor desarrollan puntos planos. Luego, algunos giros serían aleatorios, pero después de un giro que da como resultado que la bola caiga en una depresión y el rodamiento en un punto plano, el siguiente giro podría estar sesgado para tener el mismo resultado que el último giro donde ocurrió eso. Si la mayoría de los giros no golpean simultáneamente el divot y el punto plano, su existencia probablemente no afectará demasiado las cosas. Por otro lado, si un combo de divot / flat se coloca justo para que una bola allí aterrice de manera razonablemente consistente en un segundo, y ese se coloca para enviar la pelota de regreso al primero, entonces uno terminar con algunos comportamientos extremadamente sesgados.

Si, después de aterrizar en 4 y 23, el siguiente giro es un 4, eso no necesariamente indica un problema. Un 4 debería aparecer aproximadamente 1/38 del tiempo en esa situación. Además, la adquisición de datos aleatorios solo debe capturar el número de bolsillo, ya que no se sabe nada útil sobre la frecuencia con la que la pelota debe descansar en varias partes del bolsillo. No obstante, puede ser útil para lo que sea que esté registrando los números también "observar" dónde en el bolsillo se detiene la pelota y observar cualquier patrón inusual. La distribución de ubicaciones podría estar sesgada hacia el frente o hacia atrás sin indicar un problema, pero si hay un pico estrecho en la distribución, eso podría ser motivo de preocupación.

Si las lecturas consecutivas de un generador aleatorio son estadísticamente independientes , no es difícil compensar el sesgo (aunque el tiempo requerido no es determinista). Sin embargo, si un generador cae en un estado donde las lecturas no son independientes (p. Ej., El estado cíclico de la rueda anterior), la compensación se vuelve básicamente imposible, por lo que es necesario que un RNG de hardware incluya circuitos para detectar tales comportamientos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.