Carrito
El carrito está vacío.
120.-Tu-Secreto

Tu secreto

Disfruto volver a asombrarme con las tecnologías que usamos cotidianamente. Hace apenas un par de días, mientras investigaba la posibilidad de mejorar mi desempeño en una actividad mediante la repetición exhaustiva (o sea, mientras trataba de pasar el nivel 76 del Candy), vi mi pantalla invadida por la publicidad de una aplicación para pagar servicios e impuestos online. Me quedé mirandola por un rato. Decidí momentáneamente sacarme los anteojos del Siglo XXI y me puse a pensar lo increíble que es que yo pueda, desde el sillón de mi casa, en calzones y pantuflas, pagar el gas, la luz y demás garrones con sólo apretar un botón en la palma de mi mano.

Me pregunté entonces dónde estaba la plata, los billetes, el oro, la sal, ALGO que hiciera alusión a un intercambio de dinero, pero no había billetes por ningún lado, nada. Sólo yo en calzones y pantuflas. Bueno, yo y esa gigantesca red de computadoras interconectadas que llamamos Internet.

Ponele que agarrás un par de cables de red y conectás tu compu con la de dos vecinos para jugar los tres juntos al Counter Strike (todo con mucha selección sexual positiva, ¿no? No). Bueno, Internet es como eso pero a gran escala, interconectando computadoras de (casi) todo el mundo, y con ciertos mecanismos, o protocolos, que sirven para identificar unívocamente cada una de esas computadoras y poder transmitir datos entre cualquier par de ellas.

El tema es que a veces las distancias son mayores que a la casa del vecino, pero la necesidad de jugar al Counter es grande (y la de ver porno, ni hablar). Tanto que pusimos cables submarinos que atraviesan el océano y que nos conectan con, por ejemplo, Europa. Así es como puedo comunicarme con mis tíos de España y que me muestren en mega HD la paella que se están mandando, sin que los mejillones tengan que rebotar en un satélite.

Pero hay un problema: como esto es una red, para llegar a la casa de mi tío en España, los paquetes de datos que yo envío tienen que pasar por un montón de otras computadoras en el camino, que llamamos nodos intermedios. Ahora, ¿qué me asegura que no va a haber un tipo en Portugal interceptando los datos que envío y cagándose de risa con la transmisión en la que me estoy morfando una tira de asado con las manos para hacerle competencia a la paella de mis tíos? Y sí, uso este ejemplo porque nadie quiere imaginarse un intercambio con Ingrid, la hermosa chica alemana que conocí en un congreso, PORQUE ES MI INTIMIDAD Y LA VAN A RESPETAR. Pero, como si con el asunto de la privacidad cotidiana no fuese suficiente, la cuestión se vuelve crítica si lo que estoy enviando son los datos de mi tarjeta de crédito o datos para hacer una transferencia bancaria.

Uno pensaría que no pasa una, que es todo re seguro, re lindo y re sólido, pero la verdad es que absolutamente nada me garantiza que no va a haber alguien interceptando la información que envío a través de Internet.

Todo mal entonces, ya fue, volvamos al trueque. El tema es que pagar la factura del celular con vacas ya no es muy práctico, así que vamos a tener que probar otra cosa. ¿Y si mandamos el mensaje de manera tal que sólo el receptor final pueda entenderlo? En otras palabras, ¿qué tal si ciframos el mensaje antes de enviarlo? O sea, en lugar de enviarlo así como está (lo que llamamos texto plano), lo transformamos en algo inentendible, en texto cifrado, algo que sólo pueda entenderse si se vuelve a transformar a texto plano. De esta manera, la seguridad del método reside en que sólo el receptor final pueda desencriptar el mensaje.

Este es el punto de partida de lo que se conoce como criptografía, una disciplina muy poderosa que desde la antigüedad genera herramientas que permiten enviar información de manera segura. Y no me refiero sólo a que no se filtren tus fotitos de WhatsApp en donde procurás que nunca coincidan cara o tatuaje con regiones donde no da el Sol. Hablo de cosas grosas, como enviar indicaciones militares en la Segunda Guerra Mundial. Bueno, y fotos de WA más seguras también, tranquilo. Claro que, como muchos avances científicos y fotos de WA, su desarrollo no siempre fue guiado por los intereses más inocentes y altruistas del mundo.

Los procedimientos para hacer estas transformaciones, o mejor dicho los algoritmos de encriptación, se forman a partir de una clave secreta y consisten en cuentas matemáticas que toman como entrada el mensaje en texto plano y lo transforman en un mensaje encriptado. Por su parte, los algoritmos de desencriptación hacen la tarea inversa, de manera tal que sólo quien posea la clave secreta puede aplicar el algoritmo de forma correcta para recuperar el mensaje.

Esto es todavía más claro visto en una situación concreta, así que resucitemos la red que armamos con esos dos vecinos para jugar al Counter Strike. Bueno, resulta que el pibe del 2do B, Juan, siempre te pareció muy fachero y ahora que se conocen mejor lo querés invitar a salir. Obvio que no te animás a decírselo en la cara, así que vas a conquistarlo con mensajitos por la red (porque todos sabemos que así funcionan las cosas ¿no?); pero no querés que Laura, la otra vecina que también está en la red, se entere de nada. Primero, por privacidad y, segundo, porque está bastante buena y como que las comparaciones son fatales. El tema es que antes de poder entablar cualquiera de esas conversaciones subiditas de tono que tanto te gustan, es necesario que Juan tenga la clave para desencriptar tus mensajes. Pero no se la podés mandar por la red, ¡porque Laura podría verla también! O sea que el intercambio de claves de manera segura es un problema en sí mismo.

Una opción es que vayas a tocarle la puerta y le des la clave en persona, es decir, que la transmitas a través de un canal seguro. En este caso usarían una misma clave secreta para encriptar y desencriptar todos los mensajes, lo que se llama criptografía de clave simétrica. Pero no siempre se cuenta con un canal seguro para intercambiar claves, y la posta es que ni a palos te animás a hablarle en persona. Acá es muy útil usar lo que se llama criptografía de clave pública, en la que cada participante tiene dos claves: una clave pública, que sirve para que los demás encripten mensajes, y una clave privada, para desencriptar esos mensajes. En este caso, si Laura consigue la clave pública no es un problema, ya que sólo vos tenés la clave privada que sirve para descifrar los mensajes que fueron encriptados con tu clave pública. Tu clave pública y tu clave privada están relacionadas matemáticamente y es por esto que una sirve para desencriptar los mensajes que se encriptan con la otra. Sólo queda que Juan también genere un par de claves y te mande su clave pública para que vos puedas mandarle mensajes cifrados a él.

Con esta idea en la cabeza, en el ‘77 tres tipos inventaron el primer método para llevar esto a una implementación práctica. Hoy lo conocemos como RSA (por las iniciales de sus apellidos), y es uno de los sistemas criptográficos más utilizados en el mundo.

Ahora, estamos hablando de algo que pasó hace casi cincuenta años. ¿Cómo puede ser que hasta hoy, con computadoras miles de veces más poderosas, nadie haya podido vulnerar ese sistema?

La seguridad de un sistema de clave pública reside en que, si bien la clave pública y la clave privada están relacionadas matemáticamente, no debe ser posible calcular la clave privada a partir de la clave pública (o, por lo menos, no dentro de un umbral de tiempo lógico). En el caso de RSA, las claves consisten de números muy grandes, números gigantescos. Y, por la relación matemática que propone RSA, la forma de calcular una clave privada a partir de su clave pública es tomando una parte de esta y obteniendo su descomposición en factores primos.

Sí sí, lo mismo que esas tablitas que nos hacían hacer en la escuela: 10 = 2 x 5; 6 = 3 x 2… Suena re fácil, ¿no?

No. Resulta que hasta el momento no existe ningún algoritmo que resuelva la factorización de números tan grandes en un tiempo razonable. Los métodos actuales tardarían cientos de miles de años en encontrar la solución. O sea que de la única persona que realmente deberías cuidarte es de Mirtha.

Lo que sí se puede hacer en tiempo razonable es verificar si una solución es válida. Por ejemplo, si me dicen que la factorización de 123 es 3 x 41, basta con multiplicarlos y ver que el resultado es correcto. Como este, hay bocha de problemas en los que, si bien se puede verificar fácilmente que una solución dada es correcta, lo que no se puede es calcular la solución de manera eficiente. No importa si usás el procesador último modelo de Intel con 700 núcleos, enanos, gaseosa y papas grandes. No alcanza con hacer procesadores más rápidos, porque es un problema algorítmico. La dificultad está en que el tiempo que se tarda en calcular la solución de estos problemas crece de manera gigantesca (exponencial) a medida que se tienen datos de entrada cada vez más grandes.

Y lo más flashero de todo es que, en realidad, no se sabe si es que no existen formas eficientes de resolver estos problemas o si es que todavía a nadie se le ocurrió el algoritmo que los resuelva en un tiempo razonable. De hecho, esta es una de las preguntas abiertas más importantes de las ciencias de la computación, conocida como ‘P vs NP. Tan importante es que, si la resolvés, te dan un premio de un millón de dólares. Y un abrazo. Y acceso a todos los secretos de Estado de la historia del mundo. Y el celular de Megan Fox.

Así que atenti, porque esto de factorizar números no es joda. Si te ponés las pilas, en una de esas te hacés millonario y tirás abajo todos los sistemas de seguridad del planeta. Todo por intentar comerte al vecino. O a Megan Fox. O a los dos.

 

https://www.iscpc.org/cable-data/
Peterson, Davie: Computer Networks: A Systems Approach
http://en.wikipedia.org/wiki/Enigma_machine
Rivest, R.; Shamir, A.; Adleman, L. (February 1978). “A Method for Obtaining Digital Signatures and Public-Key Cryptosystems”.
http://download.intel.com/pressroom/kits/IntelProcessorHistory.pdf
Garey M.R. and Johnson D.S., “Computers and intractability: a guide to the theory of NP- Completeness”.
http://www.claymath.org/millennium-problems




Hay 27 comentarios

Añadir más
  1. Luis

    No sé que prefiero, si un procesador último modelo de Intel con 700 núcleos, enanos, gaseosa y papas grandes o el celular de Megan Fox. (Estoy en horno…) Excelente nota!

  2. Ismael

    Lo del problema P=NP es más que interesante porque muestra el problema que tiene la ciencia hoy en día: si mucha de la gente más inteligente del mundo dedicando su vida a encontrar la solución al problema todavía no la encontró, puede ser que no haya solución y que las clases P y NP no tengan un algoritmo que las relacione? Ya hay varios trabajos que dicen eso, y si bien las consecuencias serían feas, saber que el problema no tiene solución al menos nos haría enfocar recursos en optimizar lo que tenemos en vez de buscar algo nuevo.
    Ah, y al artículo le falta una foto de Ingrid, para fines… em…. didácticos :p

    • Agustín Martinez Suñé

      Hay un consenso casi general en la comunidad de matemáticos y computólogos de que lo más probable es que P sea distinto de NP. Sin embargo no existe ninguna demostración correcta de ninguna de las dos respuestas. Como dato curioso acá recopilaron una lista de papers fallidos que intentaban confirmar alguno de los dos resultados, pero que, obviamente, no eran correctos: http://www.win.tue.nl/~gwoegi/P-versus-NP.htm

      El tema de P vs NP es fascinante, por sus implicancias en problemas concretos, por dar herramientas formales para separar los problemas que llamamos computacionalmente “dificiles” de los “faciles” y además por lo trascendental de su respuesta: si existe o no una diferencia fundamental entre verificar una solución de un problema y producir o encontrar la solución.
      Estaría bueno profundizar el tema en otra nota, pero mientras tanto acá un video GENIAL de pocos minutos con “todo lo que siempre quiso saber sobre P vs NP y no se animó a preguntar”:

    • Francisco

      Adi Shamir, uno de los autores del paper, es la S de RSA :)

      Lo mas copado de eso es que podes determinar que esta procesando una computadora a partir de los ruidos que hace, lo que es loquisimo. Sin embargo, no creo que sea muy practico. Necesitas acceso fisico a la computadora, microfonos, equipos, y silencio. Buena suerte intentando hacer eso en un datacenter.

      • Esteban Siravegna

        No necesitás tanto silencio. Necesitás una ventana: https://en.wikipedia.org/wiki/Laser_microphone

        Finalmente, tampoco necesitás acceso al datacenter: El procesamiento RSA es de extremo a extremo, así que con un par de haces coherentes bien apuntados a la computadora del que está en starbucks pagando el gas, alcanza.
        Obviamente, es un análisis de exploit, no una guía para cagarle la vida a Visa/Mastercard, pero ilustra excepcionalmente bien dos problemas:
        1) Siempre hay un workaround
        2) El mayor problema de la seguridad, es que elegimos como contraseña el cumpleaños del perro/pagamos el gas desde un cyber/SOMOS HUMANOS

    • dx

      Eso no es un problema con RSA (el algoritmo en sí), es un “side channel”, un problema de la implementación. Y es un hermosísimo ejemplo porque es muy literalmente la definición de side channel: una señal que se emite por un canal lateral dando información adicional. El paper en sí menciona formas de mitigarlo, que no son para nada obvias. Lo mas divertido de la criptografía que es que generalmente las bases matemáticas son sólidas, pero hay veinte millones de formas de arruinarlo a la hora de la implementación :D

  3. Mailén

    Los mensajes encriptados más cotidianos que manejamos parecen ser la comunicación entre personas, cara a cara y en vivo. Mientras tanto Alan Turing se regodea en su gloria.

  4. Ana

    Excelente nota!! Clarísima explicación. Se comprende que la clave es más segura al utilizar los enormes números primos que van apareciendo y por qué continúa siendo importante seguir encontrando nuevos.
    Muy buena la ilustración1

  5. Lucho

    Muy buena la nota! Cabe destacar que en esta encriptación se basan los “famosos” (si no lo son, deberían serlo!) certificados de seguridad TLS/SSL, i.e. el candadito que aparece al lado de la URL en la barra de dirección de tu navegador que usan los bancos, facebook, gmail, y bueno, todo debería estar usando TLS/SSL https://encryptallthethings.net/ pero bueno, todo sale plata también, y de los muy preciados dolares :P

      • Lucho

        @francisco Epa! Interesante! Gracias por la data!

        BTW, es cierto lo que dice @mauro, de hecho para cosas privadas mias el cert me lo emito yo mismo y sale como loco.

    • Mauro

      Creo que el artículo hace bien en no meterse con el asunto de las autoridades de certificación porque complicaría más el asunto. Pero vale destacar que, así como pasar la “clave secreta” en el primer ejemplo es riesgoso, también lo es confiar en una clave pública ya que esa misma comunicación es susceptible de un ataque man-in-the-middle. De cualquier forma, si uno pudiera confiar en que quien me entrega la clave pública es quien dice ser (acercándola personalmente o enviándola por un canal seguro ya existente) el certificado emitido por uno mismo es igual de seguro. Obviamente, por una cuestión lógica, no aplica para sitios públicos.

      Muy bueno lo de Let’s Encrypt. Esperemos que tenga éxito… Osea, veamos cómo reaccionan los peces gordos de ese negocio. Hay que tener en cuenta que si un solo big player decide bloquearles la clave les complica la vida.

  6. Laura

    Hubiese estado buena una explicación un poquitín más profunda de la matemática detrás de RSA, la aritmética modular es algo tan bello :) Aún así, excelente nota!

    • Agustín Martinez Suñé

      Concuerdo! Siempre queda el gustito amargo de detalles y explicaciones que quedaron de este lado de la pantalla y no entraron en la nota :S

      De hecho estuve largo rato mirando el paper de RSA para ver desde qué ángulo atacarlo. Pero, si bien no es nada muy complejo ( aguante la aritmética modular <3 ), para poder profundizar y que no quede a mitad de camino había que explicar varias cosas que el lector no exactiense no tiene por qué saber, y la nota ya se hacía mucho más extensa =/

      Espero al menos que algún no exactiense se haya quedado con la intriga de cómo es que juegan realmente los números primos en todo esto y se haya puesto a investigar más :)

  7. Nazareno

    Algo muy interesante es que generalmente para el almacenamiento de contraseñas en bases de datos (como en casi todo sitio web dinámico), no se usan algoritmos de encriptación, sino de ‘hashing’, que no tienen función inversa. Ejemplos de esto son md5, sha1, bcrypt/blowfish.

    La idea de esto es que un administrador maligno, o alguien que obtiene acceso a la base de datos, nunca va a poder ver la contraseña de sus usuarios, sino una version hasheada que no le sirve para nada (Se evita que puedan acceder a otras cuentas de otros sitios, porque es claro que la graaan mayoría de la gente usa la misma contraseña en todos lados).

    Pero… Si no se puede desencriptar… De qué sirve guardarla? La gracia es que los algoritmos de hashing dan siempre el mismo resultado para la misma contraseña. Entonces, al intentar iniciar sesion, se vuelve a aplicar el mismo algoritmo y se comparan los dos hashs. Si son identicos, ‘avanti’. Si no, ‘sin zapatos no entrás’.

    Por eso es tambien que al “recordar contraseña” en un sitio no te recuerda tu contraseña: No hay forma de obtenerla. Lo que se hace es crear una nueva, hashearla, y remplazar el hash por el nuevo.

    Miren que considerados somos los developers, que hacemos todo esto por protegerlos a los usuarios, sin que ni lo sepan ; )

  8. Marcos

    “Texto plano” no es la traducción correcta del original “Plain Text” que significa TEXTO PURO, es decir sin efectos ni procesamientos. No te preocupes, todos los manuales están mal traducidos (“traduttore tradittore”) pero hay que tener cuidado de no propagar los errores. Un abrazo.

    • Valentina

      Yo lo interepreto como texto sin firuletes, formatos, adornos y por eso, plano como el encefalograma de (…inserte aquí el nombre que a Ud. más le de tirria)

      Pero sí, la traducción vendría siendo algo así como “sólo texto” o “texto puro”. Cosas que uno repite sin analizar. :P


Publicar un nuevo comentario