Pregunta

Encontré un artículo sobre el sistema de entrada remota de Car en http: //auto.howstuffworks. com / remote-entry2.htm En la tercera viñeta, dice el autor,

  

Tanto el transmisor como el receptor utilizan el mismo generador de números pseudoaleatorios. Cuando el transmisor envía un código de 40 bits, utiliza el generador de números pseudoaleatorios para elegir un nuevo código, que almacena en la memoria. En el otro extremo, cuando el receptor recibe un código válido, utiliza el mismo generador de números pseudoaleatorios para elegir uno nuevo. De esta manera, el transmisor y el receptor están sincronizados. El receptor solo abre la puerta si recibe el código que espera.

¿Es posible tener dos funciones PRNG que produzcan los mismos números aleatorios al mismo tiempo?

¿Fue útil?

Solución

En las funciones de PRNG, la salida de la función depende de un valor 'inicial', de modo que la misma salida se proporcionará a partir de llamadas sucesivas dado el mismo valor inicial. Así que sí.

Un ejemplo (usando C #) sería algo como:

// Provide the same seed value for both generators:
System.Random r1 = new System.Random(1);
System.Random r2 = new System.Random(1);

// Will output 'True'
Console.WriteLine(r1.Next() == r2.Next());

Todo esto depende, por supuesto, del generador de números aleatorios que utiliza algún tipo de fórmula determinística para generar sus valores. Si utiliza el llamado generador de números "aleatorios verdaderos" que usa propiedades de entropía o ruido en su generación, sería muy difícil producir los mismos valores con alguna entrada, a menos que pueda duplicar el estado entrópico para ambas llamadas a la función, que, por supuesto, anularían el propósito de usar un generador de este tipo ...

En el caso de los sistemas de entrada sin llave remotos, es muy probable que utilicen una función PRNG que sea determinista para aprovechar esta función. Hay muchos circuitos integrados que proporcionan este tipo de funcionalidad para producir números aleatorios para circuitos electrónicos.

Editar: a petición, aquí hay un ejemplo de un generador de números aleatorios no determinista que no se basa en un valor semilla específico: Quantum Random Number Generator . Por supuesto, como señala el espacio libre en los comentarios, este no es un generador de números pseudoaleatorios, ya que genera números verdaderamente aleatorios.

Otros consejos

La mayoría de los PRNG tienen un estado interno en forma de semilla , que utilizan para generar sus próximos valores. La lógica interna es algo como esto:

nextNumber = function(seed);
seed = nextNumber;

Entonces, cada vez que genere un nuevo número, la semilla se actualizará. Si le da a dos PRNG que usan el mismo algoritmo la misma semilla, la función (semilla) evaluará el mismo número (dado que son deterministas, que la mayoría son).

Aplicado directamente a su pregunta: el transmisor escoge un código y lo usa como semilla. El receptor, después de recibirlo, usa esto para sembrar su generador. Ahora los dos están alineados y generarán los mismos valores.

Como Erik y Claudiu han dicho, y siempre que agregue su PRNG con el mismo valor, obtendrá el mismo resultado.

Se puede ver un ejemplo al usar AES (o cualquier otro algoritmo de cifrado) como la base de su PRNG. Siempre y cuando sigas utilizando entradas que coincidan en ambos dispositivos (transmisor y receptor), las salidas también coincidirán.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top