Llegamos a ustedes gracias a:



Reportajes y análisis

Una guía rápida de la criptografía moderna

[13/12/2021] La criptografía se hace cada vez más importante en nuestras vidas. Cada vez que inicia sesión en una aplicación o envía un correo electrónico, está confiando en una ingeniosa infraestructura criptográfica que desciende en gran parte de los avances en la década de los años setenta.

[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]

Más allá de los desarrolladores de software especializados, más allá de los codificadores, incluso el público en general que no se dedica a la programación puede beneficiarse al comprender cómo funciona la criptografía, especialmente en una era de criptodivisas e inversión en criptomonedas.

Todos usamos la criptografía en nuestra vida diaria, lo sepamos o no.

¿Qué es la criptografía?

La criptografía es la práctica de proteger las comunicaciones. Esto se logra utilizando una variedad de técnicas que se reducen a implementar protocolos que eviten que las partes no deseadas vean o alteren los datos.

La disciplina de la criptografía se puede describir con cuatro aspectos:

  1. Confidencialidad: Los datos no se exponen a terceros no deseados.
  2. Integridad: Los datos no se manipulan ni destruyen.
  3. Autenticación: Las partes pueden verificar de manera confiable la identidad de las demás.
  4. No repudio: La comunicación puede ser confirmada, y no negada más tarde por los participantes.

Mensajes codificados simétricos

La criptografía, antes de la llegada de las computadoras, se basaba en el uso de mensajes codificados. Un mensaje codificado es mapear un texto legible y transformarlo a letras sin sentido y viceversa. Por ejemplo, un cifrado simple sería agregar cuatro a cada letra del texto (por lo que A se convierte en E). El decodificado implicaría simplemente restar cuatro de cada letra. Estos procesos se conocen como cifrado y descifrado.

Cambiar cuatro lugares en el alfabeto es muy obvio e inseguro. Más seguro es crear un mapeo complejo que requiera una clave para la traducción. Esta clave debe distribuirse a todas las partes participantes. Esta necesidad implica todo tipo de debilidades logísticas.

Un ejemplo famoso de cifrado simétrico es la máquina Enigma empleada durante la Segunda Guerra Mundial.

Funciones unidireccionales

Con la llegada de las computadoras y los consiguientes avances en matemáticas, las posibilidades de cifrado se hicieron más complejas. Surgieron muchas técnicas nuevas, pero una de las más fundamentales es lo que se conoce como función unidireccional (que incluye hashes unidireccionales para generar resultados de longitud fija). Las funciones unidireccionales se consideran primitivas. Como sugiere el nombre, una función unidireccional funciona en una sola dirección.

Un uso común para las funciones de un solo sentido, y una buena manera de entenderlos, es el hashing de contraseñas cuando se conservan en la base de datos (por ejemplo, en Java y en JavaScript). La contraseña se ha tomado de texto sin formato ("fluffy123) y el algoritmo de un solo sentido la convierte en una cadena de aspecto aleatorio ("XFcbe2d3bh0sa). Incluso si un atacante obtiene acceso a la base de datos, las contraseñas son seguras. No hay un método conocido (utilizando sistemas informáticos actuales) para invertir de manera eficiente el proceso.

Es un hecho curioso observar que, aunque los atacantes tienen acceso completo a la lógica del algoritmo (por ejemplo, aquí está la fuente de BCrypt), generalmente no pueden revertir la función. Dicho esto, el hash unidireccional no es perfecto y se han introducido una variedad de técnicas para descifrarlos (como las tablas Rainbow).

Las bibliotecas de hashes modernas incluyen la capacidad de aumentar la dificultad del hash (lo que permite que la fuerza del hash aumente a medida que aumenta la potencia de cálculo) y de introducir "sal en el algoritmo (lo que garantiza que los hashes de entradas idénticas sean, no obstante, únicos). Mientras la sal se mantenga en secreto, las contraseñas con hash son básicamente imposibles de descifrar.

Para una comprensión sucinta de la teoría detrás del hash unidireccional, eche un vistazo a esta respuesta de Stack Overflow.

Funciones pseudoaleatorias

Junto con las funciones unidireccionales, los algoritmos para generar números similares al azar se consideran "primitivas; es decir, bloques de construcción fundamentales necesarios para asegurar las comunicaciones. ¿A qué se debe eso? En pocas palabras, cualquier sistema de comunicación secreto depende de valores conocidos por la parte aseguradora y desconocidos por el exterior. Eso depende de generar números aleatorios. (A menudo, la información proporcionada por el usuario también se incorpora, pero los humanos son tristemente poco fiables al proporcionar dicha información).

La mayoría de los seedings aleatorios (como extraer el número del reloj del sistema) son solo "algo aleatorios. Si un hacker sabe cómo se generan los números, podría idear ataques de números aleatorios. El ingenio de los hackers parece seguir el ritmo de los codificadores de sombrero blanco. De hecho, la historia de la criptografía es una historia de maniobras de ida y vuelta, una especie de llamada y respuesta a la innovación.

Se han desarrollado métodos más seguros para generar números aleatorios destinados a frustrar los ataques de números aleatorios. La mayoría de las bibliotecas de cifrado incluyen instalaciones para estos generadores.

Claves asimétricas

Quizás el desarrollo más ingenioso e influyente en la criptografía moderna es el par de claves asimétricas, también conocidas como pares de claves públicas-privadas. La idea básica es que se generen dos claves, una para cifrar y otra para descifrar. La clave de cifrado es segura para distribuir, la clave de descifrado se mantiene privada.

Esta innovación fue iniciada a fines de la década de los años setenta por dos programadores y un matemático, que dieron sus iniciales al innovador sistema de cifrado que inventaron: RSA. (Una nota al margen interesante: un sistema similar fue inventado varios años antes por un matemático de inteligencia británico, pero la invención se mantuvo en secreto y el sistema se consideró poco práctico en ese momento, dadas las limitaciones de los sistemas informáticos.)

RSA y otros sistemas de claves asimétricas toman la idea de la función unidireccional como un gran paso adelante al crear dos claves que funcionan de manera asimétrica: la primera clave se usa para crear mensajes cifrados (la clave pública) y la segunda se usa para descifrarlos (la clave privada). Ver figura 1.

Figura 1. Claves públicas-privadas.
Criptografía, RSA

Las matemáticas detrás de este truco no son simples. De hecho, durante un tiempo, los investigadores involucrados tuvieron serias dudas sobre si era posible en teoría. Hoy en día, la criptografía de clave pública-privada subyace en gran parte de la infraestructura de seguridad de la Internet moderna, incluida la seguridad de la "capa de transporte utilizada por SSL/TLS, firmas digitales y criptomonedas como Bitcoin.

Es importante tener en cuenta que las claves asimétricas no crean sistemas imposibles de descifrar. Pero mientras la clave privada se mantenga privada, es prácticamente imposible romper el cifrado. Además de numerosas vulnerabilidades en la naturaleza (incluidos ataques de números aleatorios, ataques de tiempo y otros) que han salido a la luz, la seguridad incluso del par de claves pública-privada más segura se basa en cuánto tiempo llevaría revertir el proceso de factorización de los números involucrados.

Esto puede no parecer muy seguro, pero para citar el artículo de Brett Slatkin sobre matemáticas criptográficas de clave pública, "incluso soluciones sofisticadas en la computadora más rápida de la Tierra tardarían hasta el fin del universo en descifrar el cifrado asimétrico moderno. Salvo la introducción de la computación cuántica práctica, que haría que descifrar el cifrado tipo RSA sea un problema solucionable de tiempo polinomial (no necesariamente una posibilidad distante), los algoritmos modernos se consideran viables para aplicaciones prácticas.

En las aplicaciones actuales, las claves asimétricas se utilizan a menudo como una especie de apretón de manos para establecer un canal seguro para el intercambio de claves simétricas. (Esto es lo que ocurre cuando el navegador está "negociando TLS) Dado que en la práctica las claves simétricas son mucho más rápidas, el servidor y el cliente verifican entre sí a través de claves asimétricas, entonces entregan claves simétricas para su uso en la comunicación adicional. De esta manera, dicha comunicación está a salvo de espionaje o manipulación incluso a través de canales no confidenciales.

Infraestructura de clave pública

Otra advertencia importante para la criptografía asimétrica es que normalmente requiere una autoridad centralizada de confianza. Esto se debe a que el problema de verificar que alguien es quien dice ser no se limita a demostrar que alguien tenga una clave privada (algo que el cifrado asimétrico puede hacer por sí solo). En cambio, para garantizar que (por ejemplo) el certificado SSL/TLS de un servidor web no solo sea técnicamente válido, sino que también sea auténtico (realmente represente a la organización a la que afirma), se debe hacer referencia a una autoridad central (Google, por ejemplo).

Esto crea más oportunidades para los hackers, ya que cualquier infracción dentro de la jerarquía de validación de claves compromete todas las claves siguientes. Aunque estas infracciones ocurren, gran parte de Internet se basa en este sistema. El sistema en su conjunto se conoce como infraestructura de clave pública (PKI, por sus siglas en inglés). Una parte de confianza que emite certificados es una autoridad de certificación (CA, por sus siglas en inglés).

Una alternativa a PKI es la privacidad bastante buena (PGP, por sus siglas en inglés), en la que los usuarios confían entre sí de forma distribuida de igual a igual, en lugar de depender de un sistema de autoridad centralizado (aquí también se utilizan claves asimétricas para intercambiar claves simétricas). PGP se usa comúnmente para cifrar el correo electrónico y verificar que las descargas no hayan sido manipuladas.

El uso más sofisticado de claves asimétricas y la criptografía en general se encuentra en los sistemas de blockchain, ejemplificados por Bitcoin. Al eliminar la necesidad de una autoridad centralizada y moviendo la validación de transacciones criptográficamente firmadas a la red, una blockchain abre las posibilidades para nuevos tipos de sistemas construidos sobre una capa distribuida, pero segura, por encima de la infraestructura de Internet. Ahora mismo estamos presenciando algunos avances de estas posibilidades.

Las blockchains y los sistemas que se basan en ellas son estructuras criptográficas esenciales. Los pares de claves se utilizan para firmar transacciones y los hashes de cifrado se utilizan para validar los enlaces de la cadena.

Este ha sido un recorrido relámpago por el panorama actual de las criptomonedas. Aunque hay mucha complejidad involucrada, comprender el terreno es cada vez más valioso para todos nosotros, programadores y no programadores por igual.

Puede ver también: