texto:   A-   A+
eliax

Cómo crear un generador aleatorio desde memoria RAM
eliax id: 3860 josé elías en sept 11, 2007 a las 11:04 AM ( 11:04 horas)
Hoy los envío a un trabajo que explica una manera bastante genial para generar verdaderos números aleatorios (en vez de semi-aleatorios como se hace casi siempre hoy día) utilizando nada mas que la memoria RAM de tu PC.

Antes de continuar, para los que no son técnicos, el poder generar números aleatorios (o como se les dicen también "números al azar" o "números a la suerte") es algo importantísimo en el campo de la ciencia de la computación, debido a que muchos algoritmos dependen de un buen generador de números aleatorios. Por ejemplo, números aleatorios son utilizados muchas veces en programas que cifran datos antes de enviarlos por Internet, por lo que mientras mas aleatorios son los valores, menores las posibilidades de que puedan ser deducidos al otro lado de la comunicación.

Regresando al tema, la idea de este nuevo sistema se basa en el hecho de que los "bits" que componen los módulos de memoria RAM en el momento de uno encender por primera vez una máquina están en uno de tres posibles estados, dependiendo esto mucho de las circunstancias bajo las cuáles ese módulo de memoria RAM fue fabricado. Los tres estados son:

1. El estado inicial es casi siempre 0.
2. El estado inicial es casi siempre 1.
3. El estado inicial es 0 o 1, con probabilidad casi igual de que sea uno o el otro.

Los bits que nos interesan son los del tercer caso, pues si podemos determinar cuáles por lo general están en un estado indeterminado, entonces podemos utilizar el valor de todos esos bits como una cadena de bits totalmente aleatorios.

Para determinar cuáles bits (y hay miles de millones de bits en una memoria de 1GB, como ejemplo) son aleatorios, lo único que hay que hacer es apagar y prender la PC muchísimas veces, y en cada encendido anotar el valor de cada bit. Después que hagamos esto muchas veces las leyes de estadísticas entrarán en efecto y nos dirán fácilmente cuáles bits tienden a ser 0, cuales tienden a ser 1, y cuáles son indeterminables. Y con ese dato obtenemos los bits que necesitamos y de ahí en adelante podemos tener cadenas de millones de bits que son aleatorios. ¿Genial, no?

Fuente de la técnica

autor: josé elías

Comentarios

  • ¿Que usos practicos se le puede dar a este sistema? ¿Encender y apagar mi maquina algunas 100 veces antes de enviar un mensaje cifrado? Uhhmmm.... no es buena idea...

    • Esa no es la idea. La idea es que por ejemplo esto se puede calcular en la fábrica antes de enviarte la máquina. La otra posibilidad es que un software en tu máquina tome nota cada vez que la prendas y la apagues todos los días, para así mientras mas pasa el tiempo mas aleatorios son los números generados.

  • Hola Elias,

    Conoces algún proyecto de este tipo (nros aleatorios) que tengan como "seed" o fuente de generación a INTERNET?

    saludos,
    Diego

  • [c&p] Trabajo que explica una manera bastante genial para generar verdaderos números aleatorios (en vez de semi-aleatorios como se hace casi siempre hoy día) utilizando nada mas que la memoria RAM de tu PC. la idea de este nuevo sistema se basa en el hecho de que los "bits" que componen los módulos de memoria RAM en el momento de uno encender por primera vez una máquina están en uno de tres posibles estados, dependiendo esto mucho de las circunstancias bajo las cuáles ese módulo de memoria RAM fue fabricado.

  • Cuando yo estaba en la uni. hice un programa que necesitaba generar números aleatorios y lo que hice fue convinar algo como esto con un generador de números pseudo-aleatorios. El realidad lo que yo hacia era solicitar un bloque de memoria del "heap" al SO y luego ir tomando enteros (integers) de este bloque de memoria y entrarlo como "seed" al generador pseudo-aleatorios.
    En una prueba con 2 millones de numeros generados de 32 bits tenía una tendencia de repetición de solo un 0.001%. La prueba con cada bloque de 2 millones de numeros tomaba unos 10 minutos en un P-233Mhz y win98. La prueba para determinar la tendencia de repetición fueron 1000 bloques.

    El generador pseudo-aleatorio que yo usé era un polinomio de CRC y todo el que entiende de generadores pseudo-aleatorios sabe que estos no son muy buenos generadores. Hacia recorer el polinomio 10 veces y el resultado era en número pseuodo-aletorio. Creo que si hubiera usado un generador apartir de calculos de números de punto flotantes hubiera dado un mejor resultado, aunque el que dió fue muy bueno. Otro metodo bueno hubiese sido usar un "hash", algo como MD5, pero para solo 32 bits.

    El profesor de la materia le gustó mucho la técnica, por el hecho de que el "seed" era totalmente aleatorio, nada de "seeds" espaciados equidistantemente como con técnicas de uso del tiempo como "seed". Yo creo que esto se puede usar bien en sistemas con microcontrolodores, que son sistemas con recursos bien limitados.

    • Genial!!! :)

      Otra técnica con microcontroladores es hacer uso de sus sensores como generadores. Por ejemplo, medidores de temperaturas, sensores de movimiento, medidores de voltaje, etc, que por lo general están constantemente en estados indeterminados y variables.

Añadir Comentario

tu nombre
tu email
(opcional)
web personal
(opcional)
en respuesta a...
comentario de caracteres máximo
7 + 3 = requerido (control anti-SPAM)
¿De qué color es el cielo?: requerido (control anti-SPAM)
 

"WAO!....

Me acuerda a eso de cuando dices que el cuerpo humano no es mas que una maquina biologica, y el leer esto de "disfrazar" celulas madres para que el sistema inmunologico no "ataque" es como hablar de codificar una software para que haga o deje de hacer tal cosa en un celular. Esto podria muy bien aparentar ser una escena de sci-fi, pero NO, es la vida real, y es tangible.

Definitivamente es increible como van las cosas, me imagino en unos años! :)
"

por "Randy Rubirosa" en oct 12, 2014


en camino a la singularidad...

©2005-2024 josé c. elías
todos los derechos reservados
como compartir los artículos de eliax