El gran reto de la computación segura en la nube: usando datos cifrados sin descifrarlos (I)

Gonzalo Álvarez de Marañón    24 junio, 2019
El gran reto de la computación segura en la nube usando datos cifrados sin descifrarlos (Parte 1)

Tomás dirige una asesoría fiscal y lleva la contabilidad de docenas de clientes. Almacena toda la información de sus clientes en la nube, de esta manera, se olvida de la gestión del espacio en disco, de la redundancia, de la escalabilidad, de las copias de seguridad, del ancho de banda para su acceso, etc. Para mantener seguros los archivos de sus clientes, Tomás los almacena cifrados en la nube. Así impide que un potencial atacante pueda robárselos a su proveedor e incluso que un administrador corrompido del propio proveedor pueda ver las cuentas de sus clientes.

El problema surge cuando Tomás manipula los datos. Necesita descargarlos, descifrarlos, operar sobre ellos, volverlos a cifrar y subirlos de nuevo a la nube. La verdad es que Tomás se fía más de la seguridad proporcionada por su proveedor de servicios en la nube que de sus propios equipos. ¿Qué pasaría si el ordenador de un trabajador de Tomás resulta comprometido? ¿Cómo sabe Tomás que un ciberdelincuente no está accediendo a los datos de sus clientes en el momento más vulnerable del proceso, justo cuando está operando sobre los datos en claro?

Lo que le gustaría a Tomás es que su proveedor de la nube operase directamente sobre los propios datos cifrados en la nube sin tener que descifrarlos antes: por ejemplo, sumar el IRPF de un trabajador, calcular el IVA a pagar este trimestre o realizar una búsqueda de información; y que cuando Tomás descifrase los datos, obtuviera los resultados correctos.  ¿Es posible hacer realidad hoy el sueño de Tomás? Hmmm, no del todo.

El reto de computar en la nube con datos cifrados sin descifrarlos

Como todo en la vida, la nube tiene sus ventajas y sus inconvenientes. Las ventajas las conocemos todos: reducción de costes, nulo mantenimiento, enorme flexibilidad, total disponibilidad, alta escalabilidad, etc. Sus problemas de seguridad son igualmente evidentes: un servidor comprometido supone el compromiso de los datos alojados.

La contramedida inmediata que a todos se nos ocurre para proteger los datos almacenados en la nube consiste en cifrarlos. El cifrado resulta satisfactorio siempre y cuando los datos permanezcan en reposo y no se necesite realizar operaciones sobre ellos. Pero ¿y si hay que realizar cálculos en la nube? ¿Cómo hacerlo sin descifrarlos ni revelar las claves de cifrado al software en ejecución en la nube?

El reto es formidable. Se está impulsando un potente esfuerzo de investigación para desarrollar métodos criptográficos que permitan la computación con datos cifrados sin descifrarlos, como, por ejemplo:

  • El cifrado totalmente homomórfico (FHE), que busca abordar este problema requiriendo que un cliente cifre los datos antes de enviarlos a la nube y proporcione además un código que se ejecute sobre esos datos sin descifrarlos. Los resultados se devuelven cifrados al cliente. Dado que solo el cliente controla la clave de descifrado, nadie más puede descifrar los datos originales ni los resultados, lo que garantiza la seguridad de esa información. Por desgracia, si bien el cálculo con datos cifrados es teóricamente posible, este cálculo se ralentiza en casi 10 órdenes de magnitud, lo que lo hace inviable con los algoritmos disponibles hoy.
  • Otra estrategia consiste en la computación multi-parte segura (SMPC, Secure Multi-Party Computation), en la cual múltiples entidades pueden realizar cálculos de manera conjunta y al mismo tiempo mantener la privacidad de los datos de cada entidad. Al igual que con FHE, estos protocolos añaden una sobrecarga computacional considerable, de dos órdenes de magnitud.
  • Por último, la criptografía con umbral exige que para descifrar un mensaje cifrado o para firmar un mensaje, varias partes (que superen un umbral predeterminado) deben cooperar en el protocolo de descifrado o firma. El mensaje se cifra mediante una clave pública y la clave privada correspondiente se comparte entre los participantes.

En este artículo veremos con más detalle el funcionamiento de FHE, mientras que en un segundo artículo profundizaremos en las otras dos estrategias.

El cifrado totalmente homomórfico (FHE)

El cifrado homomórfico sería el «Santo Grial» de la seguridad en la nube. Se define como la capacidad de realizar operaciones sobre datos cifrados cuyo resultado, una vez descifrado, es idéntico al resultado de esas mismas operaciones sobre los datos en claro.

Aunque a primera vista puede parecer mágico, lo cierto es que a nuestro alrededor abundan algoritmos criptográficos de uso cotidiano que soportan parcialmente el cifrado homomórfico, como por ejemplo los de clave pública. Se les dice «parcialmente» homomórficos porque sólo son homomórficos para una operación, como la suma o la multiplicación, pero no para cualquier otra operación algebraica. Un ejemplo con el archiconocido RSA hará que todo quede más claro.

Imagina que en el servidor guardas dos cantidades, x1 y x2, cifradas con tu clave pública RSA (n y e), de manera que nadie más que el legítimo poseedor de la clave privada correspondiente, o sea, tú, podrá descifrarlas. Ahora bien, RSA (sin padding y sin las modificaciones que se le añaden para aumentar su robustez) es parcialmente homomórfico respecto de la multiplicación, ya que:

Por lo tanto, el servidor podría multiplicar tus dos cantidades cifradas y entregarte el resultado cifrado sin conocer los valores de x1 ni x2. Cuando descifres el resultado devuelto obtendrás el mismo valor que si hubieras multiplicado las dos cantidades originales sin cifrar. Impresionante, ¿no?

Existen otros muchos algoritmos criptográficos que al igual que RSA son parcialmente homomórficos, como ElGamal también para la multiplicación o Paillier para la suma.

Las cosas se complican enormemente cuando se busca el cifrado «totalmente» homomórfico (FHE), capaz de soportar tanto la suma como el producto. Aunque existen muchas propuestas en la literatura científica sobre FHE, la más destacada es la planteada por Craig Gentry en 2009 y evolucionada por él mismo y por otros autores a lo largo de los años. Su propuesta se basa en un concepto algebraico abstracto conocido como “celosía“. Seguro que has visto cientos de celosías en ventanas y balcones. Las que te venden en tiendas de bricolaje son celosías bidimensionales: listones de madera o de metal que se cruzan en ciertos puntos. Ahora imagina esa misma celosía en 3D. Y ahora añade otra dimensión. Y otra. Y otra. Y así hasta n dimensiones. Bien, ¿tienes ya una celosía n-dimensional en tu cabeza? Complicada, ¿verdad? Puedes creer que encontrar el punto más cercano a otro en esa celosía no es tarea fácil. De hecho, es tan difícil que se conoce como el Problema del Vector Más Corto (Shortest Vector Problem, SVP) y constituye precisamente el problema matemático “intratable” del cifrado basado en celosías. De hecho, este criptosistema representa una de las alternativas criptográficas más serias para la era post-cuántica.

Lo mejor de todo es que, con las variantes adecuadas, las celosías también sirven para el cifrado homomórfico completo. Pero, y aquí aparece un gran, gran PERO, estos algoritmos resultan tremendamente ineficientes. Operar con los datos cifrados puede volverse hasta 10 órdenes de magnitud más lento que con los datos en claro (o sea, 1010 veces más lento o, lo que es lo mismo, un uno seguido de diez ceros: 10.000.000.000). En definitiva, son inservibles para aplicaciones prácticas reales. Hasta que no alcancen velocidades aceptables, no veremos un despliegue a gran escala en servicios en la nube. Mientras tanto, la investigación en este campo continúa intensamente.

Mientras tanto, los criptógrafos no se cruzan de brazos. Si operar sobre los datos cifrados constituye un reto formidable, ¿por qué no acometer versiones más sencillas del problema? Tal vez no confíes en tu proveedor en la nube. ¿Se podría repartir la carga entre los dos? Otros esquemas criptográficos persiguen que varias partes que no confían mutuamente puedan operar sobre los datos sin tener que revelárselos unas partes a otras. Pero esa es otra historia y será contada en la segunda entrega de este artículo.

Ya disponible la segunda parte de “El gran reto de la computación segura en la nube: usando datos cifrados sin descifrarlos”.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *