Es muy importante poder generar números aleatorios en un ordenador, lo que ocurre es que hay un problema tremendo: ¡Resulta que es imposible! Al menos sin ayuda... ¡Vamos a verlo en este vídeo!
Es que hacer que un algoritmo, es decir un proceso que a partir de unos datos de entrada y siguiendo unos pasos concretos genere unos datos de salida genere salidas completamente aleatorias es muy muy complicado.
Por eso se recurre a "generadores de azar", que introducen en la entrada valores "aleatorios", como puede ser el movimiento del ratón en la pantalla, la velocidad de tecleo .. etc
#6 Los datos de entrada si pueden ser aleatorios. Por ejemplo, la velocidad del viento en un punto determinado en el instante en que se inicia el cálculo.
#14 Los ordenadores no suelen tener ningún sensor de viento, a su vez pueden estar en un entorno de clima controlado y el viento allí no tiene nada de aleatorio. Lo que ha citado el otro usuario sí son elementos generalmente disponibles en un ordenador de sobremesa, que no así en un servidor.
Lo que se suele hacer también es guardar en un fichero una semilla que se ha generado antes del anterior reinicio, de forma que si es un servidor que tiene pocos elementos de entrada aleatoria no se repita cada vez que se inicia. Parte de la semilla anterior, la va usando y la va guardando periódicamente para cuando necesite usarla más tarde, tras otro reinicio.
#17 En un servidor puede utilizarse información de la actividad de red, por ejemplo. También existen chips especializados que utilizan varias fuentes que (estoy imaginando) podrían ir desde la temperatura a la presión atmosférica o el tiempo entre solicitudes de red...
#22 Y puedes ponerle un generador de números aleatorios cuánticos1.
Pero si eres quien hace el sistema operativo y no tienes control de los dispositivos que te pondrá el usuario en un servidor como bien dices la tarjeta de red es de las pocas fuentes de posible aleatoriedad con las que puedes contar.
Pero la tarjeta de red puede iniciarse demasiado tarde para lo que necesitas la aleatoriedad, desconozco si hay protocolos de red cifrados que requieran la clave antes de la conectividad.
Y cabe la posibilidad de que el azar no exista? Es decir, que nuestro desconocimiento no llegue a controlar todas las variables y por eso le llamemos azar, pero quizás no exista tal aleatoriedad.
#24 Largo y tendido se ha escrito sobre el tema, de momento hasta donde sabemos, el universo se fundamenta en la teoría cuántica de campos, y la cuántica es esencialmente aleatoria.
Pero si vale con coger muestras de resistencias que varien con la temperatura u otras y lo hagan con mucha sensibilidad, cosas por naturaleza caoticas... pues vaya.
Segun tengo entendido con una semilla incial que consigas que sea aleatoria con dos números primos grandes puedes hacer una función que te asegura que creará una sucesión de números infinitos sin bucles, sin repeticiones y que con el operador módulo puedes llevar a cualquier rango.
Y para la semilla aleatoria inicial si no es para algo de extremada seguridad puedes pillar el tiempo en milisengundos del reloj del sistema o si te pones mas exquisito tener algún aparato que haga mediciones en un medio aleatorio, por ejemplo ciertas antenas que miden cambios en el aire
generan conjuntos de números que pueden considerarse aleatorios.
Yo usaba el generador de títulos de películas de Steven Seagal como semilla de un mt_rand (en PHP).
Nunca nadie se quejó de que el resultado no fuera suficientemente aleatorio (entre otras cosas porque una vez capturado el título de la película lo usaba, además, para titular el informe asociado, así que la gente un día leía "Desafío Frontal", al día siguiente "Fortaleza Infernal", luego "Muerte Definitiva 2", "Sangre Sangrienta", "Justicia al amanecer", "Asesinato sin control" y cosas así).
#25 221 es mi segundo xkcd favorito, y uno que por la naturaleza de mi trabajo, me he visto enlazar más de una vez (el de estándares de lleva la posición número 1: xkcd.com/927/)
#14 eso suena como algo bastante peligroso. Si se que tu máquina usa como semilla para su PRNG un sensor de viento, ademas de todos los posibles ataques MITM y ataques al sensor, solo el hecho de conocer la precisión y rango de valores del sensor me va a dar unos cuantos bits de información. Y eso sin saber el día el sensor específico que está siendo utilizado.
Una clave de criptografía moderna tendrá aproximadamente 256 bits de complejidad (las claves RSA tienen mucha mayor longitud, pero en realidad su complejidad real es menos). Si se que el dispositivo tiene una precisión de 64 bits (o peor, 32) eso está reduciendo la cantidad de claves posibles a ese espacio de 2^64, algo que puede romperse fácilmente
Pues a mi no me parece tan dificil, basta con usar los milisegundos de la hora, y si lo quieres mas largo unir mas milisegundos. Es totalmente aleatorio.
#44 Están todas, en forma de árbol, aunque las ramas son más densas cuanto más probables. En una realidad le pegas el tiro convencido de que es el destino, en otra le pegas el tiro pensando en que fue tu decisión.
"Una sucesión es aleatoria si es igual o más corta que cualquier descripción de ella"
Si tiras los dados 10 veces y te sale 1,2,1,2,1,2,1,2 seria aleatorio y podrias hacer una descripcion mas corta. No?
#27 La mecánica cuántica funciona con probabilidades que (se asume que) no dependen de ningún mecanismo oculto inobservable, y son por lo tanto números aleatorios reales. Esto se puede usar en la práctica.
#42 Para estos trastos se desprecia la parte significativa de la medida y te quedas solo con los últimos decimales, que no es posible predecir con el pronóstico metereológico.
Vas acumulando medidas. Le metes una serie de hashes al conjunto y eso es el input para el algoritmo pseudoaleatorio
#25 Los humanos somos completamente incapaces de generar números aleatorios. Es un desastre al primer intento. Para eso que hay tablas de números aleatorios.
Y luego está usar una pared llena de lámparas de lava y una cámara para generar la semilla en función de los movimientos de la lava, con la aleatoriedad añadida de la gente que pase por delante de esa pared...
#56 esa sucesión es "suma uno y resta uno"... así que no es aleatoria. Aunque según la tira de Dilbert que está más arriba....<
es decir, puedes conseguir por métodos aleatorios una sucesión no aleatoria, ese es el problema. Estadísticamente es muy poco probable, muy difícil, pero a los ordenadores si no haces eso que indica el vídeo se les da condenadamente bien caer en ese problema. O en generar una aleatoria y luego otra aleatoria que sea una función de la primera.
#63 No estás solo, llevo varias semanas escuchando las mismas canciones de una lista de 1000. En mi coche es aún peor, cada hora o así te vuelve a poner las mismas canciones
#33 Eso no lo salvas si el tiro lo has pegado por un impulso aleatorio. Tanto si el universo es determinista como si es aleatorio no puede existir el libre albedrio.
Lanzar múltiples hilos haciendo operaciones no conmiutativas una y otra vez sobre las mismas posiciones de memoria y dejar que las race conditions hagan su trabajo.
Si se ejecuta desde absolutamente las mismas condiciones iniciales supuestamente daría el mismo resultado, pero esas condiciones iniciales no se limitan al programa sino que alcanzan a todo lo que esté ejecutando el dispositivo incluido el más bajo nivel.
#33 lo que dice #29. Puedes calcular solo probabilidades de que algo suceda o no hasta que se observa. La cosa es que al observar algo es el presente.
No se si eso significa que el destino está escrito pero no hay forma de "leerlo" hasta que sucede o que se escribe según llega. De cualquier forma, lo más que vas a poder ver en el futuro son probabilidades.
#52 las CPU de intel y amd mas o menos modernas también lo hacen y tienen instrucciones especificas. Y los VIA de hace montones de años ya tenían soporte en hardware para generar números aleatorios.
#17 "Los ordenadores no suelen tener ningún sensor de viento"
Muchos ordenadores suelen tener micrófono. Casi todos los de uso personal: teléfonos, tablets, portátiles, sobremesa...
Lo que capta un micrófono son valores de presión del aire... No exactamente la "velocidad" del viento, aunque se parece un poco. Por lo que leí, a efectos de aleatoriedad suele usarse el último bit. Si un micrófono te da valores de presión del aire que se traducen en valores de potencial eléctrico, que al pasar por un conversor de analógico a digital te da, por ejemplo, 16 bits por muestra (calidad CDA) entonces tomas solamente el último bit, el menos significativo. Y mínimo sueles tomar 8000 muestras por segundo, es decir, frecuencia de muestreo de 8 kHz. Eso son 8000 bits bastante aleatorios cada segundo. En calidad CDA serían 22 kHz, es decir, 22 000 muestras por segundo. Aparte de la aleatoriedad de las fuentes de sonido (que digas algo o produzcas algún sonido), todo canal de comunicación está sujeto a un "ruido", una perturbación aleatoria, y a eso se suma también ruido eléctrico entre el micrófono y el conversor a digital.
En cuanto a los otros elementos, hay muchos "ordenadores" que no los tienen. Por ejemplo, el "ratón" hay muchos dispositivos que no tienen exactamente eso, tendrían una pantalla táctil, por ejemplo.
En lo referente a la semilla, hay varios problemas. Un problema es repetición periódica. Es decir, quizá en un momento no sepas cuál es la semilla, pero si sabes el algoritmo y ves una secuencia, entonces al cabo de un tiempo sabrás con exactitud cuál es el siguiente número que aparecerá. No importa que en otro reinicio tengas otra semilla... sabrás con exactitud cuál será esa otra semilla y los números derivados de ella, etc. No necesitas ni acceder al sistema de ficheros donde se guarda la semilla (ese podría ser otro problema). No sé si será verdad, pero me suena haber oído o leído que algunos miraban las máquinas tragaperras para ver las combinaciones que salían y sabiendo unas cuantas podían saber cuándo saldría el premio. Daba igual que la semilla fuese diferente cada vez que se apagaba y encendía el máquina. Tampoco importaba que la secuencia completa, si era de 32 bits, tuviese 1000 millones de números diferentes... bastaría saber unos 32 números seguidos para saber en cuál número de 32 bits estás, y con eso ya sabes los que siguen.
Actualmente hay chips de microprocesadores que incluyen un aleatorizador cuántico... mucho mejor que micrófono, teclados o ratón, ya que está en el propio corazón del aparato, un elemento muy pequeño y difícilmente accesible, difícilmente manipulable. Atención: no confundir con computadores cuánticos, es simplemente un microprocesador normal unido a un pequeño elemento que da números aleatorios basado en mecánica cuántica.
Por supuesto, en estos casos quizá se podría atacar modificando el programa, que no tome el número verdaderamente aleatorio de ahí sino otro número no aleatorio que sepas cuál es.
Para la semilla se pueden usar sensores externos (por ejemplo de temperatura) y usar algunos de los decimales, siempre y cuando los rangos sean precisos.
#75 He aquí el punto de vista confrontado a #43 (y que yo comparto).
Desde ese punto de vista ni siquiera tiene sentido plantearse si "el destino está escrito", porque simplemente el futuro no existe. Hay movimiento y funciones de onda colapsando. Y ya.
El tiempo esencialmente es una construcción humana.
#77 los decimales de pi parecen aleatorios, el problema es que siempre son los mismos. Calcular una cantidad concreta de decimales de pi también lleva su tiempo
#86 Si el universo es determinista pegas el tiro por estar predeterminado. Si es aleatorio, lo pegas por serlo. En cualquier caso no hay libre albedrio.
#54 Yo también había pensado en usar los milisegundos que algún proceso o estado, así que me interesa lo de la entropía de la aleatoriedad. Pero buscando en google me ha reenviado a tu propio comentario! ¿Podrías explicar un poco el tema para los que no sabemos exactamente el tema de la entropía para los milisegundos?
Pero yo me refiero a usar computación digital para matemáticas.
Mismamente el teorema del límite central es un teorema matemático que supone aleatoriedad total. Así que si quieres hacer simulaciones necesitas un generador aleatorio si quieres tener resultados que estén con el teorema.
Con los reales pasa lo mismo. El límite te lo pone la mantisa.
Por eso se recurre a "generadores de azar", que introducen en la entrada valores "aleatorios", como puede ser el movimiento del ratón en la pantalla, la velocidad de tecleo .. etc
#6 Los datos de entrada si pueden ser aleatorios. Por ejemplo, la velocidad del viento en un punto determinado en el instante en que se inicia el cálculo.
Lo que se suele hacer también es guardar en un fichero una semilla que se ha generado antes del anterior reinicio, de forma que si es un servidor que tiene pocos elementos de entrada aleatoria no se repita cada vez que se inicia. Parte de la semilla anterior, la va usando y la va guardando periódicamente para cuando necesite usarla más tarde, tras otro reinicio.
Simplemente separa las matemáticas de la computación
Otro drama es la coma flotante vs el cuerpo se números reales
Pero si eres quien hace el sistema operativo y no tienes control de los dispositivos que te pondrá el usuario en un servidor como bien dices la tarjeta de red es de las pocas fuentes de posible aleatoriedad con las que puedes contar.
Pero la tarjeta de red puede iniciarse demasiado tarde para lo que necesitas la aleatoriedad, desconozco si hay protocolos de red cifrados que requieran la clave antes de la conectividad.
1 www.idquantique.com/random-number-generation/products/quantis-random-n
bonus: xkcd.com/221/
doubleblonus xkcd.com/1210/
Humm....
www.idquantique.com/random-number-generation/overview/
cordis.europa.eu/project/id/820405
No había visto más abajo... hay muchos más con lo mismo y ya otro dijo lo de la imagen aleatorea :c
cordis.europa.eu/project/id/820405
Si te pego un tiro no soy responsable porque ya estaba destinado de forma ineludible a hacerlo ?
Y para la semilla aleatoria inicial si no es para algo de extremada seguridad puedes pillar el tiempo en milisengundos del reloj del sistema o si te pones mas exquisito tener algún aparato que haga mediciones en un medio aleatorio, por ejemplo ciertas antenas que miden cambios en el aire
generan conjuntos de números que pueden considerarse aleatorios.
Nunca nadie se quejó de que el resultado no fuera suficientemente aleatorio (entre otras cosas porque una vez capturado el título de la película lo usaba, además, para titular el informe asociado, así que la gente un día leía "Desafío Frontal", al día siguiente "Fortaleza Infernal", luego "Muerte Definitiva 2", "Sangre Sangrienta", "Justicia al amanecer", "Asesinato sin control" y cosas así).
Cuando he dicho computación he querido decir computación digital, no lo he especificado, mi error
De todas formas con el cuerpo de los reales sigue siendo un dilema
Una clave de criptografía moderna tendrá aproximadamente 256 bits de complejidad (las claves RSA tienen mucha mayor longitud, pero en realidad su complejidad real es menos). Si se que el dispositivo tiene una precisión de 64 bits (o peor, 32) eso está reduciendo la cantidad de claves posibles a ese espacio de 2^64, algo que puede romperse fácilmente
www.engadget.com/2010-12-29-hackers-obtain-ps3-private-cryptography-ke
¿ Existirán realidades con leyes físicas distintas entonces ?
Pero tú última pregunta es más complicada. Aunque yo creo que sí. Así que imagínate el procesador cuántico que usa el universo. ¡Qué potencia!
No es nada extraordinario, mi router lleva uno de estos.
Entonces existirán todas las realidades con todas las leyes físicas imaginables.....
incluida una realidad en la que las leyes físicas establecen que la realidad es única....
Si tiras los dados 10 veces y te sale 1,2,1,2,1,2,1,2 seria aleatorio y podrias hacer una descripcion mas corta. No?
#3 Creo que hay una viñeta que habla del tema...
Vas acumulando medidas. Le metes una serie de hashes al conjunto y eso es el input para el algoritmo pseudoaleatorio
es decir, puedes conseguir por métodos aleatorios una sucesión no aleatoria, ese es el problema. Estadísticamente es muy poco probable, muy difícil, pero a los ordenadores si no haces eso que indica el vídeo se les da condenadamente bien caer en ese problema. O en generar una aleatoria y luego otra aleatoria que sea una función de la primera.
The generation of random numbers is too important to be left to chance.
—Robert R. Coveyou
Si se ejecuta desde absolutamente las mismas condiciones iniciales supuestamente daría el mismo resultado, pero esas condiciones iniciales no se limitan al programa sino que alcanzan a todo lo que esté ejecutando el dispositivo incluido el más bajo nivel.
No se si eso significa que el destino está escrito pero no hay forma de "leerlo" hasta que sucede o que se escribe según llega. De cualquier forma, lo más que vas a poder ver en el futuro son probabilidades.
"Los ordenadores no suelen tener ningún sensor de viento"
Muchos ordenadores suelen tener micrófono. Casi todos los de uso personal: teléfonos, tablets, portátiles, sobremesa...
Lo que capta un micrófono son valores de presión del aire... No exactamente la "velocidad" del viento, aunque se parece un poco. Por lo que leí, a efectos de aleatoriedad suele usarse el último bit. Si un micrófono te da valores de presión del aire que se traducen en valores de potencial eléctrico, que al pasar por un conversor de analógico a digital te da, por ejemplo, 16 bits por muestra (calidad CDA) entonces tomas solamente el último bit, el menos significativo. Y mínimo sueles tomar 8000 muestras por segundo, es decir, frecuencia de muestreo de 8 kHz. Eso son 8000 bits bastante aleatorios cada segundo. En calidad CDA serían 22 kHz, es decir, 22 000 muestras por segundo. Aparte de la aleatoriedad de las fuentes de sonido (que digas algo o produzcas algún sonido), todo canal de comunicación está sujeto a un "ruido", una perturbación aleatoria, y a eso se suma también ruido eléctrico entre el micrófono y el conversor a digital.
En cuanto a los otros elementos, hay muchos "ordenadores" que no los tienen. Por ejemplo, el "ratón" hay muchos dispositivos que no tienen exactamente eso, tendrían una pantalla táctil, por ejemplo.
En lo referente a la semilla, hay varios problemas. Un problema es repetición periódica. Es decir, quizá en un momento no sepas cuál es la semilla, pero si sabes el algoritmo y ves una secuencia, entonces al cabo de un tiempo sabrás con exactitud cuál es el siguiente número que aparecerá. No importa que en otro reinicio tengas otra semilla... sabrás con exactitud cuál será esa otra semilla y los números derivados de ella, etc. No necesitas ni acceder al sistema de ficheros donde se guarda la semilla (ese podría ser otro problema). No sé si será verdad, pero me suena haber oído o leído que algunos miraban las máquinas tragaperras para ver las combinaciones que salían y sabiendo unas cuantas podían saber cuándo saldría el premio. Daba igual que la semilla fuese diferente cada vez que se apagaba y encendía el máquina. Tampoco importaba que la secuencia completa, si era de 32 bits, tuviese 1000 millones de números diferentes... bastaría saber unos 32 números seguidos para saber en cuál número de 32 bits estás, y con eso ya sabes los que siguen.
Actualmente hay chips de microprocesadores que incluyen un aleatorizador cuántico... mucho mejor que micrófono, teclados o ratón, ya que está en el propio corazón del aparato, un elemento muy pequeño y difícilmente accesible, difícilmente manipulable. Atención: no confundir con computadores cuánticos, es simplemente un microprocesador normal unido a un pequeño elemento que da números aleatorios basado en mecánica cuántica.
Por supuesto, en estos casos quizá se podría atacar modificando el programa, que no tome el número verdaderamente aleatorio de ahí sino otro número no aleatorio que sepas cuál es.
Desde ese punto de vista ni siquiera tiene sentido plantearse si "el destino está escrito", porque simplemente el futuro no existe. Hay movimiento y funciones de onda colapsando. Y ya.
El tiempo esencialmente es una construcción humana.
O no,
No olvides que soy gallego.
Pero yo me refiero a usar computación digital para matemáticas.
Mismamente el teorema del límite central es un teorema matemático que supone aleatoriedad total. Así que si quieres hacer simulaciones necesitas un generador aleatorio si quieres tener resultados que estén con el teorema.
Con los reales pasa lo mismo. El límite te lo pone la mantisa.
en.wikipedia.org/wiki/Entropy_(information_theory)