Cómo crear un generador aleatorio
On febrero 10, 2021 by admin¿Cómo podría implementarse un generador aleatorio?
No estoy hablando de la invocación de un idioma método mathRandom () , pero la implementación de las rutinas que llevan a generar números totalmente aleatorios.
Comentarios
- I ‘ me aventuro a decir que la aleatoriedad verdadera no es posible actualmente.
- @Dynamic Creo que lo mismo pienso, sin embargo, siempre he invoqué la función aleatoria cuando fue necesario, pero no tengo ‘ t idea de cómo se debe implementar un método aleatorio.
- » totalmente aleatorio » es un agujero de conejo muy profundo.
- @Dynamic: es realmente trivial obtener una secuencia indistinguible de datos verdaderamente aleatorios, siempre que mirar hacia el mundo exterior con soporte de hardware. La física atómica y subatómica, (desintegración atómica, eventos del tipo de sensores de impacto de fotones) es f teoría científica actual) verdaderamente aleatoria y fácil de medir. La termodinámica a gran escala es tan caótica que podemos considerarla aleatoria cuando inspeccionamos el sistema macro en la microescala, etc. El ruido de un sensor de cámara digital es un buen ejemplo …..
Respuesta
La clave para un número verdaderamente aleatorio es una fuente de datos aleatoria. A veces se trata de información como retrasos en eventos de teclado o eventos de red. Cuando se desean datos aleatorios de alta calidad, pueden ser desintegración radiactiva . SGI implementó lavarand que extrajo su semilla para un generador de números aleatorios a partir de una imagen digitalizada de una lámpara de lava. Esto fue suficiente para ser considerado un generador de números aleatorios.
Fuera de los datos verdaderamente aleatorios, se puede trabajar con un sistema determinista pero caótico. Por ejemplo, el mersenne twister . En estas situaciones, uno inicia el generador con un número y luego lo ejecuta para obtener números pseudoaleatorios. Estos son suficientes para juegos y similares en los que no es crítico si alguien puede determinar la semilla (y el siguiente número en la secuencia).
Considere leer la patente 5,732,138 y http://www.lavarnd.org/ para conocer los detalles de implementación sobre cómo hacer un número.
Comentarios
- +1 Consideraría diferentes fuentes de datos como las mediciones del clima para su semilla. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com el desafío con las mediciones del clima es que no son completamente aleatorias. Hay un campo completo sobre la predicción del clima. La temperatura tiende a subir durante el transcurso de un día. El invierno es más frío que el verano. El sistema de hotbits usa la aleatoriedad de cronometrar dos eventos de descomposición que son impredecibles (mida el tiempo desde el evento 1 al evento 2 y el tiempo desde el evento 3 al evento 4 – si 1 : 2 == 3: 4, deseche los datos. Si 1: 2 3: 4, el bit aleatorio es 0. Si 1: 2 > 3: 4, el bit aleatorio es 1.
- Estoy ‘ hablando de la velocidad del viento, la presión barométrica, la temperatura, la humedad, etc. Puede tomar una muestra de medidas y tener dificultades para argumentar en contra de la aleatoriedad en ese sentido. Además, la temperatura por sí sola tomada con suficiente precisión es muy aleatoria.
Respuesta
¿De qué tipo de azar estás hablando? acerca de?
Hay dos propiedades principales que definen aleatorio en sentido matemático: la primera es imprevisibilidad y el segundo es distribución uniforme .
Si estás hablando de el primero, generalmente es casi imposible generarlo completamente dentro del software (y hacerlo correctamente). Hay algunas formas, como recopilar entropía de dispositivos de interfaz humana, p. /dev/random
en Linux, pero generamos un nivel bastante bajo de entropía para ser útil. Otros ya han señalado algunas implementaciones de hardware. Todos tienen raíces profundas en la teoría de la física (como nuestra creencia de que el momento preciso en que un fotón golpeará un detector es verdaderamente aleatorio). Hay algunos algoritmos de software para esto, como Blum-Blum-Shub . En general, no «escriba un PRNG si necesita imprevisibilidad, sino usa uno establecido . Esto se aplica especialmente a las criptomonedas.
La otra propiedad importante de las funciones aleatorias es bastante fácil de satisfacer. Hay muchos ejemplos de esto, como el RNG detrás de RC4 , Registros de desplazamiento de retroalimentación lineal (esto en realidad se usó para cripto, también, una vez, pero no se encontró lo suficientemente seguro), etc.Incluso la biblioteca C estándar rand()
probablemente funcionará bien para este propósito.
Lo más importante: asegúrese de saber cuál de las dos propiedades es fundamental para sus necesidades. Los impredecibles también se distribuyen uniformemente, pero al revés no es cierto. Además, si está exponiendo la aleatoriedad dentro de un «motor» de algún tipo (como un motor de juego), asegúrese de que la gente no pueda jugar con el sistema, porque se sorprenderá de lo fácil que es en realidad. Por ejemplo, CSS (el algoritmo de cifrado de DVD) utilizó 2 LSFR con fines de criptografía y se rompió con bastante facilidad.
Respuesta
Primero , no puede generar números verdaderamente aleatorios en el software. Hay un montón de algoritmos diferentes que le permiten generar números pseudoaleatorios. Dependiendo de por qué necesita números pseudoaleatorios (es decir, si los está usando en criptografía, los requisitos son mucho diferente), generalmente usaría algo como el generador de números aleatorios en la biblioteca científica GNU (que, por supuesto, puede implementar en el idioma que prefiera).
Respuesta
Hardware. Necesita conectarse a hardware que pueda recolectar entropía de … donde sea. Lea la estática de un radio, coloque una cámara web en una lámpara de lava, o haga que el usuario escriba galimatías o juegue con el mouse. Sin algún contacto con el mundo real, generar una verdadera aleatoriedad es imposible. Es un área importante para f estudio, y se ha puesto mucho trabajo en él. Dudo que estés abriendo nuevos caminos, por lo que realmente deberías pararte sobre los hombros de los gigantes y comenzar a leer las entradas de la wikipedia.
«La generación de números aleatorios es demasiado importante para dejarla oportunidad. «
-Robert R. Coveyou
EDIT
Así que descubrió que el hardware que desea es de hecho solo un chip CMOS . El tipo de cámaras baratas. Simplemente manténgalo en la oscuridad, establezca la sensibilidad hacia arriba, y aparentemente las pequeñas variaciones que observa tienen sus raíces en la mecánica cuántica, que es de donde derivamos nuestra entropía en la vida real.
Respuesta
La última vez que miré, que fue hace MUCHO MUCHO tiempo, la referencia canónica sobre la implementación de generadores de números pseudoaleatorios (PRNG ) es Knuth, vol. 2, «Algoritmos seminuméricos» .
Ni siquiera PIENSE en intentar implementar su propio PRNG hasta que al menos haya revisado Knuth.
Deja una respuesta