Un Generador aleatorio es una herramienta o algoritmo que produce resultados impredecibles y no deterministas. Estos generadores son esenciales en muchos ámbitos, desde la criptografía a la simulación informática.
- Resultados imprevisibles: Los generadores aleatorios ofrecen resultados imprevisibles.
- Uso en criptografía: Son cruciales para una comunicación segura.
- Simulaciones por ordenador: Se utiliza con frecuencia en la modelización y el análisis de sistemas complejos.
Generador de números aleatorios
¿Cómo funciona un generador de números aleatorios? ?
Los generadores aleatorios funcionan con procesos físicos o algoritmos matemáticos. Los tipos más importantes son los generadores de números aleatorios verdaderos (TRNG) y los generadores de números pseudoaleatorios (PRNG).
¿Dónde se juega al blackjack en línea?
Hemos tenido las mejores experiencias en Black Jack en el Casino en vivo Playamo hecho. En mi opinión, ahí es donde está, MEJOR SELECCIÓN ¡en mesas con crupieres en vivo y puedes entrenarte muy bien para el casino real! ¡Comparado con otros casinos online, las ganancias en Playamo son realmente pagadas y es por eso que definitivamente recomiendo Playamo Casino Online!
El Casino Playamo cuenta con numerosas mesas de blackjack en vivo y un Pago rápido de Ganar.
Las diversas aplicaciones de la aleatoriedad han llevado al desarrollo de diferentes métodos para generar datos aleatorios. Algunos de ellos existen desde la antigüedad, con ejemplos tan conocidos como el lanzamiento de dados, el lanzamiento de monedas, el barajado de naipes, el uso de tallos de milenrama (para la adivinación) en el I Ching y un sinfín de técnicas más. Debido a la naturaleza mecánica de estas técnicas, generar grandes cantidades de números suficientemente aleatorios (importantes en estadística) requería mucho trabajo y tiempo. Por eso, a veces los resultados se recopilaban y distribuían en forma de tablas de números aleatorios.
Existen varios métodos computacionales para generar números pseudoaleatorios. Todos ellos no logran alcanzar el objetivo de la verdadera aleatoriedad, aunque sí cumplen, con mayor o menor éxito, algunos de los requisitos estadísticos de los números pseudoaleatorios. Pruebas para la aleatoriedad, que están diseñados para medir lo impredecibles que son sus resultados (es decir, hasta qué punto son reconocibles sus patrones). Esto hace que, en general, sean inutilizables para aplicaciones como la criptografía. Sin embargo, también existen generadores de números pseudoaleatorios criptográficamente seguros (CSPRNGS) cuidadosamente diseñados con características especiales diseñadas específicamente para la Insertar se desarrollaron en criptografía.
Aplicaciones de los generadores aleatorios
- Juegos y entretenimiento:
- Los generadores aleatorios se utilizan en los juegos para crear elementos impredecibles, como tiradas de dados, robos de cartas o generación de niveles.
- Criptografía:
- En seguridad informática, los generadores de números aleatorios son cruciales para la generación de claves, sales y nonces, necesarios para el cifrado y la autenticación.
- Estadísticas y muestras:
- Al crear muestras para encuestas y estudios, los generadores aleatorios ayudan a extraer muestras representativas e imparciales.
- Modelos de simulación:
- En ciencia y tecnología, los generadores de números aleatorios se utilizan para realizar simulaciones Monte Carlo que emplean variables aleatorias para modelar y analizar sistemas complejos.
- Loterías y concursos:
- Garantizan la selección justa y aleatoria de los ganadores en loterías, sorteos y otros concursos.
- Algoritmos de optimización:
- Los métodos aleatorios, como los algoritmos genéticos y el recocido simulado, utilizan generadores aleatorios para buscar eficazmente espacios de soluciones y encontrar soluciones óptimas.
- Inteligencia artificial y aprendizaje automático Aprender:
- Se utilizan generadores aleatorios para mezclar conjuntos de datos y seleccionar aleatoriamente datos de entrenamiento y de prueba para validar y entrenar los modelos.
Los generadores de números aleatorios tienen aplicaciones en Juegos de azaren el muestreo estadístico, la simulación informática, la criptografía, el diseño totalmente aleatorio y otras áreas en las que es deseable la generación de un resultado impredecible. En general, en las aplicaciones en las que la imprevisibilidad es la característica clave, como las aplicaciones de seguridad, se prefieren los generadores de hardware siempre que sea posible.
Los generadores de números pseudoaleatorios son muy útiles en el desarrollo de métodos de simulación Monte Carlo, ya que la depuración se facilita al poder repetir la misma secuencia de números aleatorios al empezar con la misma semilla aleatoria. También se utilizan en criptografía, siempre que la semilla permanezca secreta. El emisor y el receptor pueden generar automáticamente el mismo conjunto de números para utilizarlos como clave.
Die Erzeugung von Pseudorandom-Zahlen ist eine wichtige und häufige Aufgabe in der Computerprogrammierung. Während Kryptografie und bestimmte numerische Algorithmen einen sehr hohen Grad an scheinbarer Zufälligkeit erfordern, benötigen viele andere Operationen nur ein bescheidenes Maß an Unvorhersehbarkeit. Einige einfache Beispiele könnten sein, einem Benutzer ein „zufälliges Zitat des Tages“ zu präsentieren oder zu bestimmen, in welche Richtung sich ein computergesteuerter Gegner in einem Computerspiel bewegen könnte. Schwächere Formen der Zufälligkeit werden in Hash-Algorithmen und bei der Erstellung amortisierter Such- und Sortieralgorithmen verwendet.
Einige Anwendungen, die auf den ersten Blick für Randomisierung geeignet erscheinen, sind in Wirklichkeit nicht so einfach. Zum Beispiel muss ein System, das „zufällig“ Musikstücke für ein Hintergrundmusiksystem auswählt, nur zufällig erscheinen und kann sogar Möglichkeiten haben, die Musikauswahl zu steuern: Ein wirklich zufälliges System hätte keine Einschränkung, dass derselbe Titel zwei- oder dreimal hintereinander erscheinen könnte.
Números aleatorios reales frente a números pseudoaleatorios ?
La diferencia entre los números reales y los pseudoaleatorios radica en la previsibilidad y el origen de la aleatoriedad.
- Números aleatorios reales: Impredecible, basado en procesos físicos.
- Números pseudoaleatorios: Generados por algoritmos, predecibles si se conoce la semilla.
Existen dos métodos principales para generar números aleatorios. El primer método mide un fenómeno físico que se considera aleatorio y luego compensa las posibles distorsiones en el proceso de medición. Ejemplos de fuentes son la medición del ruido atmosférico, el ruido térmico y otros fenómenos electromagnéticos y mecánicos cuánticos externos. Por ejemplo, la radiación cósmica de fondo o la desintegración radiactiva medida durante cortos periodos de tiempo son fuentes de entropía natural (como medida de la imprevisibilidad o sorpresa del proceso de generación de números).
Die Geschwindigkeit, mit der Entropie aus natürlichen Quellen gewonnen werden kann, hängt von den zugrunde liegenden physikalischen Phänomenen ab, die gemessen werden. Daher wird gesagt, dass Quellen natürlicherweise vorkommender „wahrer“ Entropie blockierend sind – sie sind ratenbegrenzt, bis genügend Entropie gesammelt wird, um die Nachfrage zu decken. Auf einigen Unix-ähnlichen Systemen, einschließlich der meisten Linux-Distributionen, blockiert die Pseudogerätedatei /dev/random, bis ausreichend Entropie aus der Umgebung gesammelt wurde. Aufgrund dieses blockierenden Verhaltens können große Massendatenlesevorgänge von /dev/random, wie das Befüllen einer Festplatte mit Zufallsbits, auf Systemen, die diese Art von Entropiequelle verwenden, oft langsam sein.
El segundo método utiliza algoritmos informáticos que pueden generar largas secuencias de resultados aparentemente aleatorios que, de hecho, están completamente determinados por un valor inicial más corto, conocido como valor semilla o clave. Esto permite reproducir toda la secuencia aparentemente aleatoria si se conoce el valor semilla. Este tipo de generador de números aleatorios suele denominarse generador de números pseudoaleatorios. Este tipo de generador no suele ser de bloqueo, por lo que no está limitado por un evento externo, lo que permite la lectura de grandes volúmenes de datos.
Algunos sistemas utilizan un enfoque híbrido que recoge aleatoriedad de fuentes naturales cuando están disponibles y se basa en generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG) que se vuelven a cargar periódicamente cuando la tasa de lectura deseada supera la capacidad del enfoque de recogida natural para satisfacer la demanda. Este enfoque evita el comportamiento de bloqueo de velocidad limitada de los generadores de números aleatorios basados en métodos más lentos y puramente basados en el entorno.
Während ein Pseudorandom-Zahlengenerator, der ausschließlich auf deterministischer Logik basiert, niemals als „wahre“ Zufallsquelle im reinsten Sinne des Wortes angesehen werden kann, sind sie in der Praxis im Allgemeinen ausreichend, selbst für anspruchsvolle sicherheitskritische Anwendungen. Sorgfältig entwickelte und implementierte Pseudorandom-Zahlengeneratoren können für sicherheitskritische kryptografische Zwecke zertifiziert werden, wie dies bei den Algorithmen Yarrow und Fortuna der Fall ist. Ersterer ist die Grundlage der /dev/random-Entropiequelle auf FreeBSD, AIX, macOS, NetBSD und anderen. OpenBSD verwendet einen Pseudorandom-Zahlenalgorithmus, der als arc4random bekannt ist.
Métodos de generación
Métodos físicos
Los primeros métodos de generación de números aleatorios, como tiradas de dados, lanzamientos de monedas y ruletas, se siguen utilizando hoy en día, principalmente en juegos y apuestas, ya que son demasiado lentos para la mayoría de aplicaciones en estadística y criptografía.
Un generador físico de números aleatorios puede basarse en un fenómeno físico atómico o subatómico esencialmente aleatorio cuya imprevisibilidad puede atribuirse a las leyes de la mecánica cuántica. Entre las fuentes de entropía se encuentran la desintegración radiactiva, el ruido térmico, el ruido de los disparos, el ruido de avalancha en los diodos Zener, las desviaciones de los relojes, los movimientos temporales del cabezal de lectura de un disco duro y el ruido radioeléctrico. Sin embargo, los fenómenos físicos y las herramientas utilizadas para medirlos suelen presentar asimetrías y distorsiones sistemáticas que hacen que sus resultados no sean uniformemente aleatorios. Un extractor aleatorio, como una función hash criptográfica, puede utilizarse para lograr una distribución uniforme de bits a partir de una fuente no uniformemente aleatoria, pero a una tasa de bits inferior.
En 2013 se desarrolló un prototipo de generador de números aleatorios de alta velocidad en tiempo real basado en un láser caótico.
Se han desarrollado varios métodos inventivos para recoger esta información entrópica. Una técnica consiste en aplicar una función hash a un fotograma de un flujo de vídeo procedente de una fuente impredecible. Lavarand utilizó esta técnica con imágenes procedentes de múltiples lámparas de lava. HotBits midió la desintegración radiactiva con tubos Geiger-Müller, mientras que Random.org registró las fluctuaciones en la amplitud del ruido atmosférico con una radio normal.
Métodos asistidos por ordenador
La mayoría de los números aleatorios generados por ordenadores utilizan PRNG, que son algoritmos que pueden generar automáticamente largas secuencias de números con buenas propiedades de aleatoriedad, pero con el tiempo las secuencias se repiten (o el uso de memoria crece indefinidamente). Estos números aleatorios son suficientes en muchas situaciones, pero no son tan aleatorios como los números generados a partir del ruido electromagnético atmosférico utilizado como fuente de entropía. El conjunto de valores generados por estos algoritmos suele estar determinado por un número fijo llamado semilla. Uno de los PRNG más comunes es el generador de congruencia lineal, que utiliza la relación de recurrencia
Xn+1=(aXn+b)mod mX_{n+1} = (aX_n + b) \mod mXn+1=(aXn+b)modm
verwendet, um Zahlen zu erzeugen, wobei aaa, bbb und mmm große ganze Zahlen sind, und Xn+1X_{n+1}Xn+1 die nächste Zahl in einer Reihe von pseudorandom Zahlen ist. Die maximale Anzahl von Zahlen, die die Formel erzeugen kann, ist das Modul mmm. Die Rekurrenzbeziehung kann auf Matrizen erweitert werden, um viel längere Perioden und bessere statistische Eigenschaften zu haben. Um bestimmte nicht-zufällige Eigenschaften eines einzelnen linearen Kongruenzgenerators zu vermeiden, können mehrere solcher Zufallszahlengeneratoren mit leicht unterschiedlichen Werten des Multiplikatorkoeffizienten aaa parallel verwendet werden, wobei ein „Master“-Zufallszahlengenerator zwischen den verschiedenen Generatoren auswählt.
Un método sencillo para generar manualmente números aleatorios es el llamado método del cuadrado medio, propuesto por John von Neumann. Aunque es fácil de aplicar, su resultado es de mala calidad. Tiene un periodo muy corto y serias debilidades, como el hecho de que la secuencia de salida casi siempre converge a cero. Una innovación reciente consiste en combinar el método del cuadrado medio con una secuencia de Weyl. Este método produce resultados de gran calidad durante un largo periodo.
La mayoría de los lenguajes de programación contienen funciones o rutinas de biblioteca que proporcionan generadores de números aleatorios. Suelen estar diseñados para proporcionar un byte o palabra aleatoria o un número de coma flotante distribuido uniformemente entre 0 y 1.
La calidad, es decir, la aleatoriedad, de tales funciones de biblioteca varía ampliamente, desde una salida completamente predecible hasta criptográficamente segura. El generador de números aleatorios estándar de muchos lenguajes, como Python, Ruby, R, IDL y PHP, se basa en el algoritmo Mersenne Twister y no es suficiente para fines criptográficos, como se indica explícitamente en la documentación del lenguaje. Estas funciones de biblioteca suelen tener propiedades estadísticas deficientes y algunos patrones se repiten después de sólo decenas de miles de ensayos. A menudo se inicializan con el reloj en tiempo real de un ordenador como semilla, ya que dicho reloj es de 64 bits y mide en nanosegundos, mucho más allá de la precisión de una persona. Estas funciones pueden proporcionar una aleatoriedad suficiente para determinadas tareas (por ejemplo, los videojuegos), pero son inadecuadas cuando se requiere una aleatoriedad de alta calidad, como en aplicaciones criptográficas o estadísticas.
Generadores de números aleatorios de mayor calidad están disponibles en la mayoría de los sistemas operativos; por ejemplo, /dev/random en varios derivados de BSD, Linux, Mac OS X, IRIX y Solaris, o CryptGenRandom para Microsoft Windows. La mayoría de los lenguajes de programación, incluidos los mencionados anteriormente, proporcionan una forma de acceder a estas fuentes de nivel superior.
Generado por personas
La generación de números aleatorios también puede ser llevada a cabo por humanos, recogiendo diversas entradas de los usuarios finales y utilizándolas como fuente de aleatoriedad. Sin embargo, la mayoría de los estudios revelan que los sujetos humanos muestran cierto grado de no aleatoriedad cuando intentan generar una secuencia aleatoria de, por ejemplo, dígitos o letras. Es posible que cambien de elección con demasiada frecuencia en comparación con un buen aleatorizador, por lo que este enfoque no se utiliza mucho. Por la misma razón por la que los humanos no realizan bien esta tarea, la generación humana de números aleatorios puede utilizarse como herramienta para obtener información sobre funciones cerebrales a las que no se puede acceder por otros medios.
Tratamiento posterior y controles estadísticos
Incluso con una fuente de números aleatorios plausible (quizá de un generador de hardware basado en la mecánica cuántica), hay que tener cuidado para obtener números completamente imparciales. El comportamiento de estos generadores suele cambiar con la temperatura, la tensión de alimentación, la antigüedad del dispositivo u otras influencias externas.
Los números aleatorios generados se someten a veces a pruebas estadísticas antes de ser utilizados para garantizar que la fuente subyacente sigue funcionando, y luego se post-procesan para mejorar sus propiedades estadísticas. Un ejemplo sería el generador de números aleatorios por hardware TRNG9803, que utiliza una medición de entropía como prueba de hardware y luego post-procesa la secuencia aleatoria con un cifrado de flujo de registro de desplazamiento. En general, es difícil utilizar pruebas estadísticas para validar los números aleatorios generados. Wang y Nicol propusieron una técnica de prueba estadística basada en la distancia que se utiliza para identificar los puntos débiles de múltiples generadores de números aleatorios. Li y Wang propusieron un método para probar números aleatorios basado en fuentes de entropía caótica láser que utiliza propiedades del movimiento browniano.
También se utilizan pruebas estadísticas para garantizar que el resultado final postprocesado de un generador de números aleatorios es realmente insesgado, y se han desarrollado numerosos paquetes de pruebas de aleatoriedad.
Otras consideraciones
Personalizar la distribución
Distribuciones uniformes
Die meisten Zufallszahlengeneratoren arbeiten nativ mit ganzen Zahlen oder einzelnen Bits, daher ist ein zusätzlicher Schritt erforderlich, um die „kanonische“ Gleichverteilung zwischen 0 und 1 zu erreichen. Die Implementierung ist nicht so trivial wie die Division der Ganzzahl durch ihren maximalen möglichen Wert. Konkret:
- El entero utilizado en la transformación debe proporcionar suficientes bits para la precisión prevista.
- La propia naturaleza de la aritmética de coma flotante implica que hay más precisión cuanto más se acerca el número a cero. Esta precisión adicional no suele utilizarse debido al gran número de bits necesarios.
- Los errores de redondeo durante la división pueden distorsionar el resultado. En el peor de los casos, una zona supuestamente excluida puede dibujarse con números reales, contrariamente a lo que se espera de las matemáticas.
Der Mainstream-Algorithmus, der von OpenJDK, Rust und NumPy verwendet wird, wird in einem Vorschlag für die STL von C++ beschrieben. Er nutzt nicht die zusätzliche Präzision und leidet nur im letzten Bit an Verzerrungen aufgrund des Rundens auf die nächste gerade Zahl. Andere numerische Bedenken sind berechtigt, wenn diese „kanonische“ Gleichverteilung auf einen anderen Bereich verschoben wird. Eine vorgeschlagene Methode für die Swift-Programmiersprache behauptet, überall die volle Präzision zu nutzen.
Gleichmäßig verteilte ganze Zahlen werden häufig in Algorithmen wie dem Fisher-Yates-Shuffle verwendet. Auch hier kann eine naive Implementierung eine Modulo-Verzerrung in das Ergebnis einführen, daher müssen aufwendigere Algorithmen verwendet werden. Eine Methode, die fast nie eine Division durchführt, wurde 2018 von Daniel Lemire beschrieben, wobei der aktuelle Stand der Technik der arithmetischen Kodierungs-inspirierte „optimale Algorithmus“ von Stephen Canon von Apple Inc. im Jahr 2021 ist.
La mayoría de los RNG de 0 a 1 incluyen el 0 pero excluyen el 1, mientras que otros incluyen o excluyen ambos.
Otras distribuciones
Dada una fuente de números aleatorios distribuidos uniformemente, existen algunos métodos para crear una nueva fuente aleatoria que corresponda a una función de densidad de probabilidad. Un método denominado método de inversión consiste en integrar a un rango que sea mayor o igual que el número aleatorio (que debería generarse entre 0 y 1 para distribuciones adecuadas). Un segundo método, denominado método de aceptación-rechazo, consiste en elegir un valor x y un valor y y comprobar si la función de x es mayor que el valor y. Si es así, el valor x es mayor que el valor y. Si es así, se acepta el valor x. En caso contrario, el valor x-w