¿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 MCU STM32F4XXXX. consulte este este Manual de referencia (página 748). Por otro lado, tenemos la función rand () en la biblioteca stdlib que realiza 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:

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

    
pregunta Roh

4 respuestas

12

La respuesta de Dave es bastante buena para resumirla, pero para aclarar un poco más la segunda opción:

un generador de números aleatorios de hardware real utiliza una fuente de entropía física. Dicha fuente de entropía podría ser la radiación cósmica, el ruido eléctrico, el efecto de avanlanche de un diodo de polarización inversa (o transistor BJT), el 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 pueda modelarse 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: aunque es bastante aleatorio, tiene una velocidad muy pobre y no se puede usar para aplicaciones de la vida real.

En muchos procesadores / microcontroladores con RNG incorporados, se usa la desviación de reloj de 2 a 4 relojes que se sincronizan de manera incorrecta y deliberada. Luego, usan filtros tanto analógicos como digitales para aleatorizar aún más el patrón y cambiar el resultado en un registro. La realización de dicho filtrado requiere algunos ciclos, lo que explica la cantidad mínima de ciclos requeridos en un reloj determinado antes de que esté disponible el nuevo valor.

El reloj a la deriva no es un efecto cuántico, por lo que podría ser modelado, 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, el fondo. radiaciones, etc.

En aplicaciones donde el RNG de hardware no tiene un rendimiento de procesamiento suficiente (como en aplicaciones criptográficas muy exigentes), es bastante común usar el RNG de hardware como 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ñada para ejecutarse desde una semilla que puede descartarse muy a menudo con valores aleatorios true . En el procesador Intel más nuevo con RNG de hardware integrado, la parte del algoritmo seudoaleatorio se integra directamente en el silicio, por lo que se realiza mediante hardware, lo que produce un rendimiento aleatorio muy alto.

Si te importa el método rand (), es solo una expresión metemática diseñada para generar una cantidad de entropía lo suficientemente grande. Lo suficientemente grande como para ser dependiente de la aplicación: para generaciones de claves criptográficas, se requiere que la aleatoriedad sea de mayor calidad que la aleatoria requerida para una reproducción aleatoria aleatoria 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 muy similares a las que se realizan al calcular el 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 por completo la generación. modelo. Como nota al margen, NO recomiendo usar MD5 como generador de números pseudoaleatorios; Solo fue un ejemplo. Sería ineficiente y no tan aleatorio, pero el punto está ahí: si alimenta el mismo archivo a un algoritmo hasing MD5, siempre obtendrá la misma salida determinista, casi de la misma manera que siempre obtendría la misma salida 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.

    
respondido por el Mishyoshi
7

La diferencia clave es que la función de biblioteca rand() es un pseudoaleatorio generador de números: dado cualquier valor de inicio (semilla) en 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.

    
respondido por el Dave Tweed
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 da como resultado 48MHz / 40 = ~ 1M Muestra / s
  • 2: el hardware contiene un monitor que revisará cada número generado para detectar un comportamiento extraño. P.ej. Si usó la temperatura como fuente y tuvo un ambiente de temperatura altamente estable, podría ocurrir que el RNG vuelva a generar las mismas secuencias numéricas y nuevamente (como lo haría un generador de números pseudoaleatorios si comienza con el mismo valor semilla). El componente monitorearí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 monitorear esta bandera para ver si realmente lo son. La precisión con la que se hace esto y cómo funciona realmente el RNG se da probablemente en el texto restante.
respondido por el Tom L.
1

Supongamos que uno diseña una rueda giratoria de ruleta mecánica que energiza un motor durante un cierto período de tiempo, espera que la rueda y la bola se detengan y observa en qué bolsillo está la bola. Normalmente, después de cada giro, la bola y la rueda terminará en un lugar ligeramente diferente, y las pequeñas variaciones en la ubicación de la bola 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 una bola cae en un giro será independiente del lugar donde aterrizó antes.

Ahora suponga, sin embargo, que algunos de los números tienen o desarrollan depresiones leves en ellos, y los cojinetes del motor desarrollan puntos planos. Luego, algunos giros serían aleatorios, pero después de un giro que hace que la bola caiga en una depresión y el rodamiento en un punto plano, el siguiente giro podría estar sesgado para obtener el mismo resultado que el último giro en el que ocurrió. 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 de modo que una bola allí caiga razonablemente de manera consistente en un segundo, y que se coloque una de manera que envíe la bola de vuelta a la primera, luego a la otra. terminar con algunos comportamientos extremadamente sesgados.

Si, después de aterrizar en 4 y 23, el próximo 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 del bolsillo, ya que no se sabe nada acerca de la frecuencia con la que la bola debe descansar en varias partes del bolsillo. No obstante, puede ser útil para lo que sea que esté registrando los números también para "observar" dónde se detiene la bola en el bolsillo y observar cualquier patrón inusual. La distribución de las ubicaciones podría inclinarse hacia adelante o hacia atrás sin indicar un problema, pero si hay un pico estrecho en la distribución que podría ser motivo de preocupación.

Si las lecturas consecutivas de un generador aleatorio son independientes estadísticamente, 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 (por ejemplo, el estado cíclico de la rueda de arriba), la compensación se vuelve básicamente imposible, por lo tanto, la necesidad de que un RNG de hardware incluya circuitos para detectar dichos comportamientos.

    
respondido por el supercat

Lea otras preguntas en las etiquetas