La crisis del cifrado en RdRand de Linux

Durante estos días se han ido sucediendo numerosas y acaloradas discusiones (EN) sobre una posible puerta trasera en el kernel de Linux que permitiría a la NSA saltarse cualquier cifrado saliente del SO libre (EN).

entropia

Esta medida, perteneciente a la cartera de herramientas que el gobierno de EEUU tiene en su haber para controlar las comunicaciones mundiales, ha levantado fuego y sangre (EN) en la red, y por lo que he visto, en muchos casos el miedo (o el desconocimiento) han pecado por señalarlo como el fin del cifrado.

Por eso me ha parecido interesante hacer un repaso de cómo funciona el cifrado en Linux, con la esperanza de calmar los ánimos y entender la noticia como lo que es.

La NSA, como uno de los nombres con más peso mundial de seguridad, podría haber estado influyendo en estándares de cifrado con la intención de crear backdoors para ser explotados por ellos mismos cuando así fuese necesario. Por ello, se apunta a Intel, y precisamente a uno de los chips de aleatoriedad, el llamado Bull Montain (EN), como posible objetivo de la NSA.

El cifrado y la aleatoriedad

Sin meternos en cuestiones muy técnicas, un cifrado no es más que una ofuscación de una información siguiendo un patrón. Para crear ese patrón, se usa la aleatoriedad. El problema radica en que crear algo aleatorio es casi imposible, lo que hace de la aleatoriedad el talón de Aquiles de un cifrado (si sabes qué algoritmo se usó para crear la aleatoriedad de un cifrado, puedes descifrarlo).

La generación de números aleatorios en Linux

Linux, como cualquier otro sistema operativo, tiene varias formas para crear aleatoriedad. Algunas de ellas se basan en fenómenos externos (tiempo entre la pulsación de las teclas, movimiento del ratón, velocidad de procesado en máquina,…). Todos estos métodos confluyen en lo que se llama la piscina de entropía (conocida en el sector como /dev/random/), una suerte de almacén de datos numéricos que casi podríamos considerar aleatorios.

IntelBullMountain

El chip de Intel utiliza un esquema como el que podéis ver en la imagen superior, y que para los no profanos, podríamos comprender como una balanza clásica (o de platos). En la posición inicial, los dos platos están a la misma altura. Suponiendo que dicha balanza es sensible a cualquier estímulo externo, podemos entender que a cualquier cambio de viento, uno de los platos bajará y el otro subirá. Pues el chip de Intel funciona exactamente igual, repitiendo el proceso continuamente, de tal manera que una vez marca 0 y otra 1, pero a priori no se puede conocer el resultado.

La aleatoriedad del chip de Intel es por tanto una más en la piscina de entropía de Linux, lo que me lleva como conclusión a varios factores para desmitificar esta crisis:

  • Suponiendo que la NSA pueda controlar el resultado del chip, tendría una posible variable de todas las variables posibles en la piscina de entropía, lo cual para nada le da el control del cifrado en el SO.
  • Ahora bien, puede ocurrir que algunos programas o procesos que tiran del kernel de Linux usen únicamente la aleatoriedad del chip (llamando a get_random_bytes_arch o una serie de aleatoriedades más cerrada y controlable). En ese caso, sí podría ocurrir que la NSA tuviera la llave para descifrar las comunicaciones en estos servicios.
  • Los problemas de la seguridad por oscurantismo vuelven a salir a la luz. El chip de Intel funciona a la perfección, suponiendo que quienes lo hicieran no crearan una manera de adelantarse al resultado. Pero al tratarse de un chip físico, cerrado y propietario, no se puede auditar desde fuera. Así que nuevamente hay que “fiarse” de lo que alguien ha hecho, y que podría poner en jaque nuestra seguridad.
  • Las palabras de Linux Torvalds (EN) al respecto, que en vez de dar soluciones, critica las críticas de la peor manera posible. Adrián Crespo (ES) hace un análisis al respecto.