Parece que hace unos días atrás explotó una polémica sobre que supuestamente la NSA en complicidad con Intel coló una puerta trasera en el kernel Linux, y Linus Torvalds, como mirando para otro lado, la dejó pasar como si nada. Y como era de esperar, muchos blogs especializados, que dicho sea de paso no tienen ni el más mínimo conocimiento técnico para manejar este tipo de noticias, sacaron a relucir los títulos más amarillistas que pudieron encontrar. y los usuarios sin el más mínimo conocimiento sobre lo que estaba pasando, comenzaron a cacarear a tono.

Primero vamos a comenzar analizando el motivo de la discusión. Todo comienza cuando Eugen Leitl, el desarrollador encargado del código generador de números aleatorios del kernel, había mandado un mail explicando que había dejado de trabajar en el kernel dado que, poco a poco, Linus había decidido apostar por usar una característica específica de los microprocesadores Intel, pero esa característica sólo puede usarse en caso de estar disponible, de lo contrario se sigue utilizando el generador de números aleatorios por software. Esta característica se la conoce como RdRand o Intel Secure Key.
RdRand es una instrucción específica de los microprocesadores Intel, la cual permite obtener números aleatorios cada vez que es llamada. La teoría detrás de este generador de números aleatorios por hardware es que el microprocesador puede crear una mayor entropía a partir de sus múltiples entradas, tanto analógicas como digitales, y debería ser mucho mejor que un generador de números aleatorios por software.
La preocupación vendría por dos lados. Por un lado no hay forma de saber si la secuencia de números obtenida es realmente aleatoria o se trata de una secuencia prefabricada (muy larga). Por el otro, esta el hecho de que ese algoritmo, al estar incrustado en el hardware, no puede ser modificado ni auditado de ninguna forma.
Como muchos expertos explican, uno de los usos más importantes de los generadores de números aleatorios es la encriptación, por lo tanto, en teoría, si se conoce la secuencia de números obtenidos sería posible romper cualquier tipo de clave de encriptación.
Pero que no se pueda modificar RdRand, ¿Significa que estamos condenados a ser vigilados 24/7 por la NSA? No, lo mencioné al principio, el uso de RdRand es optativo, si no lo quieres usar, pues lo desactivas y usas el generador de números aleatorios por software, y problema solucionado.
Lo más curioso es he leído muchos comentarios de usuarios, que si saber de lo que hablan, recomendaban usar Linux Libre por que, supuestamente, no tendría este «problema». Señores, yo tengo bastante curiosidad, y los conocimientos técnicos necesarios para analizar código fuente y determinar si esto es realmente cierto o no. Y déjenme decirles, que no, que esa afirmación es totalmente falsa. Vamos a ver el porqué.
Aquí mismo pueden ver y descargar el código fuente original de Linux:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree
Y aquí tienen el código fuente de Linux Libre:
http://linux-libre.fsfla.org/pub/linux-libre/releases/3.11-gnu/linux-libre-3.11-gnu.tar.xz
Las instrucciones relativas al uso de RdRand las encuentran en los archivos:
arch/x86/kernel/cpu/common.c
arch/x86/kernel/cpu/rdrand.c
La instrucción que inicializa RdRand se encuentra en common.c y su definición en rdrand.c. Y ambos kernels hacen uso de las mismas instrucciones sin modificación alguna.
En otras palabras, da igual que uses Linux Libre, si tienes un microprocesador Ivy Bridge, o superior, lo más probable es que estés usando RdRand.
La pregunta a todo esto es: ¿Pero se puede desactivar esta característica? Sí, y en la misma documentación dice perfectamente como desactivarla:
Documentation/kernel-parameters.txt
Basta con agregar la opción nordrand a la linea de booteo del kernel, y listo, problema solucionado.
En serio señores, no coman mierda, infórmense bien antes de emitir palabra sobre un tema que desconocen. Preocuparse por la privacidad está perfecto, pero tampoco se trata de entrar en pánico sin sentido.
Al fin alguien con las ideas claras! Estaba cansado de ver tanta noticia alarmista! Buen artículo!
En realidad estaba confundido con tanta palabrería, te agradezco la aclaración.
Que buen articulo hermano, gente como vos son es la que necesitamos, gracias.
Tengo una duda… Como soy nuevo en linux y no tengo casi experiencia.¿ Será que esto afecta
A procesadores antiguos como un
Pentium IV? Si alguien me puede aclarar esta inquietud se lo
Agradecería mucho
Por poco me acuesto aburrido dudando de linux, gracias por dejarme las cosas claras XD 😀 😀 😀 😀
Soy tu fan!
Estupendo artículo. Afirma y aporta las fuentes de la documentación. Enhorabuena
Hola, pensaba que el kernel utilizaba su propia rutina de generación de números aleatorios ya que creo que en todo el kernel no hay ninguna llamada a RdRand. Si es así el núcleo por defecto estaria fuera de peligro.
Me parece que se dejaba la opción a los desarrolladores de que sus aplicaciones llamaran a esta función directamente si confiaban en INTEL o bien utilizaran la propia del núcleo, ¿es correcto?. En este caso el problema sería mínimo ya que se circunscribiría a ciertas aplicaciones que utilicen esa función, el núcleo estaría a salvo.
Teniendo en cuenta que ya habia [sospechas de Intel], que por eso habia renunciado un dev, que decian que habia presiones de Intel para usar esa función y todo lo que esta saltando ultimamente da para pensar que hay un backdoor ahi, aunque no estemos seguros.
De todas formas muy bueno lo de desactivarlo, no sabia que se podia voy a hacer eso e instalar haveged, grax!
[sospechas de Intel] http://cryptome.org/2013/07/intel-bed-nsa.htm
Muy buenas.
Yo mencioné en otro blog que usando Linux-Libre ‘seguramente’ no habría código cerrado, y bueno, no lo afirmo al 100%, aunque según la página la FSF Linux-Libre usan solamente código libre.
Y obviamente que no todos podemos saber de todo en concreto, ojalá fuese así, pero por desgracia (para todos nosotros que nos gusta) este mundo de los S.O. es realmente grande.
Un saludo.
En serio, hipersayan_x, no nos hagas tragar mierda.
Si de verdad hubiera una puerta trasera en las opciones por defecto del kernel, como sugiere tu artículo, en particular en:
«Pero que no se pueda modificar RdRand, ¿Significa que estamos condenados a ser vigilados 24/7 por la NSA? No, lo mencioné al principio, el uso de RdRand es optativo, si no lo quieres usar, pues lo desactivas y usas el generador de números aleatorios por software, y problema solucionado.»
Eso sería un problema gravísimo, ya que todos los ordenadores compilados con esas opciones (ie casi todas las distribuciones) ¡podrían ser espiadas!
La razón por la que esto no es así es porque Linux usa esa instrucción como una de las fuentes de entropía, pero no la única, al menos en /dev/random. Eso es la clave y no está en ningún sitio en tu artículo.
Por si alguien quiere lectura y profundizar un poco en /dev/random, este es un buen paseo, conocimiento técnico no falta visto su autor:
https://plus.google.com/117091380454742934025/posts/SDcoemc9V3J
Pongo aquí, lo que leí de la respuesta de linus Torvals, y pego un comentario del mismo sitio:
———————————————————
¿Dónde empiezo una petición para incrementar el CI y conocimiento del kernel de la gente? Tíos, leed drivers/char/random.c. Después, aprended criptografía. Finalmente volved y admitid ante el mundo que os habíais equivocado. Respuesta corta: Sabemos lo que hacemos. Vosotros no. Respuesta larga: usamos rdrand como una de las muchas entradas de entropía y lo usamos para mejorarla. Incluso si hubiera una puerta trasera de la NSA nuestro uso mejora la calidad de los números aleatorios de /dev/random. Respuesta muy corta: Sois unos ignorantes.
———————————-
Como mucha gente que lee meneame no tiene por qué ser experta ni en Linux ni en criptografía, voy a tratar de explicar de manera sencilla de qué va todo esto:
Primero que nada: los números al azar son fundamentales para la transmisión de datos cifrados. Por ejemplo el https que usamos para comunicarnos con el banco depende completamente de ellos.
Verán, las máquinas tienen un problema respecto de los números al azar: no pueden producirlos. El azar no existe para una máquina porque el azar implica algo demasiado complicado para analizarlo en profundidad, y los programas son perfectamente entendibles.
Para producir números al azar, las máquinas necesitan de algo externo que sea lo más impredecible posible. Por ejemplo, la temperatura, los tiempos de acceso al disco, los tiempos entre teclas que presiona el usuario, los movimientos del ratón, etc. Un programa se encarga de hacer una mescolanza de cosas diversas para obtener un número lo más impredecible posible. A eso es a lo que le……
———————————————-
Que creo acertado, ya que es lo que se recomienda hacer cuando encriptas algo, que muevas el ratón, navegues, escribas letras al azar en el terminal etc….
Fuente:
http://e.meneame.net/story/linus-torvalds-responde-peticio-eliminar-rdrand-dev-random
ya me siento mejor jejeje :D, excelente información
Zah, ¿Que yo les hago tragar mierda?, en el artículo deje toda la información necesaria para entender el funcionamiento de RdRand en Linux, incluso pueden rastrearlo usando el código fuente.
Incluso Linus Torvalds dió más pistas sobre donde empezar a rastrear el código, y como bien dice RdRand es sólo una entrada del generador de numeros aleatorios. Y aquí dejo las pruebas:
Primero crea las funciones arch_get_random_* (según la arquitectura del microprocesador):
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/archrandom.h#n61
y las define usando la macro GET_RANDOM, que mediante assembler hace la llamada a la interrupción correspondiente a RdRand:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/x86/include/asm/archrandom.h#n42
Luego esa función la va utilizando a lo largo de todo random.c para meter mas entropia al pool de entropia por software:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n954
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1082
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1116
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1484
Lo que significa que por mas que la NSA o Intel enponponsoñen RdRand esto no va a afectar al generador de numeros aleatorios de Linux. Así que tampoco tendría sentido desactivarlo.
Además a mí no tienen porqué creerme, a quien tienen que referirse siempre es al código fuente, que es el único que dice la verdad 🙂
Muy bien explicado, gracias por el artículo.
Gigante hombre, entradas como esta hacen este portal la mejor fuente de linux en AL te felicito!
Saludos.
Estas opiniones son las unicas que valen la pena. Hechos explicados, demostrables y fin de la historia, como dice el autor, no hay para que entrar en pánico el cual es producto unicamente de la desinformación.
Sl2
Si uso AMD como procesador entonces no hay problema?
Excelente artículo que disipa con fundamentos y claridad la confusión y pánico generado por charlatanes.
Hermano ya estaba harto de tanto amarillismo sin sentido, muchas gracias por esta noticia tan solida y tan completa, te acabas de ganar un seguidor.
Por cierto, tengo una duda. ¿Todos los Kernel Linux ya integran dichas instrucciones o solamente los núcleos mas nuevos? En pocas palabras ¿Si uso la rama 2.6.x o 3.0 dichas características están disponibles? De nuevo muchas gracias.
Según esto:
http://lxr.free-electrons.com/source/arch/x86/kernel/cpu/rdrand.c
RdRand está disponible, por lo menos, desde el kernel >= 2.6.32
Mierda, tienes razon, muchas gracias man. Lo curioso es que es soft libre lol
dices que tienes los conosimientos para leer codigo fuente pero esa funcion no la puedes leer o ver el codigo fuente porque es codigo cerrado haci que el que abla cosas sin sentido eres tu, la verdad esque no confio a ojos cerrados
Mi querido aleexfrost, si prestas un poco de atención y abriste al menos uno de los enlaces de arriba te darás cuenta de que el código fuente esta ahí, mas aun, si te dedicas a leer la parte del rdrand.c verás que dicho archivo en las lineas 2 y 8-10 dice específicamente que tiene licencia GNU. Otra cosa, si lees de nuevo y mas detenidamente podrás observar que la característica RdRand es hecha por el mismo hardware y como explican mas arriba NO ES POSIBLE MODIFICAR NI AUDITAR ESA CARACTERÍSTICA, en pocas palabras el problema no es de código cerrado (software) si no del hardware (el mismo procesador). La solución mas sencilla en tu caso: No uses Intel.