La importancia de generar números (verdaderamente) aleatorios

Aleatoriedad, pseudoaleatoriedad, TRNG, PRNG, entropía… estos y más términos –normalmente poco conocidos- son los que se hacen presentes al hablar de sistemas de la información. ¿Qué es lo que significan, cómo se relacionan, y por qué son fundamentales para la seguridad informática? En esta publicación responderemos estas y otras preguntas.

Las computadoras fueron concebidas como mecanismos encargados de seguir instrucciones. Esto es algo muy simple: dadas ciertas indicaciones que ellas conocen, realizarán lo que se les ordene. Aunque suene repetitivo, de aquí se desprende uno de los puntos más importantes para poder comprender lo que sigue, es decir, que una computadora no es más que algo que sigue órdenes que conoce, en un contexto acotado.

Si bien existe basta teoría respecto a inteligencia artificial que busca que las computadoras aprendan de forma automática (como por ejemplo el machine learning), este aprendizaje se llevará a cabo gracias a lo que ellas experimenten, dados unos parámetros preestablecidos. Aquí podemos ver cómo se refuerza el punto anterior, ya que para poder aprender algo nuevo primero deberá identificarlo de forma clara y establecer cómo llevarlo a cabo.

Por otro lado, debemos preguntarnos: ¿qué es la aleatoriedad? Buscando una definición simple y relacionada con este contexto, podemos decir que es la medida de cuán impredecible es algo. Es tan simple como eso. Para poder colaborar con esta medición, hace la aparición en escena la entropía, a saber: la medida de “desorden” que tiene un sistema.

Y… ¿cómo se relaciona todo esto?

Generar un número aleatorio (es decir, un número que no puede ser predicho) es algo muy habitual y necesario en lo que respecta a seguridad informática. Por ejemplo, los cajeros automáticos o puntos de venta que se manejan con tarjetas de crédito inteligentes (también llamadas EMV, son tarjetas de crédito que tienen un chip y buscan ser más seguras que sus antecesoras) generan un número aleatorio para cada transacción, que será utilizado en sus algoritmos de autenticación. También son utilizados en gran cantidad de sistemas criptográficos.

En este punto se hace presente un problema: habíamos visto que una computadora simplemente sigue órdenes que reconoce, manipulando lo que conoce. Entonces, ¿cómo podemos decirle a una computadora que genere algo al azar? No es posible pedirle a algo que sigue órdenes puntuales y específicas en un entorno conocido, que busque algo desconocido, no específico o no puntual.

Buscando la solución al interrogante

Como no se podía garantizar la aleatoriedad pura, se buscó una solución que sea “lo más aleatoria posible”, es decir, con la mayor cantidad de entropía posible, dentro de los medios con los que se contaba. Aquí es donde surgen los generadores de números pseudoaleatorios (o PRNG). Su base era tan simple como una función matemática que, como todas las otras, dada una entrada (llamada seed o semilla) retornaba una única salida, un único resultado posible.

Pero contaba con una particularidad: dada una gran cantidad de resultados con valores de entrada distintos, los resultados serán altamente variados. El asunto estaba más o menos terminado; restaba que al utilizarla se buscase una semilla lo suficientemente impredecible como para hacer la cosa funcionar.

Diversos tipos de semillas se han utilizado en este tipo de algoritmos, con distintas características. Durante un tiempo se usó como semilla a los milisegundos del reloj del CPU desde que el equipo se encendía, por ejemplo (aunque luego se descubrió que este tipo de semillas podía llegar a predecirse), o también las posiciones del mouse. Al elegirlas, siempre se buscaba lo mismo: que fueran lo menos predecibles posibles, para que los resultados fueran lo más aleatorios posibles. Ahora, nunca llegarían a ser verdaderamente aleatorios… sólo serían pseudoaleatorios.

Por otro lado, hay fenómenos que son considerados impredecibles. Por ejemplo, si se censa ruido blanco, se podrá percibir que las variaciones entre muestras son completamente impredecibles. Aquí es donde surgen los TRNG, o generadores de números puramente aleatorios. ¿No sería genial tener una fuente de números con estas características? Sería muy importante para la seguridad de un sistema, porque lo haría más robusto.

La implementación de un TRNG se puede llevar a cabo de diversas formas, desde utilizar hardware externo hasta por ejemplo la inclusión de un módulo de aleatoriedad pura en los microprocesadores, decisión de Intel en sus modelos más nuevos.

Ahora, ¿por qué es importante contar con un buen generador de números aleatorios? Veámoslo con un ejemplo. Recientemente, investigadores de la Universidad de Cambridge han descubierto que gran cantidad de cajeros automáticos y puntos de venta relacionados a tarjetas de crédito inteligentes utilizan números aleatorios altamente predecibles. A veces, llegan a ser simplemente un contador que se va incrementando de acuerdo a las transacciones. Esto puede tener consecuencias nefastas en la seguridad del sistema, ya que un atacante que conozca uno de ellos podrá adivinar los otros con facilidad. Por más que se cuente con un buen mecanismo de autenticación, de nada sirve si al buscar aleatoriedad se utilizan medios predecibles.

Entonces, ¿es importante la entropía en la generación de números aleatorios? La respuesta es clara: sí, lo es. La implementación incorrecta de generadores de este tipo de números, ¿pone en riesgo la seguridad de un sistema? También, claramente. ¿Qué hay que hacer para utilizarlos correctamente, y cómo implementar este tipo de generadores? Estén atentos a nuestro portal, donde próximamente seguiremos hablando de esta temática.

Créditos imagen: ©Jared Cherup/Flickr
 

Autor , ESET

Síguenos