privacidad aleatoriedad

Empezamos fuerte este programa:

¿Y si te dijera que buena parte de las conexiones que haces en tu día a día por Internet (por ejemplo, cuando entras en mi página web) vienen cifradas, y por tanto, podemos considerarlas como seguras y privadas, gracias a que en una oficina de San Francisco hay 100 lámparas de lava colgadas en una pared?

Sí, lamparas de lava. Estos adornos generalmente cilíndricos que albergan en su interior tanto agua como aceite, y que cuentan con unos led de iluminación para que algunos nos podamos quedar horas mirándolas entretenidos.

Pues 100 de ellas están consiguiendo lo que los ordenadores más potentes del mundo no han conseguido aún: Hacer que las conexiones que realizamos en nuestro día a día sean más seguras y privadas.

Hoy vamos a dedicar este podcast a hablar de aleatoriedad, de entropía, de criptografía (tranquilos, criptografía básica, no me voy a poner aquí a hacer cálculos matemáticos complejos), y en especial de por qué estas lámparas de lava son más fiables en cuanto a aleatoriedad que cualquier otro sistema informático que exista en la actualidad.

Así que, hechas las presentaciones…

¡Comencemos!

¿Cómo una conexión digital puede ser privada?

Y lo hacemos empezando por el principio.

¿Alguna vez te has parado a pensar cómo se puede asegurar la privacidad de una comunicación… en un entorno donde absolutamente todo deja huella, como es el digital?

Pues bien, sobre esto no me voy a parar mucho ya que en su momento publiqué por estos lares otro programa del podcast dedicado exclusivamente a este tema. Te lo dejo en el guión que acompaña este programa enlazado.

Pero para que todos partamos de una misma base, quédate con la idea de que esto se consigue gracias a la criptografía, una ciencia matemática que lleva con nosotros varios miles de años, y que por tanto, ha sido utilizada prácticamente desde los inicios de la sociedad.

Gracias a la criptografía, es posible mandar información por un canal no seguro sin miedo a que un tercero pueda obtenerla.

De ahí que generalmente asociemos la criptografía al mundo del espionaje… pero también, a esos juegos que todos hacíamos en el colegio creando vocabularios de signos para comunicarnos en las clases sin que el profesor, o ya puestos, otros compañeros de clase, supieran lo que decíamos en el grupillo.

Por otra parte, pretender en un podcast de alrededor de ¿15 minutos? enseñarte unas nociones mínimas de criptografía informática es pecar de ingenuo.

Para ello, tendríamos que sacar lápiz y papel y explicarte algunos de los fundamentos detrás de las conexiones SSL y TLS. Vamos, un rollazo matemático de mucho cuidado.

Pero obviando la parte puramente académica, lo interesante de la criptografía es que requiere unir dos mundos que a priori son antagónicos:

  • Por un lado, necesitamos un sistema FIABLE, que permita al emisor cifrar el contenido (la información), y al receptor o receptores descifrarlo.
  • Pero por otro lado, necesitamos un sistema que sea lo MENOS PREDECIBLE posible, para que si hay un tercero que intercepta nuestra comunicación (por ejemplo, esa vecina cotilla o un ataque de Man in the middle que nos hagan a nuestra conexión WiFi), este no pueda descifrar el contenido, y por tanto acceder a la información compartida.

Es decir, necesitamos un método que sea a la vez FIABLE para quienes lo conozcan, e IMPREDECIBLE para quienes no lo conozcan. Una suerte de puzzle matemático que sea fácilmente montarlo si tienes la guía, pero que sea imposible de montar sin ese patrón.

En la página de CloudFlare lo explican a la perfección con el siguiente ejemplo:

Imaginemos dos jugadores de póker:

  • Bob siempre apuesta cuando tiene buenas cartas y se retira cuando tiene malas cartas.
  • Alice, por su parte, mezcla su estrategia de apuestas de forma que no hay un patrón discernible: a veces apuesta cuando tiene buenas cartas, a veces se contenta con igualar las apuestas de otros jugadores, y a veces incluso va de farol apostando fuerte cuando tiene malas cartas.

Cuando Alice y Bob entran en el mismo torneo de póker, Alice dura mucho más que Bob, porque este es demasiado predecible.

Los adversarios se dan cuenta muy rápido de cuándo Bob tiene buenas cartas y reaccionan en consecuencia. Aunque no pueden ver sus cartas, pueden discernir aproximadamente qué cartas tiene.

Lo predecible y lo impredecible en entornos digitales

¿Hasta aquí todo bien?

Pues sigamos.

Un ordenador es, en esencia, una calculadora venida a más. Es decir, un conjunto de reglas condicionales que dictaminan qué hacer cuando ocurre algo (el clásico problema lógico de «Si X, entonces Y»).

Los ordenadores, por tanto, funcionan con «lógica».

Son como esa persona cuadriculada que de seguro conoces. Sabes en todo momento qué van a hacer y qué te van a decir.

Y esto es precioso, porque precisamente lo que buscamos en un ordenador es que sea PREDECIBLE. Que si le preguntamos cuánto es uno más dos, nos diga siempre tres.

En caso contrario, en el caso de que un sistema informático no fuese predecible, podríamos encontrarnos con que algunas veces a la pregunta cuánto es uno más dos, nos dijera tres, pero otras dos, o cuatro, o cero, o infinito.

Y ni tú, ni yo, ni nadie quiere eso.

Pues bien.

El que los ordenadores sean fiables y previsibles es buenísimo para casi todo… menos justo para esas escasas situaciones donde queremos que no sean predecibles. Una de ellas, cuando queremos que sean capaces de cifrar un contenido para ocultar la información de su interior a potenciales mirones.

Existen algunas herramientas que intentan generar aleatoriedad, pero el problema es que para ello… tienen que hacerlo con las reglas internas de cualquier computadora. Reglas que, recordemos, son puramente lógicas, y, por tanto, predecibles.

Así, podemos encontrarnos con sistemas informáticos a los que cuando le pedimos un número aleatorio, nos den un número aleatorio… basado en su conjunto de datos y reglas lógicas. Un conjunto y reglas que un tercero podría destripar, y por tanto, ser capaz de predecir qué resultado sería el siguiente, al existir, queramos o no, un patrón por diseño.

Para evitarlo, por tanto, tenemos que alejarnos del mundo de los 1s y 0s, y acercarnos un poco más a otro entorno que sí es profundamente caótico: el de la vida real.

Vamos con otro ejemplo:

En el lenguaje de programación C existen dos fórmulas para generar números aleatorios: rand() y srand().

Ambas funcionan igual (utilizan una compleja fórmula matemática para generar números aleatorios mediante sistemas informáticos), pero srand() te permite incluirle tú la semilla, es decir, el número inicial que usará ese cálculo matemático.

Y aquí viene lo bueno: Para aleatorizar esta semilla, habitualmente se utilizan fórmulas como srand(time(NULL)) o srand(getpid()).

  • La primera invoca a la fórmula de rand() pero usando de semilla el valor de la secuencia de números del reloj interno, es decir, la hora exacta de cuando se invoca.
  • La segunda llama a rand() pero metiéndole de número semilla el número del proceso informático que esté en ese momento en funcionamiento.

En ambos casos estamos utilizando una fórmula informática (por tanto, PREDECIBLE) pero agregándole aleatoriedad del mundo físico. Una aleatoriedad que viene dada o bien por la hora de este mismo instante, o por el número de procesos desde que este programa se ha ejecutado (y que por tanto varía en cada ordenador y en cada momento).

Y en ambos casos estamos ante un sistema de generación de números PSEUDOALEATORIOS, más conocido por sus siglas PRNG, porque si bien es capaz de generar resultados impredecibles… esta impredecibilidad se debe no al propio sistema (que, recalco, es predecible), sino a la semilla que le estamos dando y que viene del mundo real.

Generando números pseudoaleatorios criptográficamente seguros

Demos un salto más en el apasionante mundo de la criptografía hasta los sistemas de generación de números pseudoaleatorios criptográficamente seguros.

¿Que qué demonios es esto?

Pues un CSPRNG… no deja de ser un PRNG (es decir, lo mismo que te acabo de contar hace un momento) pero que además cumple dos elementos clave:

  1. UNO – Tiene que pasar una serie de controles estadísticos que certifiquen que su imprevisibilidad es realmente aleatoria. Por ejemplo, en el caso de la fórmula rand(time(NULL)) de la que antes hablábamos, está claro que, aunque la función da datos imprevisibles la mayor parte del tiempo, al menos una vez al día dará siempre el mismo resultado (si ejecutamos el programa dos días exactamente a la misma hora, minuto y segundo, o si somos capaces de engañar al reloj del ordenador para que piense que siempre es la misma hora), por lo que no podemos considerarla del todo aleatoria.
  2. DOS – Un atacante no debe ser capaz de predecir los resultados, aunque tenga acceso parcial al sistema.

Ahí, justo ahí, es donde entraban las lámparas de lava de las que te hablaba al principio del programa.

Estas lámparas están, como te decía, en una oficina en San Francisco. Concretamente, en las oficinas centrales de CloudFlare, uno de los mayor más importantes de Internet.

Para que te hagas una idea, y aunque ya he hablado muchas veces sobre CloudFlare en mi página, buena parte de las webs y servicios que utilizas pasan, en algún momento, bajo alguno de los servicios o servidores de CloudFlare, ya sea mediante su CDN, sus proxis inversos, o sus sistemas anti-DDoS.

El día que, por lo que sea, se caiga CloudFlare, la mayoría de los servicios que tanto tú como yo usamos, cuelgan el cartel de error 404.

Hace unos años, de hecho, ocurrió, y durante unas horas servicios como Twitter, Facebook, GMail, Youtube, y en definitiva, buena parte del Internet Occidental, estuvo durante horas caído.

Es más, CloudFlare ofrecía conexiones SSL/TLS gratuitas… antes de que este tipo de conexiones fuesen gratuitas. De hecho, todas mis webs hace ya muchos años que utilizan la infraestructura de CloudFlare para ser más rápidas, y también ofrecerte los estándares de seguridad más avanzados.

Y entre esos estándares, está su cifrado de punto a punto. Un cifrado que, como te decía, depende de esas 100 lámparas colocadas en una pared en una oficina en San Francisco.

lamparas lava cloudflare

Las lámparas de lava como sistema de impredecibilidad

Echas las presentaciones, ya sabrás por dónde van los tiros.

El SSL de CloudFlare es, como la mayoría de sistemas SSL, un protocolo que utiliza CSPRNG para ofrecer ese plus de privacidad y seguridad en las comunicaciones que hacen sus usuarios.

Y para ello, en vez de utilizar algo tan simple como la hora o el número de proceso en ejecución en el servidor de turno (sistemas de impredecibilidad que ya hemos visto que no son robustos) utilizan algo tan profundamente físico como es el fenómeno de la polaridad intermolecular.

Dicho en cristiano: el fundamento físico detrás del por qué dentro de estas lámparas el aceite está continuamente en movimiento, generando continuamente formas que llegan a ser hasta hipnóticas.

Frente a esa pared y esas 100 lámparas, CloudFlare tiene puesta una cámara que está periódicamente sacando fotos. Fotos que se envían al instante a su servidor, y que se transforman en 1s y 0s para servir de número semilla a su sistema de pseudoaleatoriedad.

Como 100 lámparas de lava en cada instante van a crear un número siempre aleatorio e impredecible, tenemos la base necesaria para ofrecer un sistema CSPRNG a los protocolos SSL/TLS que usan las páginas alojadas en CloudFlare.

Y por si te lo preguntas, es posible visitar la pared porque está en la mismísima entrada de su headquarter. De hecho, cada día pasan decenas de personas por delante de la cámara, lo que en sí añade también aleatoriedad al resultado.

Así lo explicaban los ingenieros de la propia compañía:

Como la pared de la lámpara de lava está en el concurrido vestíbulo de la sede central de Cloudflare, esto pasa todo el tiempo. La gente va y viene por el vestíbulo, pasando por delante o parándose a hablar delante de las lámparas. Estas obstrucciones se convierten en parte de la aleatoriedad que capta la cámara, por lo que las personas que bloquean parcialmente la visión de la cámara de las lámparas de lava ayudan en realidad a generar entropía.

Ingenieros de Cloudflare en la página de la compañía (ES)

Para colmo, no es el único método que utilizan en CloudFlare para generar semillas impredecibles:

  • En las oficinas de Londres consiguen esa aleatoriedad tomando fotos de un sistema de doble péndulo montado (es decir, un péndulo conectado a otro péndulo, cuyos movimientos son matemáticamente impredecibles).
  • Y en la oficina de Singapur se mide la desintegración radiactiva de una bolita de uranio (y sí, tranquilos, que hablamos de una cantidad lo suficientemente pequeña como para ser inofensiva a la salud :P).

¡Pura creatividad al poder!

Y ahora, turno para ti:

  • ¿Se te ocurre alguna otra manera de generar números que sean realmente impredecibles y aleatorios?
  • ¿Conocías la existencia de estos sistemas?
  • O ya puestos, ¿eras consciente de la importancia que tiene la entropía en la seguridad y privacidad de tus comunicaciones digitales?

Te leo en comentarios.

Sobre el videopodcast enCLAVE DIGITAL

enCLAVE DIGITAL es el videopodcast de Pablo F. Iglesias, consultor de presencia digital y reputación online.

Si este contenido te sirve para estar bien informado sobre la actualidad en materia de negocios digitales, reputación y tecnología, te agradecería que le dieras a suscribirte en mi canal de Youtube o en la plataforma de podcasting desde donde me escuchas, le des a Me Gusta, me dejes un comentario o reseña y lo compartas con aquellos a los que les pueda interesar.

¡Seguimos!

Si utilizas otra plataforma de podcasting, busca «enCLAVE DIGITAL« en la app para localizarlo, o visita la página del videopodcast, donde ofrezco enlaces directos a las principales plataformas actuales: