que es el cifrado homomórfico
Patrón de hexágonos sobrepuestos en olas de arena.

¿Qué es el Cifrado Homomórfico?

El cifrado homomórfico es un enfoque criptográfico que permite realizar cálculos sobre datos cifrados sin necesidad de descifrarlos, preservando la privacidad de la información durante su procesamiento. Este paradigma ha cobrado gran relevancia en sectores como la computación en la nube, el aprendizaje automático y las finanzas, donde la protección de los datos es esencial. Su implementación promete un futuro más seguro, aunque aún enfrenta desafíos relacionados con la eficiencia computacional y el manejo del ruido criptográfico. Además, con la creciente digitalización de los procesos, garantizar la seguridad de los datos sin sacrificar su usabilidad se ha convertido en un reto clave para la comunidad tecnológica y científica.

Explicación

El cifrado homomórfico permite ejecutar operaciones matemáticas sobre datos cifrados, garantizando que el resultado también permanezca cifrado hasta su descifrado autorizado. A diferencia de los métodos tradicionales, que requieren descifrar la información antes de su procesamiento, este esquema protege la confidencialidad de los datos en todo momento. Esto es especialmente relevante en entornos donde la información debe ser procesada por terceros sin comprometer su privacidad.

Matemáticamente, se expresa como:

$E(f(x)) = f(E(x))$

Donde:

  • $E$ representa la función de cifrado.
  • $f$ es una operación matemática como suma o multiplicación.
  • $x$ son los datos originales.

Esta propiedad permite realizar cálculos en entornos no confiables, como servidores en la nube o infraestructuras de terceros, sin comprometer la privacidad de la información. Además, esto posibilita un procesamiento seguro en contextos donde la regulación exige estrictos estándares de protección de datos, como en el sector bancario y en la investigación biomédica.

Contextualización

El concepto de cifrado homomórfico fue propuesto en 1978 por Ronald Rivest, Leonard Adleman y Michael Dertouzos. Sin embargo, en aquel entonces no se contaba con la capacidad computacional suficiente para implementarlo de manera eficiente. La principal barrera era la complejidad de realizar operaciones sobre datos cifrados sin que el ruido criptográfico interfiriera con los cálculos. No fue hasta 2009 que Craig Gentry logró desarrollar un esquema totalmente homomórfico basado en criptografía de retículos, lo que permitió realizar cálculos arbitrarios sobre datos cifrados sin necesidad de descifrado intermedio. Este avance fue posible gracias a mejoras en la teoría matemática subyacente y al aumento de la capacidad de procesamiento computacional. Desde entonces, investigadores han desarrollado optimizaciones que han mejorado su rendimiento y viabilidad, permitiendo su adopción en escenarios cada vez más diversos.

Funcionamiento

El cifrado homomórfico opera en tres etapas principales:

  1. Cifrado: el propietario de los datos cifra la información con una clave pública antes de enviarla a un procesador externo.
  2. Cálculo sobre datos cifrados: un tercero realiza operaciones sobre los datos sin necesidad de conocer su contenido.
  3. Descifrado: el propietario descifra el resultado obtenido, garantizando que solo los usuarios autorizados puedan acceder a la información.

Propiedades Matemáticas

Las propiedades algebraicas del cifrado homomórfico incluyen:

  • Homomorfismo aditivo: $E(m_1) \oplus E(m_2) = E(m_1 + m_2)$
  • Homomorfismo multiplicativo: $E(m_1) \otimes E(m_2) = E(m_1 \times m_2)$
  • Propiedades algebraicas generales:
    • Asociatividad: $E(a) \oplus (E(b) \oplus E(c)) = (E(a) \oplus E(b)) \oplus E(c)$
    • Conmutatividad: $E(a) \oplus E(b) = E(b) \oplus E(a)$
    • Distributividad: $E(a) \otimes (E(b) \oplus E(c)) = (E(a) \otimes E(b)) \oplus (E(a) \otimes E(c))$

Tipos de Cifrado Homomórfico

Existen tres categorías principales de cifrado homomórfico:

  • Cifrado parcialmente homomórfico: permite realizar solo un tipo de operación matemática sobre los datos cifrados. Ejemplos incluyen el esquema Paillier (para sumas) y ElGamal (para multiplicaciones). Si bien su eficiencia lo hace útil en contextos específicos, su uso es limitado en aplicaciones que requieren cálculos más complejos.
  • Cifrado algo homomórfico: permite realizar un número limitado de operaciones combinadas (suma y multiplicación), pero su capacidad de procesamiento se ve restringida por la acumulación de ruido criptográfico. Se ha estudiado su aplicación en análisis estadísticos sobre datos protegidos, como en estudios clínicos donde se requiere calcular medias y correlaciones sin comprometer la privacidad de los pacientes, o en encuestas gubernamentales que buscan extraer información agregada sin exponer datos individuales.
  • Cifrado totalmente homomórfico: soporta cualquier cantidad de operaciones matemáticas arbitrarias, permitiendo cálculos complejos sobre datos cifrados. Sin embargo, es el más costoso en términos computacionales. A pesar de estos desafíos, las mejoras en hardware y algoritmos han permitido avances significativos en su aplicabilidad.

Implementación Práctica

Existen varias bibliotecas y herramientas que facilitan la implementación del cifrado homomórfico, destacamos las siguientes:

  • IBM HElib: un framework optimizado para cálculos homomórficos.
  • Microsoft SEAL: biblioteca de código abierto ampliamente utilizada en aplicaciones prácticas.
  • TenSEAL: enfocada en integraciones con machine learning.
  • PySEAL: implementación en Python que permite prototipado rápido.

Estas herramientas han permitido el desarrollo de aplicaciones que utilizan cifrado homomórfico en la nube, finanzas y sistemas de autenticación.

Utilidad En El Mundo Real

Se hace uso del cifrado homomórfico en las siguientes áreas (entre otras):

  • Computación En La Nube: permite realizar análisis de datos cifrados sin comprometer su privacidad.
  • Finanzas: facilita auditorías y cálculos de riesgo sin exponer información confidencial.
  • Machine Learning: posibilita el entrenamiento de modelos sobre datos protegidos.
  • Blockchain & Seguridad Descentralizada: refuerza la privacidad de las transacciones sin afectar la verificabilidad de los datos.

Ejemplo Con Python

Consideraremos un escenario donde una empresa desea calcular la suma y el promedio de las ventas mensuales de trece sucursales (de la Sucursal A a la Sucursal M) sin revelar los datos individuales a un tercero encargado del procesamiento.

!pip install Pyfhel requests

import requests
import json
import sys
from phe import paillier
# Definimos la ruta del archivo JSON
url_json = 'https://forodatos.com/multimedia/datos/ventas-sucursales.json'

# Cargamos los datos
def cargar_datos_json(url):
    try:
        respuesta = requests.get(url)
        respuesta.raise_for_status()  # Verifica si la solicitud fue exitosa
        datos = respuesta.json()
        return datos
    except requests.exceptions.RequestException as e:
        print(f"Error al descargar el archivo JSON: {e}")
        sys.exit(1)
    except json.JSONDecodeError:
        print("Error al decodificar el archivo JSON.")
        sys.exit(1)

# Paso 1: Descargamos y carga de datos desde el archivo JSON
ventas_sucursales = cargar_datos_json(url_json)

# Verificamos que haya al menos una sucursal
if not ventas_sucursales:
    print("El archivo JSON está vacío o no contiene datos de ventas.")
    sys.exit(1)

# Mostramos las ventas originales
print("Ventas Mensuales de las Sucursales (En Claro):")
for sucursal, venta in ventas_sucursales.items():
    print(f"{sucursal}: {venta}")

# Paso 2: Inicializamos el esquema de cifrado Paillier
try:
    public_key, private_key = paillier.generate_paillier_keypair()
except Exception as e:
    print(f"Error al generar el par de claves de Paillier: {e}")
    sys.exit(1)

# Paso 3: Ciframos los datos de ventas
ventas_cifradas = {}
for sucursal, venta in ventas_sucursales.items():
    try:
        venta_int = int(venta)
    except ValueError:
        print(f"El valor de venta para {sucursal} no es un entero válido.")
        sys.exit(1)
    try:
        ventas_cifradas[sucursal] = public_key.encrypt(venta_int)
    except Exception as e:
        print(f"Error al cifrar la venta para {sucursal}: {e}")
        sys.exit(1)

# Paso 4: Sumamos las ventas cifradas de manera homomórfica
try:
    suma_cifrada = None
    for venta_ctxt in ventas_cifradas.values():
        if suma_cifrada is None:
            suma_cifrada = venta_ctxt
        else:
            suma_cifrada += venta_ctxt  # Suma homomórfica
except Exception as e:
    print(f"Error al sumar las ventas cifradas: {e}")
    sys.exit(1)

# Paso 5: Desciframos la suma para obtener el total de ventas
try:
    suma_descifrada = private_key.decrypt(suma_cifrada)
except Exception as e:
    print(f"Error al descifrar la suma: {e}")
    sys.exit(1)

# Paso 6: Calculamos el promedio en claro
numero_sucursales = len(ventas_sucursales)

# Verificamos que el número de sucursales no sea cero para evitar división por cero
if numero_sucursales == 0:
    print("El número de sucursales es cero, no se puede calcular el promedio.")
    sys.exit(1)

promedio = suma_descifrada / numero_sucursales

# Paso 7: Mostramos los resultados
print("\nVentas Mensuales de las Sucursales (Cifradas):")
for sucursal, venta_ctxt in ventas_cifradas.items():
    print(f"{sucursal}: Cifrado = {venta_ctxt.ciphertext()}")

print(f"\nSuma de Ventas Cifradas: {suma_cifrada.ciphertext()}")
print(f"Suma Descifrada: {suma_descifrada}")

print(f"\nNúmero de Sucursales: {numero_sucursales}")
print(f"Promedio de Ventas Mensuales: {promedio:.2f}")

Se demuestra que las operaciones de suma y promedio sobre datos cifrados se realizan correctamente, obteniendo resultados precisos una vez descifrados. Esto permite a la empresa proteger la confidencialidad de sus datos de ventas mientras delega el procesamiento a servicios externos como la nube.

El cifrado homomórfico garantiza que solo la entidad con la clave privada pueda acceder a la información en claro, siendo una técnica invaluable para organizaciones que manejan información sensible y desean aprovechar recursos externos sin comprometer la seguridad y privacidad de sus datos.

Conclusión

El cifrado homomórfico es una tecnología avanzada que permite realizar cálculos sobre datos cifrados sin comprometer su privacidad, facilitando la seguridad en sectores críticos como la computación en la nube, la banca y la medicina. Aunque su adopción sigue enfrentando desafíos en términos de rendimiento y costos computacionales, los avances en hardware y algoritmos han mejorado su viabilidad. Con la creciente necesidad de privacidad en el entorno digital, el cifrado homomórfico seguirá evolucionando y desempeñando un papel esencial en la protección de la información.