Definición de pseudoaleatoriedad (informática)
Los números pseudoaleatorios son números generados por computadoras. No son verdaderamente aleatoriedad porque, cuando una computadora funciona correctamente, nada es aleatorio.
Las computadoras son dispositivos deterministas (por diseño, el comportamiento de una computadora es completamente predecible). Por lo tanto para crear algo impredecible las computadoras emplean algoritmos matemáticos para producir números que son “suficientemente aleatorios”.
Sin embargo, a pesar de que los números pseudoaleatorios no son verdaderamente aleatorios, su utilización es muy común en diferentes áreas, como la criptografía, la simulación de procesos naturales y la generación de secuencias aleatorias en juegos o sorteos.
Existen diferentes algoritmos utilizados para generar números pseudoaleatorios. Algunos de ellos se basan en operaciones matemáticas simples, mientras que otros utilizan técnicas más sofisticadas como la generación de secuencias caóticas o la utilización de datos externos, como el movimiento del ratón o las fluctuaciones en el tiempo.
Es importante destacar que, aunque los números pseudoaleatorios pueden parecer aleatorios a simple vista, en realidad siguen un patrón predecible una vez que se conoce el algoritmo utilizado. Esto implica que, si alguien logra obtener información suficiente sobre el algoritmo y los valores iniciales utilizados, podría predecir los números pseudoaleatorios generados por la computadora.
Dado esto, es fundamental utilizar algoritmos de generación de números pseudoaleatorios robustos y seguros, con el fin de evitar que se descubra el patrón subyacente y se comprometa la aleatoriedad aparente. Además, es común utilizar técnicas como el "sembrado" del generador con un valor inicial impredecible o el uso de fuentes de entropía externas para mejorar la calidad de la aleatoriedad generada.
En resumen, los números pseudoaleatorios son una herramienta útil y ampliamente utilizada en el ámbito de la computación, aunque no sean verdaderamente aleatorios. Aunque existen limitaciones en su aleatoriedad, se pueden emplear estrategias y algoritmos para generar secuencias pseudoaleatorias lo suficientemente cercanas a la aleatoriedad verdadera para satisfacer las necesidades en diferentes aplicaciones.
¿Cuándo son empleados los números pseudoaleatorios?
Los números pseudoaleatorios son esenciales para múltiples aplicaciones de computadoras, desde juegos hasta seguridad.
En videojuegos los números aleatorios proveen elementos impredecibles a los que debe responder el jugador ya sea esquivar una bala aleatoria o sacar una carta de una baraja que fue barajada aleatoriamente.
En seguridad informática, la aleatoriedad es importante en los algoritmos de cifrado que deben crear códigos que no puedan ser predichos o adivinados.
¿Qué es un PRNG?
Del inglés pseudo-random number generator o generador de números pseudoaleatorios, es un programa o una función que emplea matemática para simular aleatoriedad. También puede ser llamado generador de números aleatorios digital (DRNG: digital random number generator) o también generador de bit aleatorio determinístico (DRBG: deterministic random bit generator).
La matemática para la aleatoriedad puede ser compleja, pero, en general, usar un PRNG requiere solo de dos pasos:
1. Proveer al PRNG con una semilla (seed) arbitraria.
2. Preguntar por el siguiente número aleatorio.
El valor semilla (seed value) es un punto de inicio para crear números aleatorios. El valor es empleado cuando se crear los números pseudoaleatorios. Si el valor de la semilla cambia, los números generados también y un mismo valor de semilla producirá siempre los mismos números. Por esta razón los números no son realmente aleatorios, porque la verdadera aleatoriedad no debería ser capaz de recrearse.
El tiempo actual es usualmente empleado como valor único de semilla. Por ejemplo, la fecha 15 de septiembre de 2017 a las 3:20 PM y 4.02356 segundos UTC, puede ser expresado en un número entero. Esa fecha específica no volverá a ocurrir nunca, por lo tanto un PRNG con esa semilla producirá un único conjunto de números aleatorios.
Cómo generar números aleatorios en computadoras
En la línea de comandos de Windows o un archivo BAT: puede emplearse la variable de entorno %RANDOM% que producirá un número aleatorio entre 0 y 32767. Su semilla es la fecha-hora en el momento de ejecutar el comando.
Por ejemplo:
echo “Numero aleatorio: %RANDOM%”.
En el programa de hojas de cálculo Excel, en Google Sheets y en Libreoffice Calc se puede emplear la fórmula =RAND(). Producirá un número entre 0 y 1. Por ejemplo: 0,534319. Cada vez que abrimos la hoja de cálculo cambiará el valor.
Generar números aleatorios en programación
La mayoría de los lenguajes de programación tiene sus propias funciones PRNG.
En lenguaje C:
Se emplea la librería stdlib. La forma usual para la semilla es emplear la función time() definida en time.h. El número generado aleatoriamente caerá entre 0 y la constante RAND_MAX, un entero garantizado por sistema que será hasta 32767.
Código de ejemplo:
incluir time.h, stdlib.h y stdio.h
void main () {
srand(time(NULL)); /* se le da la semilla al generador */
int rand1 = rand(); /* genera un entero entre 0 y RAND_MAX */
printf("El número aleatorio entre 0 y %d: %d
", RAND_MAX, (int)rand1);
/* Generar un numero aleatorio dentro de un rango... */
int min = 0;
int max = 100;
float rand2 = (float)rand() * max / RAND_MAX + 1;
int round = (int)rand2;
printf("Numero aleatorio entre %d y %d: %d (%f)
", min, max, round, rand2);
return;
}
C++
Incluir: ctime, cstdlib, iostream
int main () {
srand(time(NULL));
std::cout << "Numero aleatorio entre 0 y " << RAND_MAX << ": " << rand() << "
"
<< "Numero aleatorio entre 1 y 100: " << (rand() % 100) + 1 << std::endl;
return 0;
}
JavaScript
En este caso no es posible dar un valor semilla al JavaScript; si se requiere una aleatoriedad más robusta leer: Github.com
console.log("Numero aleatorio en el rango [0,1): " + Math.random());
console.log("Numero aleatorio en el rango [1,100]: " + Math.floor(Math.random() * 101));
Resumen: pseudoaleatoriedad
Los números pseudoaleatorios son generados por computadoras y no son totalmente aleatorios, ya que las computadoras son dispositivos deterministas. Se utilizan algoritmos matemáticos para producir números que se consideran "suficientemente aleatorios".
¿Qué son los números pseudoaleatorios?
Los números pseudoaleatorios son números generados por computadoras. Aunque se llaman "pseudoaleatorios", no son verdaderamente aleatorios porque, cuando una computadora funciona correctamente, nada es realmente aleatorio. Sin embargo, estos números siguen un patrón determinado y son lo suficientemente complejos como para parecer aleatorios en ciertos contextos.
¿Cómo se generan los números pseudoaleatorios?
Los números pseudoaleatorios se generan mediante algoritmos matemáticos en las computadoras. Estos algoritmos toman una semilla inicial (un número de partida) y, a partir de ella, generan una secuencia aparentemente aleatoria de números. La semilla inicial puede ser cualquier valor, pero debe ser única para cada secuencia de números generada.
¿Son seguros los números pseudoaleatorios para criptografía?
No, los números pseudoaleatorios no son seguros para criptografía. Debido a que siguen un patrón determinado, pueden ser predecibles por alguien que conozca el algoritmo y la semilla inicial utilizada. Para aplicaciones criptográficas, se requiere de números generados mediante fuentes de verdadera aleatoriedad, como el ruido atmosférico o el tiempo de llegada de partículas radiactivas.
¿Por qué se utilizan los números pseudoaleatorios en la informática?
Los números pseudoaleatorios son ampliamente utilizados en la informática debido a su simplicidad y eficiencia en la generación de secuencias aparentemente aleatorias. Son especialmente útiles en simulaciones, juegos, diseño de algoritmos y otras aplicaciones donde no se requiere de verdadera aleatoriedad, pero se necesita una apariencia aleatoria.
¿Existe algún método para mejorar la aleatoriedad de los números pseudoaleatorios?
Sí, existen métodos para mejorar la aleatoriedad de los números pseudoaleatorios. Uno de ellos es la utilización de semillas más complejas y menos predecibles, como la fecha y hora actual, claves criptográficas o datos obtenidos de sensores físicos. También se pueden utilizar algoritmos más avanzados que generen secuencias más aleatorias.
¿Qué sucede si la computadora genera dos veces el mismo número pseudoaleatorio en una secuencia?
Si una computadora genera dos veces el mismo número pseudoaleatorio en una secuencia, significa que el algoritmo utilizado y la semilla inicial no son lo suficientemente complejos. Esto puede ser un problema en ciertas aplicaciones donde se requiere de una secuencia verdaderamente aleatoria. Es importante utilizar algoritmos y semillas adecuadas para evitar este tipo de repetición.
Autor: Leandro Alegsa
Actualizado: 09-07-2023
¿Cómo citar este artículo?
Alegsa, Leandro. (2023). Definición de pseudoaleatoriedad. Recuperado de https://www.alegsa.com.ar/Dic/pseudoaleatoriedad.php