10 Jun 2020

Cuando las matemáticas son ilegales

watch_later Tiempo de lectura ~6 minutos


La encriptación no es más que cuentas matemáticas. Cuentas con propiedades particulares, inventadas o descubiertas, según quien pregunte. Son cuentas que permiten, entre otras cosas, mantener secretos y verificar datos, funcionan siempre y siempre igual, y acompañaron la ceración y el crecimiento de internet.

Hay instituciones que luchan contra la encriptación, con la idea de “hay criminales que usan este sistema para llevar a cabo sus rufianerías”. Es cierto, la encriptación, el anonimato, la privacidad, permiten sistemas irregulables, las criptomonedas, la deep web, o la mensajería instantánea. Prácticamente, nadie busca prohibir la encriptación en sí; la lógica guvernamental prefiere que haya encriptación que esté por debajo de la legislación política, para poder romperla cuando sea necesario, con una orden judicial, o tan reiterado como se sondea la opinión pública.

Usamos mensajería instantánea todos los días, sino todo el día: Whatsapp, Discord, Zoom. ¿Qué tan privados son? Zoom (a Mayo 2020) es oficialmente “incapaz de brindar E2EE.” ¿Qué es el E2EE? ¿Es una buena idea crear backdoors?

XOR & OTP

Comencemos con lo básico. La operación or exclusivo (xor) es una operación booleana con la siguiente tabla de valor:

xor | 0 1
----+-----
 0  | 0 1
 1  | 1 0

Es la operación más usada en criptografía. Hay un chiste que dice: “lo único que hacen los criptógrafos es operaciones xor”. Y sorprendería qué tanto de eso es cierto; la gran mayoría de los protocolos de encriptación y hasheo que usamos (y hasta ignoramos usar), se reducen a no más que cadenas de xor. ¿Por qué se usa tanto?

Aleatoriedad: cada bit tiene 50% de probabilidad de resultar en cualquier otro valor. Es decir, si te doy un 1, hay 50% probabilidad de que el resultado sea 1 o 0, y viceversa. Entonces, si usamos cualquier hilo de bits y lo operamos con un número perceptiblemente aleatorio (pseudo-random), producimos un resultado también perceptblemente aleatorio.

Invertibilidad: veamos un ejemplo, si opero dos hilos m = 11011000 y k = 10100111, me dá c = 01111111; y si opero este resultado por cualquiera de los anteriores, me dá el otro. Es decir, m xor k = c; c xor k = m.

Y así llegamos a uno de los protocolos de encriptación más básico: One Time Pad (OTP). En este protocolo, si queremos encriptar un mensaje (m), generamos una clave (k) del mismo largo que el mensaje, y los operamos con xor produciendo un ciphertext ( c ). En este caso, si la clave es más chica, se extiende: k=abc; k|ex10=abcabcabca. A continuación, una calculadora para probarlo.

Por las propiedades del xor, este protocolo de encriptado es muy seguro, si se usa bien, pero es muy difícil de usar bien. Por un lado, las claves han de ser del mismo tamaño que los mensajes. Por otro lado, hay que generar una clave nueva para cada mensaje (de ahí el nombre). Nosotros más adelante, cuando expliquemos el manejo de claves, vamos a usar OTP exactamente de la manera más insegura. Lo vamos a hacer porque es muy fácil de usar, y sirve para nuestros ejemplos. Imaginen que en el lugar de OTP, un servidor real usa un protocolo seguro como AES.

Clave simétrica

OTP es un protocolo de clave simétrica. Es decir, que la misma clave se usa para encriptar y desencriptar. Ahora, asumamos que tenemos una aplicación de mensajería, como puede ser WhatsApp o MSN, hsoteada en un servidor. Alice y Bob son amigos que quieren charlar, y van a usar nuestra app. Sabemos que el internet es un lugar relativamente inseguro, por lo que nuestra app encripta los mensajes antes de enviarlos.

Una manera fácil de encriptar esos datos es con claves simétricas entre cada usuario y el servidor. En el momento de conexión inicial, Alice envía un número pseudo-random al servidor y así se establece una clave simétrica KAS (Key-Alice-Server), en un caso real, esta clave viajaría encriptada con una clave asimétrica. Ahora, cada vez que Alice quiera enviar un mensaje a Bob:

  1. Alice encripta su mensaje con su clave KAS.
  2. El ciphertext viaja por internet al servidor.
  3. El servidor desencripta el mensaje con la clave KAS.
  4. El servidor encripta el mensaje con la clave KBS.
  5. El nuevo cipertext viaja por internet a Bob.
  6. Bob desencripta el mensaje con la clave KBS.

Aquí hay un ejemplo de este sistema, con un pequeño video demonstrativo. El caso empieza desde zero, asique deberán comenzar con el proceso de conexión inicial (crear y compartir KAS y KBS), luego pueden proceder a enviarse mensajes encriptados.

Ejemplo video:

Ejemplo para probar:

Espero que hayan visto el problema de seguridad que tiene este sistema. El servidor lee todos nuestros los mensajes! Zero privacidad. Debemos confiar en un servidor y en la corporación que a) no lean nuestros mensajes b) no les vendan nuestros mensajes a un estado u otra corporación c) no los hackeen. Con un log de todos nuestros mensajes estamos generando un gran single point of failure, punto único que fracaso, y con grandes corporaciones con información valiosa, la pregunta no es “si” serán hackeados o vendidos al gobvierno, es “cuando” y “cuántas veces”.

Diffie–Hellman

Por esto se crea el End-to-end-encription (E2EE) la encriptación de punta a punta: sólo Alice y Bob pueden leer sus mensajes, y el servidor (o cualquier intermediario) sólo puede ver un ciphertext indecifrable. Pero, si el servidor por definición lee todo lo que le enviamos, ¿cómo podemos enviarle algo a Bob, que el servidor mismo no pueda desencriptar?

Whitfield Diffie y Martin Hellman crearon uno de los primeros y más usados protocolos para compartir claves simétricas llamado Diffie-Hellman. Asumamos que Alice y Bob se comunican a traves de un medio inseguro (servidor, internet) y quieren compartir un secreto. Para esto, convienen unos números públicos: ( p ) = número primo muy grande, (G) = generador del cíclo Zp*. No explicaremos qué es ni cómo se obtiene G porque tomaría todo otro artículo, basta con decir que G < p.

  1. Alice escoje un (a) < p que mantendrá privado.
    • Bob hace lo mismo: (b) < p.
  2. Alice calcula (A) = G^a mod p.
    • Bob calcula (B) = G^b mod p.
    • La parte pública de sus claves.
  3. Alice envía su número público (A) a Bob
    • Bob hace lo mismo.
  4. Alice usa el número de Bob para calcular (K) = B^a (mod p)
    • Bob calcula (K) = A^b (mod p).

¿Qué sucedió? Alice y Bob comparten ahora una clave K = B^a = A^b:

K = (G^a)^b = (G^b)^a = G^(ab) (mod p)

Y el servidor sólo vió A y B, tal que podría calcular algo como K' = B*A ≠ K:

B*A = (G^a) * (G^b) = G^(a+b) ≠ G^(ab) (mod p)

Y no ha forma eficiente de calcular K con sólo A y B. Es más, porque p es primo y por las propiedades de G, calcular K es un problema NP llamado problema del logarítmo discreto.

Una vez que crearon su secreto compartido K, ahora cada usuario es responsable de encriptar y desencriptar los mensajes antes de enviarlos al servidor. Aquí hay una implementación de exactamente esto, para experimentar. Cualquier duda, repasen los pasos que fuimos describiendo arriba, o miren este un pequeño video demonstrativo

Ejemplo video:

Ejemplo para probar:

En la vida real, se suele crear una clave simétrica kAB cada pocos minutos, o incluso para cada mensaje! Aún así, esto no esconde la metadata, el emisor, el receptor, la hora, o el tamaño del mensaje. Hay maneras aún más complejas de generar esto, que sobrepasan al concepto de E2EE.

Backdoor

Ahora bien, un backdoor es una manera de desencriptar un ciphertext sin necesidad de la clave. Las backdoors a veces son encontradas por hackers, y a veces son creadas junto con el diseño original.

Hay muchas maneras de crear backdoors. Aquí un ejemplo para el protocolo Diffie-Hellman. Una idea es escoger un p y G con propiedades “especiales” llamados números nothing-up-my-sleeve (nada bajo mi manga). Un caso así famoso se dió en 1975, cuando la NSA creó el estándar DES, junto con una serie de números generadores arbitrarios, diciendo “ningún otro generador cumple con el estándar” sin dar explicaciones. Resultó ser que esos números eran suceptibles a un exploit que ellos conocían.

La seguridad de un sistema es tan fuerte como su eslabón más débil. Esta máxima de la seguridad informática es tan cierta como dura. Realmente podemos tener una casa con contraseña alfanumérica, lector de iris y huellas digitales, que si dejamos abierta la puerta de atrás, los ladrones entran igual. Crear una puerta trasera para un sistema, por negligencia o en nombre de alguna justicia arbitraria, crea a su vez este eslabón débil, explotable.

Conclusión

En nombre de nuestra seguridad se nos reclama, de tanto en tanto, entregar nuestra privacidad y libertad. Y en nombre de la confianza, en una corporación o un estado, de que ellos actuarán en nuestro beneficio, las cedemos. Las matemáticas parecen una tecnología realmente democrática, una justicia ciega, que no conoce lealtades ni intereses; nos habilita su uso a todos por igual. Habiendo creado un arma de astronómica independencia, nos vemos forzados a cederla por miedo e ignorancia.


Un par de recursos y recomendaciones:

Un libro de los más ricos que existen sobre criptografía, aún está siendo completado pero se pueden ver versiones Beta: A Graduate Course in Applied Cryptography, by Dan Boneh and Victor Shoup

Un libro con una muy buena introducción a todos los temas más matemáticos, empezando desde lo más básico de módulo y divisibilidad, y acaba construyendo los protocolos de SHA256, y temas más complejos A computational introduction to Number Theory and Algebra, by Victor Shoup

Internet está lleno de cursos online para aprender más sobre este tema, porque después de todo, la criptografía nació y creció con internet. Un curso muy bueno, diseñado y dirigido por Dan Boneh es este curso online. Si quieren meterse de lleno en este mundo, este es un buen lugar para empezar.

Share on: