Los últimos documentos filtrados por Edward Snowden revelan que la agencia de ciberinteligencia estadounidense, la NSA, en su afán por espiar las comunicaciones cifradas, habría llegado a comprometer incluso el propio kernel de Linux a través de la empresa Intel. Explicaré aquí brevemente cuál es este problema que recorre Internet estos días y de qué manera ha quedado zanjado, de momento.
Qué es un generador de números aleatorios
La criptografía necesita números aleatorios para funcionar: secuencias no predecibles que sirvan para generar claves igualmente no predecibles y otros menesteres. Sin embargo, los ordenadores son más bien lo contrario de la aleatoriedad —como suelo decir, el ordenador hace lo que le mandas—, lo cual es un problema. El kernel de Linux, como cualquier otro sistema operativo, tiene un generador de números aleatorios, que en realidad es un generador pseudoaleatorio (léase lo suficientemente aleatorio, también como el de cualquier otro sistema), que es a lo que se puede aspirar con algo determinista como un ordenador.
Cuál es —supuestamente— el problema
El generador del kernel de Linux utiliza como fuente de aleatoriedad una instrucción de los procesadores Intel llamada RDRAND, que no deja de ser un componente hardware ajeno al kernel de Linux y, por tanto, difícilmente auditable. Al parecer, la NSA podría haber introducido una puerta trasera en dicha fuente de aleatoriedad. Esto quiere decir que las secuencias generadas con esos chips de Intel podrían ser predecibles para la NSA.
De confirmarse el problema, las consecuencias serían bastante gordas. Para empezar, no sería confiable ningún certificado o clave pública generada con hardware Intel desde la inclusión de la instrucción RDRAND.
La respuesta de Torvalds
Las discusiones en las listas de correo de desarrolladores de Linux han sido acaloradas durante los últimos días. Se llegó a abrir una petición en Change.org para que Linus Torvalds, el creador del kernel de Linux, eliminase RDRAND del generador. La respuesta de este ha sido tajante, tal y como nos tiene acostumbrados:
Where do I start a petition to raise the IQ and kernel knowledge of people? Guys, go read drivers/char/random.c. Then, learn about cryptography. Finally, come back here and admit to the world that you were wrong. Short answer: we actually know what we are doing. You don’t. Long answer: we use rdrand as one of many inputs into the random pool, and we use it as a way to improve that random pool. So even if rdrand were to be back-doored by the NSA, our use of rdrand actually improves the quality of the random numbers you get from /dev/random. Really short answer: you’re ignorant.
Resumiendo, RDRAND es solo una fuente más de aleatoriedad utilizada por el generador. Por tanto, aunque tuviera una puerta trasera, no serviría de nada y las secuencias no serían predecibles. Todo ello explicado con el peculiar estilo Torvalds.