A medida que las tecnologías criptográficas continúan avanzando y encontrando usos nuevos y cada vez más importantes en nuestras vidas, los procesos que llevan a cabo estas tecnologías se vuelven cada vez más complejos. Si bien se puede hacer mucho con primitivas criptográficas simples, lo más emocionante es lo que pueden hacer cuando se combinan.
Aún más impresionante es la idea de que algunos protocolos criptográficos estén diseñados con capacidades de descripción de hardware, lo que les otorga el poder de abordar desafíos universales. Esta idea, apropiadamente llamada “criptografía programable”, promete hacer posibles acciones más complicadas, parafraseando a Brian Gu, convirtiendo el problema matemático de diseñar nuevos protocolos en el problema de programación de combinar los existentes.
En este artículo, exploraremos las capas de la aplicación criptográfica, desde objetivos de alto nivel hasta algoritmos de bajo nivel, para comprender de dónde provienen estas ideas. Luego, veremos hacia dónde se dirigen.
Antes de comenzar, tomemos un momento para reflexionar sobre la motivación fundamental que impulsa a los criptógrafos a profundizar en su oficio. Después de todo, es mucho más fácil quedarse en casa y no hacer nada que trabajar en pruebas matemáticas de que un nuevo protocolo es seguro, factible y una mejora significativa con respecto a los modelos existentes.
Debido a la importancia cada vez mayor de los datos digitales que almacenamos, compartimos y procesamos, se necesitan métodos nuevos y mejorados para garantizar la privacidad y salvaguardar esos datos contra la manipulación. Es el deseo de satisfacer esa necesidad lo que hace que los criptógrafos se levanten de la cama por la mañana.
Es realmente asombroso pensar en cuánta información se procesa en línea hoy en día. Lo más inmediato para la mayoría de las personas es cuánto más tiempo dedican ahora a interactuar con los datos que hace unos años. Toda esta información que producen, interactúan, revisan y envían corre el riesgo de ser espiada, robada o manipulada si no está protegida adecuadamente.
Por eso siempre existe la necesidad de la criptografía. Es por eso que se siguen desarrollando métodos nuevos y mejorados para mantener la privacidad de los datos.
Como muchas otras disciplinas, la criptografía se basa en conceptos simples que se amplían a medida que la tarea se vuelve más interesante. Estos conceptos simples, a menudo denominados en la criptografía moderna como “primitivas criptográficas”, son a menudo básicos en sí mismos, pero pueden combinarse para construir algo complejo.
Por ejemplo, consideremos uno de los códigos más antiguos: el cifrado César. Este código, que lleva el nombre de su usuario más famoso, implica escribir palabras en un texto cifrado que retrocede tres letras del mensaje original. En este caso, la palabra “el” se escribiría “qeb”. Cada letra se desplazó a tres lugares delante de ella en el alfabeto inglés.
Si bien este código es bastante simple, está bien probado, es útil y nada experimental. Si necesita cifrar datos, esto los cifrará. Si bien no es el código más seguro del mundo, también se puede combinar con otras técnicas para hacerlo más fuerte.
Por poner otro ejemplo, el cifrado Vigenère es una herramienta para codificar un mensaje utilizando varios cifrados Cesar diferentes. En este sistema, cada mensaje se combina con una clave; imaginemos “águila” y “limón”, respectivamente. La clave le indica cuántos lugares debe desplazar las letras del mensaje, pero cada letra tiene un número diferente de desplazamientos. La “L” en limón te indica que muevas la primera letra del mensaje doce espacios, ya que L es la duodécima letra del alfabeto inglés. La "E" te indica que cambies la segunda letra a cinco espacios, y así sucesivamente.
Entonces, "manzana" se convierte en "peszr". Sin acceso a la clave, resulta mucho más difícil decodificar el mensaje. Si bien todavía tiene las debilidades del cifrado Cesar (con el tiempo suficiente, un cálculo de fuerza bruta determinará cuál es el mensaje), al combinar las herramientas existentes de una nueva manera, el nivel de seguridad aumenta dramáticamente.
Como probablemente puedas adivinar, a menudo es mucho, mucho más fácil combinar cifrados existentes como estos de formas nuevas y más complejas que inventar un nuevo sistema. César murió hace mucho tiempo y todavía utilizamos su libro de códigos.
Así como persiste la sabiduría de los códigos más antiguos, gran parte de la tecnología criptográfica moderna se encuentra en un pedestal similar. Conseguir que un criptógrafo escriba nuevas pruebas de que un sistema novedoso mantendrá seguros sus secretos digitales es fantástico, pero también lleva bastante tiempo y no se garantiza que funcione. Por otro lado, se sabe que las primitivas criptográficas como RSA (Rivest-Shamir-Adleman), AES (Advanced Encryption Standard) o los sistemas de firma digital funcionan y pueden aplicarse fácilmente a una amplia gama de problemas. Por ejemplo, RSA se usa ampliamente para la transmisión segura de datos, mientras que AES es un estándar para cifrar datos confidenciales. Si se combinan, pueden proporcionar una funcionalidad innovadora y resolver problemas más complejos que cualquiera de ellos por sí solo.
Si bien combinar métodos simples es una excelente manera de crear sistemas más complejos, existen limitaciones. Cada una de estas primitivas está diseñada para ser bueno en una tarea particular, y no es raro que se cometan errores al combinarlas que dejen sus debilidades expuestas.
Basados en primitivos de bajo nivel, los protocolos de nivel medio apuntan a características y funcionalidades más avanzadas. A continuación, exploraremos algunos de los protocolos de nivel medio más ampliamente adoptados y discutidos.
El cifrado homomórfico es un protocolo que permite procesar datos cifrados sin tener que descifrarlos primero. Hoy en día existen ejemplos de esto, aunque todavía se encuentra en sus fases comparativamente tempranas; no se demostró su utilidad hasta 2009. Los modelos existentes a veces están limitados en cuanto a los procesos que se pueden realizar con los datos cifrados.
Sin embargo, el concepto es extremadamente interesante y tiene muchas aplicaciones posibles obvias. Considere la frecuencia con la que se roban datos confidenciales pero útiles, como registros médicos o información crediticia, de organizaciones que necesitan acceder a ellos para ayudarlo. ¿Qué pasaría si fuera posible interactuar con su información médica cifrada sin siquiera decodificarla? Los beneficios de esta mejora para la seguridad son evidentes.
La computación multipartita (MPC) es una herramienta para ocultar entradas proporcionadas por diferentes actores que trabajan juntos en un resultado común. A menudo se lo describe como el “problema de los millonarios”.
Imaginemos que hay dos millonarios que quieren saber cuál de ellos tiene más dinero. Sin embargo, no quieren simplemente salir y decir cuál es su patrimonio neto. Pueden usar MPC para resolver este problema. El primer millonario puede agregar su patrimonio neto cifrado a un programa diseñado para comparar los valores antes de enviárselo al segundo. El segundo millonario no puede ver el primer valor cuando suma su patrimonio neto.
Luego pueden descifrar la salida y descubrir cuál de ellos ingresó un valor mayor, todo sin poder ver ninguna de las entradas.
Por último, veamos las pruebas de conocimiento cero (ZKP). Probablemente el lector los conozca bien, ya que se utilizan ampliamente, y los consideraremos brevemente. Los ZKP son muy buenos para permitir que un probador le diga a otra persona, a menudo llamada verificador , que algo es cierto sin decir nada más. Normalmente, prestan este servicio a un único usuario; una persona pide pruebas y las obtiene. Hay varios ZKP, incluidos zk-SNARK y zk-STARK. Cada uno tiene sus propias ventajas y desventajas.
A medida que avanza la investigación sobre estos protocolos avanzados, la atención se ha ampliado hacia el desarrollo de protocolos criptográficos de uso general. Estas iniciativas tienen como objetivo demostrar que es factible que la criptografía permita que la computación universal se realice de forma segura y privada. Inicialmente, estos esfuerzos fueron puramente teóricos, priorizando la viabilidad sobre la eficiencia de la implementación práctica. Sin embargo, a medida que la investigación se ha profundizado, los criptógrafos han centrado su atención en hacer que estos conceptos sean aplicables en la práctica. Mejoran, combinan e inventan nuevos protocolos y componentes. A menudo, el protocolo definitivo acaba siendo un híbrido, que aprovecha los puntos fuertes de múltiples enfoques. Por ejemplo, el cifrado homomórfico utiliza pruebas de conocimiento cero para pruebas de rango para garantizar que los cálculos permanezcan dentro de un rango válido. Mientras tanto, los protocolos MPC podrían incorporar elementos de homomorfismo para ejecutar operaciones no lineales.
Entre la gran cantidad de protocolos experimentales, algunos se han acercado lo suficiente a la utilidad práctica como para allanar el camino para el desarrollo en el mundo real. Estas herramientas funcionan de manera similar a los compiladores, interpretan lenguajes de alto nivel y los convierten en circuitos que los protocolos criptográficos pueden procesar. Esta transformación es similar a convertir software en operaciones de registro de CPU o traducir Solidity en transiciones de estado EVM. Lograr esta capacidad similar a la de un compilador, completa con soporte para el cálculo completo de Turing, marca el advenimiento de lo que llamamos criptografía programable. Si bien esto puede parecer demasiado optimista, la realidad tiene matices. Las funciones hash bit a bit, por ejemplo, no son tan eficientes en un protocolo de prueba de conocimiento cero, mientras que los hash ejecutados mediante multiplicación modular ofrecen una eficiencia superior. Por tanto, es aconsejable mantenerse alejado de algoritmos como SHA-3. Además, evitar los cálculos de punto flotante es una práctica común, ya que los protocolos criptográficos operan predominantemente dentro de campos finitos. Trucos como estos existen en todas partes cuando se trata de dar vida a la criptografía programable.
La criptografía programable es todavía un concepto nuevo, pero ofrece la posibilidad de simplificar problemas muy complicados. Es fácil especular sobre las direcciones que tomará. Es casi seguro que se intentará programar con todo tipo de herramientas criptográficas, aunque aún están por determinar los niveles de éxito que se obtendrán con ellas.
Sin embargo, algunos de estos experimentos funcionarán. Algunos de ellos funcionarán bien, y aquellos que funcionen bien proporcionarán potentes funcionalidades y altos niveles de seguridad sin tener que hacer el gasto de que un criptógrafo cree un sistema completamente nuevo para una aplicación. Esta posibilidad por sí sola probablemente generará un gran interés en este campo.
Habrá que abordar el problema de cómo hacer esto de manera que funcione con los sistemas existentes, y es probable que gran parte de lo que se adopte sea lo que funcione eficientemente con los datos con los que es necesario interactuar.
Podría ser difícil exagerar el impacto de esta tecnología en la seguridad de los datos, la privacidad y el campo más amplio de la seguridad digital. Un gran número de acciones complejas serán más fáciles de implementar. Si bien una mala programación causará problemas, como siempre sucede, donde la tecnología funcione, veremos mejor seguridad y sistemas de privacidad más sólidos.
Quizás lo más alentador de todo es que todavía es bastante temprano en términos de usos de esta tecnología. Las pruebas ZK se idearon en la década de 1980, pero no fueron posibles hasta 2012. Puede haber muchos mecanismos posibles y combinaciones de mecanismos con los que nadie ha soñado todavía. La próxima idea que sacudirá al mundo podría llegar mañana. Quizás ni siquiera seamos capaces de adivinar qué hará.