Los
números aleatorios son cruciales en numerosos ámbitos de la informática, como
para simular juegos de dinero pero también para la seguridad y el cifrado.
¿Cómo pedir a ordenadores, máquinas deterministas por naturaleza, generar
números aleatorios? Elementos de respuesta…
La
pregunta puede parecer sorprendente y no tan complicada: ¿cómo un ordenador
puede generar un número aleatorio? En realidad, es una pregunta más espinosa de
lo que puede parecer y una tarea finalmente muy complicada. Los ejemplos de procesos
aleatorios en el mundo que nos rodea no faltan: el lanzamiento de dado, de
monedas, o incluso la desintegración de elementos radioactivos para los más
científicos de nosotros.
Estos
procesos aleatorios fueron usados desde tiempos inmemoriales, el objetivo es el
de dejar una decisión decidirse por suerte. Si el aleatorio, o noción de
suerte, es bastante simple de concebir para el ser humano, sigue siendo un
concepto muy complicado de pedir a un ordenador. Por naturaleza, los
ordenadores son máquinas deterministas: por una misma pregunta, siempre
obtendrás la misma respuesta. Los ordenadores incluso fueron pensados
específicamente para funcionar así. El aleatorio es un parámetro que se quiere
eliminar de los procesos algorítmicos. Entonces, ¿cómo se pide a un ordenador
producir un número aleatorio?
De la utilidad de los números aleatorios
Antes de preguntarse cómo hacer
una primera pregunta podría ser: ¿Por qué queremos preguntarle a un ordenador
generar números aleatorios? Pues bien, para simular procesos aleatorios como
lanzamientos de dados, sorteo, o juegos de cartas, para simular juegos de
dinero por ejemplo. También podemos hablar de la simulación de acontecimientos
en los videojuegos o en el ámbito de la criptografía, para la codificación de contraseñas
y la protección de datos. Los ejemplos de uso de números aleatorios son
entonces numerosos y pueden cubrir aspectos cruciales cuando la seguridad o el
dinero entran en juego.
La aleatoria y
la informática
Existen dos tipos de aleatoria en
informática, lo que llamamos el pseudoaleatorio y la «verdadera»
aleatoria. Primero, el pseudoaleatorio representa todos los procesos
algorítmicos que permiten generar aleatoriamente números. Lo que hay que tener
en mente es que es imposible pedirle a una máquina determinista producir
aleatoriamente un número. A partir de este hecho, el principio generalmente
empleado es el siguiente: un valor de inicio se elige, llamado valor raíz.
Luego este valor va a ser modificado con la ayuda de un algoritmo de transformación.
Este algoritmo es un proceso que reproduce la aleatoria, en todo caso en
teoría. Es una secuencia de operación que debe ser difícil de comprender al
mirar tan solo los números producidos. El proceso de transformación del
algoritmo debe entonces ser complejo y
no dar la sensación de seguir un procedimiento evidente desde fuera. Tan
complejo como sea, al ser constantemente repetido este proceso y al seguir una
arquitectura predefinida, los números producidos no son verdaderamente
aleatorios.
Entonces, estos procesos
algorítmicos no son una «verdadera » aleatoria, que sin embargo existe en
informática. Esta verdadera aleatoria función con el apoyo de elementos físicos
externos al ordenador, que ellos si son realmente aleatorios. Un ejemplo clásico
es basarse en la desintegración radio-activa de un átomo. Este proceso es
aleatorio y según las teorías cuánticas, es imposible predecirlo. Los números
generados a partir de este proceso son entonces totalmente imprevisibles y no
siguen ningún paradigma- un modelo simplificado-predefinido. En práctica sin
embargo, si queremos que un ordenador genere números aleatorios, este no puede
siempre referirse a un procedimiento aleatorio como la desintegración de
elementos radioactivos, es entonces necesario encontrar otros procesos
aleatorios asequibles.
Un proceso habitual de los
ordenadores es esperar algunos comportamientos del utilizador, como por ejemplo
el momento exacto cuando va a apretar una de las teclas del teclado. El ser
humano al no ser una máquina, es imprevisible por naturaleza.
No la misma
aleatoria según el uso
Es evidente que la importancia de la tarea que cumplir va a condicionar la
elección del tipo de aleatoria establecida. El pseudoaleatorio, aunque menos
performante y útil que la verdadera aleatoria, no es por tanto inutil. En el
contexto de un videojuego por ejemplo, no es necesariamente muy grave que el
proceso de generación de distribución de cartas del crupier contra el cual
estás jugando sea realmente aleatorio. Si quieres elegir una muestra
representativa y equitativamente repartida en un juego de datos, un algoritmo
pseudoaleatorio puede ser suficiente también.
No obstante, en el caso de un
juego de apuesta o de dinero, donde los usuarios arriesgan pérdidas o
ganancias, es necesario que el proceso de generación del número sea, él,
perfectamente aleatorio para que no pueda ser predecido. Al igual en
criptografía, si el proceso de codificación de las contraseñas es demasiado
fácil de adivinar, será posible encontrar las contraseñas al tener acceso a
suficientes ejemplos. Es entonces claro que hay que calibrar la calidad del
procesos de generación en función del uso que se le hace: cuánto más crítico es
el proceso, más debe ser performante el proceso de generación de números
aleatorios.
La generación
aleatoria y la controversia
Con el fin de permitir a nuestros ordenadores tener
acceso a procesos aleatorios para sus tareas habituales, los constructores de
procesadores como Intel proponen generadores de números aleatorios basados en
su material. El procesador, un componente informático a menudo considerado como
el cerebro del ordenador, proporciona números aleatorios al sistema de
explotación, y esto de manera automatizada. Los usuarios no controlan para nada
este proceso que comúnmente se llama una « caja negra». Una de las
controversias actuales es que si ciertas organizaciones como la NSA (una
organización de vigilancia americana) tienen acceso a un fallo en este
proceso, a menudo llamado «backdoor» en el ámbito, esta organización sería capaz
de romper las llaves de codificación - cifrado-
proporcionadas por este método. Estos fallos pueden evidentemente ser
deliberadamente insertados por los creadores del proceso. Así, esto daría
acceso a datos potencialmente sensibles y supuestamente en seguridad con
personas que no deben tener acceso a ellos. Este aspecto es actualmente un
asunto de crítica, y muchos cuestionamientos están planteados en lo que
concierne a la vida privada de los usuarios, el control de los gobiernos en las
poblaciones y la vigilancia de masas. Una parte de la comunidad informática no
considera estos sistemas como fiables y trabajan en otros métodos que no
dependen de elementos exteriores desarrollados y controlados por empresas que
pueden tener intereses divergentes con el interés general. Así, uno de los
grandes desafíos de los próximos años de la informática libre es extraerse de
estos procedimientos que potencialmente pueden perjudicar a los usuarios.
Fuentes:
1 -
https://www.sicara.ai/blog/2019-01-28-how-computer-generate-random-numbers
2 -
https://www.howtogeek.com/183051/htg-explains-how-computers-generate-random-numbers/
3 - https://www.hypr.com/random-number-generator/
4 - https://engineering.mit.edu/engage/ask-an-engineer/can-a-computer-generate-a-truly-random-number/
Comentarios : (0)
Sin comentarios