Hoy vamos a hablar sobre un sistema de cifrado muy especial. Aunque este tipo de cifrado lleva mucho tiempo propuesto (se planteó por primera vez durante la creación del algoritmo RSA) durante los últimos 40 años se ha intentado implementar sin éxito. Y es que tiene una característica que ningún otro cifrado tiene: es posible manipular la información cifrada con este sistema sin necesidad de descifrarla. Veámoslo con más detenimiento.
Definición
El cifrado homomórfico es una forma de cifrado que permite a los usuarios realizar cálculos sobre sus datos cifrados sin descifrarlos previamente. Estos cálculos resultantes se dejan en una forma cifrada que, cuando se descifra, da lugar a un resultado idéntico al que se habría producido si las operaciones se hubieran realizado con los datos sin cifrar. Un cifrado es homomórfico si cumple la siguiente igualdad:
Es decir, el descifrado de una operación Op’ con datos cifrados es igual a otra operación Op con los datos descifrados. Op’ y Op pueden ser la misma operación o no, lo importante es que mediante una operación con datos cifrados se consiga obtener el resultado cifrado de una operación con datos sin cifrar. Quizá sea mas sencillo de entender con el siguiente esquema:
El cifrado de 200 es X, el cifrado de 88 es Y, y el cifrado de 288 es Z. Un cifrado es homomórfico si una operación con X e Y (en este caso suma) da como resultado Z.
El cifrado homomórfico permitiría trabajar con información sensible sin necesidad de conocer esa información. Esto es clave para proteger la privacidad y para que se puedan realizar con total seguridad operaciones críticas.
Existen dos tipos de cifrado homomórfico:
– Cifrado parcialmente homomórfico: cifrado que es homomófico únicamente en la suma o en la multiplicación. Existen varios ejemplos de cifrados parcialmente homomórficos, como el Unpadded RSA, ElGamal, Goldwasser–Micali, Benaloh o Paillier.
– Cifrado completamente homomórfico (FHE): cifrado que soporta tanto la suma como la multiplicación. Existen implementaciones de cifrados completamente homomórficos como Helib, Microsoft SEAL, PALISADE o HEAAN. La importancia de este tipo de cifrado es que con la suma y la multiplicación es posible construir los circuitos para realizar cualquier cómputo, con lo cual con este tipo de cifrado se podría realizar cualquier tarea con datos cifrados.
Estado del Arte
Actualmente el cifrado homomórfico existe tan solo a nivel teórico. Aunque se han conseguido crear cifrados homomórficos que sean capaces de procesar ciertas operaciones, estos están muy limitados y no son lo suficientemente rápidos para poder ser usados en aplicaciones reales.
No obstante, cada año se continúa investigando al respecto y mejorando los algoritmos. En especial destaca el Helib de IBM.Puedes encontrar esta implementación en el siguiente github: https://github.com/homenc/HElib
Esta implementación está basada en el cifrado completamente homomórfico de Brakerski, Gentry y Vaikuntanathan (BGV), está escrito en C++ y bajo licencia GNU GPL y actualmente permite operaciones de bajo nivel. Puedes encontrar más información aquí. Es el fruto de años de investigación que se iniciaron con la tesis doctoral de Craig Gentry.
Actualmente el cifrado homomórfico se encuentra en la cuarta generación, en la que se implementa el esquema CKKS. Este esquema soporta varias rondas de operaciones cifradas. El mayor problema con las rondas de cifrado es que generan ruido, especialmente en multiplicación cifrada. El esquema CKKS consigue eliminar ese ruido aproximando los valores en cada ronda en lugar de guardar el valor exacto (utiliza solo los bits más significativos, lidiando eficientemente con los errores producidos por esta aproximación). Esta forma de actuar es similar a como se lidia con el ruido en Machine Learning, por ello CKKS está pensado para ser una solución al Machine Learning cifrado.
Ataques contra cifrados homomórficos
Dado que toda´vía no se ha conseguido una forma de cifrado homomórfico que funcione en entornos reales, existen pocos ataques a este tipo de cifrado.
Sin embargo, el año pasado los investigadores Baiyu Li y Daniele Micciancio publicaron un artículo sobre ataques pasivos contra CKKS. Los autores realizaron el ataque a 4 librerías de cifrado homomórfico modernos: HEAAN, Helib, PALISADE y SEAL. Demostraron que para ciertas configuraciones es posible obtener la clave privada de cifrado.
No obstante, ya se han implementado medidas para evitar este ataque en la mayoría de librerías actuales.
Cloud Computing
La principal intención del cifrado homomórfico es poder manipular información cifrada. Esto puede parecer trivial pero es importantísimo debido al auge del Cloud Computing: las empresas tienen que confiar la información más sensible que tienen, los datos de sus clientes, a proveedores como Amazon Web Services, Google Cloud, Microsoft Azure…
Esto implica un riesgo muy grande, pues tienen que confiar en que ese proveedor va a tomar las medidas necesarias para proteger sus datos. Además, solo tienen de aval la palabra del proveedor, ya que ni siquiera podrán saber en que dispositivo físico se encuentran esos datos.
Con todo, la única opción que tienen las empresas para migrar a la nube es cifrar todos sus datos y utilizar la nube como un recipiente donde almacenar toda esa información. Y si necesitan que el proveedor realice alguna operación con sus datos, tendrán que proporcionarle las claves de cifrado o buscar la forma de añadir el descifrado de los datos como parte del proceso.
Pero si se consigue realizar este cifrado homomórfico, podría permitir a los clientes que utilizan estos servicios de la nube subir sus datos cifrados y seguir utilizandolos sin necesidad de compartir las claves de cifrado. Esto permitirá que se extienda todavía más el uso de los entornos Cloud entre clientes que manejen información muy crítica.
Ejemplo Práctico: Sistema de Votaciones
Vamos a ver un ejemplo sencillo mediante el cual se podría realizar un sistema de voto para unas elecciones, donde cada ciudadano pueda votar de forma totalmente anónima y la máquina que computa cada votación pueda contabilizar todos los votos sin necesidad de descifrarlos y mostrar en claro la información personal del votante y el partido al que ha votado. Cabe destacar que este sistema se podría implementar a día de hoy sin problema pues tan solo requiere realizar sumas con datos cifrados.
Se plantea un sistema con 3 candidatos, A, B, C y 3 votantes, V1, V2 y V3. Así se mostraría la tabla de resultados en texto plano (izquierda) y la tabla con los resultados cifrados con algun sistema de cifrado de clave pública (derecha):
Si tenemos un cifrado homomórfico en el que podemos sumar elementos cifrados, solo tendríamos que descifrar la suma total de los votos de cada candidato (Xa, Xb y Xc), dándole privacidad al voto de cada ciudadano.
Como podemos ver, el cifrado homomónimo ofrece muchas ventajas en distintos campos, y conseguir una implementación eficiente marcará un antes y un después en la seguridad de nuestras comunicaciones. Si te ha interesado este artículo estate atento porque publicaré aquí toda la información que tenga a medida que vaya habiendo progresos.
Lethani
Me interesa el tema, me encantaría profundizar, gracias.