lunes, 1 de septiembre de 2008

Números aleatorios

En programación e ingeniería se usan mucho los números aleatorios. En el primero para hacer simulaciones, y en el segundo para crear aleatoriedad en juegos, cifrado y otras claves.

Es importante que la aleatoriedad sea lo más parecido a lo ideal, pues la seguridad de muchos sistemas depende de ello. Recientemente, en Debian ha habido un grave problema de seguridad, al ser predecible el generador de números aleatorios del paquete openssl de Debian.

Yo no me fiaría de un programa que genera números aleatorios para la lotería. Y ya tengo dudas considerables cuando le digo al lotero que me de una apuesta automática. ¿Quien me asegura que está bien programado?

La forma que tiene el ordenador de crear números aleatorios es consiguiéndolos, por lo que toma muchas variables para generarlos. A más variables más entropía. Muchas de esas variables pueden ser la fecha, el tiempo de reloj, los datos grabados, el voltaje suministrado a cualquier entrada, la posición del ratón, el uso del teclado (tiempo entre teclas...); de forma que en conjunto esos números aleatorios son casi ideales.

También se usan los números pseudo-aleatorios para generar números con una función matemática a partir de un número 'semilla'. Tiene la ventaja de que el número que va a salir es predecible. Útil para algunas aplicaciones (ej. Carta Blanca y otros juegos de cartas para poder jugar a la misma partida).

Ya hablamos que linux tiene una función random muy buena, siendo el primer sistema operativo que la incluyó en su núcleo.

Un ejemplo de no aleatoriedad en la función rand() de PHP<4.1


No hay comentarios: