Una de las partes más importantes dentro de un sistema criptográfico es el generador de números aleatorios. Hay que generar claves y números únicos de un sólo uso, entre otras cosas, y es muy importante que sean verdaderamente aleatorios.
¿Por qué es tan importante? No hace falta comerse mucho la cabeza para darse cuenta. Supongamos que yo genero mi clave de cifrado a partir de una cadena de 2048 bits aleatorios. Si alguien quiere adivinar la clave, tendría que probar todas las posibles combinaciones, 22048 (un número de 617 cifras). Demasiadas como para probarlas todas en un tiempo razonable.
Ahora bien, si un atacante sabe que en realidad el generador sigue un patrón determinado o que sólo saca números en un rango reducido (por ejemplo, de 0 a 2100) tendría que hacer muchos menos intentos, de tal forma que el ataque por fuerza bruta tardaría mucho menos y podría ser efectivo.
Crear un buen generador de números aleatorios (esto es, impredecibles y todos con la misma probablidad de salir) es difícil, sobre todo si estamos hablando de hacerlo en un ordenador, que es un dispositivo determinista y predecible, al menos para este asunto. También es muy difícil detectar fallos en ellos, y por desgracia esos fallos pueden tener consecuencias graves.
Los generadores de números aleatorios son fuentes de vulnerabilidades, y también de sospechas de puertas traseras
Por ejemplo, hace unos años se descubrió un problema grave de seguridad en la versión de OpenSSL que distribuía Debian. ¿La razón? Un mal uso del generador de números aleatorios, que reducía su rango y hacía que un ataque por fuerza bruta pudiese tener éxito en pocos tiempos. Algo parecido pasó hace todavía más tiempo con Netscape. Incluso se llegó a pensar que la NSA había introducido una puerta trasera en Linux a través del generador de números aleatorios de Intel.
La búsqueda de buenos generadores aleatorios se centra mucho en los fenómenos del mundo físico, que sí son prácticamente impredecibles. De hecho, hace unos días se ha publicado una investigación sobre cómo usar sensores fotográficos para crear un buen generador en móviles.
Las fotos no valen: viajando al mundo cuántico
La primera idea que nos viene a la cabeza si hablamos de generar números aleatorios con sensores fotográficos es bien sencilla: una foto. Cogemos los datos de imagen de la cámara y eso debería ser bastante aleatorio, al menos para alguien que no sepa dónde estamos y qué ve nuestra cámara.
Por supuesto, eso ya se ha intentado, y los resultados no fueron buenos: los números no eran suficientemente aleatorios. Hubo incluso experimentos con lámparas de lava, cuyo problema era que los números no se generaban con suficiente rapidez. Se necesita algo mejor, más aleatorio, y unos científicos lo han encontrado en el mundo cuántico.
La física cuántica define un comportamiento muy interesante de la luz. Cuando encendemos una lámpara (o, como en este experimento, un diodo LED), emite fotones, que por así decirlo son pequeños paquetes (o _cuantos_) de luz. Si la luz es constante, uno pensaría que siempre se emiten los mismos fotones por segundo, ¿verdad?
En realidad no es así. Hay un fenómeno cuántico llamado _shot noise_ o ruido de disparo: debido a la naturaleza del foco de luz, el número de fotones emitidos por segundo es variable, fluctúa alrededor de un valor central (o media). Esas fluctuaciones son aleatorias - el número de fotones emitidos por segundo sigue una distribución de Poisson.
¿Cómo aprovechar esas fluctuaciones? Un equipo de la Universidad de Ginebra ha hecho las pruebas y resulta que el sensor fotográfico que tú, lector, tienes ahora a mano, puede servir para esa tarea. Los sensores de las cámaras de los móviles (más concretamente, la de un Nokia N9) son suficientemente sensibles como para detectar esas fluctuaciones en el número de fotones emitidos.
El proceso para generar los números aleatorios a partir de esas fluctuaciones es algo complejo, así que simplificaremos un poco. Primero, se ilumina el sensor de la cámara con un diodo LED que emita, de media, una cantidad conocida de fotones a la que llamaremos μ. Después, se leen los datos del sensor de la cámara: cada píxel habrá leído una cantidad algo distinta a μ. Esas diferencias son los números aleatorios generados.
El problema es que esos números aleatorios no son del todo buenos. Además del ruido cuántico hay que contar con el ruido de los propios componentes electrónicos, que no es aleatorio y un atacante podría conocer. Por eso, los números aleatorios se combinan, reduciendo su número (por ejemplo, se pasa de 2000 números a 500) y aumentando su aleatoriedad o entropía. Además, así se eliminan los problemas que puedan causar píxeles muertos o las relaciones entre píxeles cercanos que pudiesen afectar a la aleatoriedad.
Una vez hecho ese procesado, los números aleatorios están listos para ser usados en cualquier aplicación criptográfica.
Lo mejor de toda esta investigación es la demostración de que se puede crear un generador de alta calidad, rápido (se podrían conseguir tasas de entre 300 Mbps y 3 Gbps según el sensor) con componentes baratos y fáciles de combinar en un chip para móviles. Y la consecuencia para todos los usuarios es sencilla: más seguridad en nuestras comunicaciones móviles, algo que con las recientes revelaciones sobre la NSA no está de más.
Vía | Un informático en el lado del mal Más información | Quantum random number generation on a mobile phone |
Ver todos los comentarios en https://www.genbeta.com
VER 5 Comentarios