Cifrado homomórfico con SEAL

.NET

En este artículo se analiza cómo y cuándo usar el cifrado homomórfico y cómo implementarlo con la biblioteca Microsoft Simple Encrypted Arithmetic Library (SEAL) de código abierto.

Architecture

Diagrama que muestra el cifrado tradicional y SEAL.

Flujo de trabajo

Los esquemas de cifrado tradicionales constan de tres funcionalidades: generación de claves, cifrado y descifrado. Los esquemas de cifrado de clave simétrica usan la misma clave secreta para el cifrado y el descifrado. Permite el cifrado eficaz de grandes cantidades de datos para un almacenamiento en la nube seguro y externalizado. Los esquemas de cifrado de clave pública usan una clave pública para el cifrado y una clave secreta diferente para el descifrado. Cualquier persona que conozca la clave pública puede cifrar los datos, pero solo los usuarios que conozcan la clave secreta pueden descifrar y leer los datos. El cifrado de clave pública permite una comunicación segura en línea, pero suele ser menos eficaz que el cifrado de clave simétrica.

Puede usar el cifrado tradicional para proteger el almacenamiento y la comunicación seguros, pero el cálculo externalizado requiere la eliminación de las capas de cifrado. Los servicios en la nube que proporcionan cálculo externo deben implementar directivas de acceso para evitar el acceso no autorizado a datos y claves. La privacidad de los datos depende de las directivas de control de acceso que impone el proveedor de servicios en la nube y en las que confía el cliente.

Con el cifrado homomórfico de SEAL, los proveedores de nube nunca tienen acceso sin cifrar a los datos que almacenan y en los que realizan cálculos. Los cálculos se pueden realizar directamente en los datos cifrados. Los resultados de estos cálculos cifrados permanecen cifrados y solo el propietario de los datos puede descifrarlos mediante la clave secreta. Gran parte del cifrado homomórfico usa esquemas de cifrado de clave pública, aunque es posible que la funcionalidad de clave pública no siempre sea necesaria.

Componentes

Detalles del escenario

A menudo, las empresas envían, reciben y almacenan sus datos en la nube de forma cifrada. No obstante, para aprovechar las ventajas de la informática en la nube, las empresas deben proporcionar datos sin cifrar o las claves para descifrarlos. Esta práctica aumenta el riesgo para los datos de la empresa. El cifrado homomórfico permite el cálculo directo en datos cifrados, lo que facilita la aplicación de la capacidad de la nube para los datos críticos para la privacidad.

Posibles casos de uso

  • Cálculos ligeros, como la suma y la multiplicación de datos críticos para la privacidad y partes de programas.
  • Informática en la nube externa, donde un solo propietario posee todos los datos y tiene acceso exclusivo a las claves de descifrado.

Consideraciones

  • Solo algunos cálculos son posibles en los datos cifrados. La biblioteca de cifrado homomórfico Microsoft SEAL permite sumas y multiplicaciones en enteros cifrados o en números reales. La comparación, la ordenación o las expresiones regulares cifradas no suelen ser factibles para realizar evaluaciones en datos cifrados mediante esta tecnología. Por tanto, solo se pueden implementar con Microsoft SEAL cálculos de la nube críticos para la privacidad específicos en partes de programas.

  • Microsoft SEAL incluye dos esquemas de cifrado homomórfico con propiedades diferentes. El esquema BFV permite realizar operaciones de aritmética modular en enteros cifrados. El esquema CKKS permite sumas y multiplicaciones en números reales o complejos cifrados, pero solo produce resultados aproximados. CKKS es la mejor opción para la suma de números reales cifrados, la evaluación de modelos de Machine Learning en datos cifrados o el cálculo de distancias de ubicaciones cifradas. En el caso de las aplicaciones en las que se necesitan valores exactos, el esquema BFV es la única opción.

  • El cifrado homomórfico no es eficaz. Dado que el cifrado homomórfico presenta una gran sobrecarga de rendimiento, los cálculos que ya son costosos de realizar en datos sin cifrar probablemente no sean factibles en datos cifrados.

  • Los datos cifrados con cifrado homomórfico tiene un tamaño muchas veces mayor que los datos no cifrados, por lo que puede que no tenga sentido cifrar bases de datos de gran tamaño completas, por ejemplo, con esta tecnología. En su lugar, los escenarios en los que los requisitos de privacidad estrictos prohíben cálculos en la nube sin cifrar, pero los propios cálculos son bastante ligeros, son casos de uso significativos.

  • Normalmente, los esquemas de cifrado homomórfico tienen una clave secreta única, que está en poder del propietario de los datos. El cifrado homomórfico no es apropiado para escenarios en los que varios propietarios de datos privados diferentes desean participar en el cálculo colaborativo.

  • No siempre es fácil ni sencillo traducir un cálculo sin cifrar en un cálculo sobre datos cifrados. Aunque los nuevos usuarios puedan programar y ejecutar un cálculo mediante Microsoft SEAL, la diferencia entre la implementación eficaz y la ineficaz puede ser enorme. Puede ser difícil saber cómo mejorar el rendimiento.

  • Aunque la propia primitiva de cifrado homomórfico es segura, no garantiza que las aplicaciones y los protocolos que la usan estén protegidos.

Implementación de este escenario

El ejemplo de código incluye una aplicación de consola, una API para implementar una interacción sencilla entre cliente y servidor con cifrado homomórfico, e instrucciones completas. Para usar el código, descargue y extraiga el archivo ZIP en una carpeta local. El proyecto de código requiere Visual Studio 2019 y .NET Core versión 2.2.

Colaboradores

Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.

Autor principal:

Pasos siguientes

Para obtener más información sobre el cifrado homomórfico y la biblioteca Microsoft SEAL, consulte Microsoft SEAL en Microsoft Research y el artículo sobre el proyecto de código SEAL en GitHub.

Consulte los siguientes recursos sobre la seguridad en Azure: