Este post originalmente se publicó en la web de BBVA Next Technologies. No dudes en ver el original. No olvidéis seguir en las redes sociales a sus coautores: Nerea Sainz de la Maza [LinkedIn] y José Ignacio Escribano [GitHub]
Uno de los activos más importantes con los que cuentan actualmente las compañías son los datos. Es habitual escuchar o leer la frase “Data is the new oil”. Esto se debe a la relevancia que han tomado en los últimos años a nivel productivo y a la pelea constante de las compañías por obtener más datos que mejoren sus procesos de negocio.
Estos datos pueden ser de multitud de características. Cada tipo de dato tiene una regulación diferente entre geografías, distintas maneras de tratar los datos dependiendo de su categoría (bien sean datos personales, personalmente identificables, datos sensibles o datos confidenciales). Estas dos características en conjunto con muchas otras propias de cada contexto, crean un entorno muy complejo para el tratamiento de datos y en ocasiones es posible que no sea tecnológicamente o regulatoriamente viable realizar el caso de uso deseado.
Este problema aparece a la hora de querer procesar esta información, ya sea como entrada de un sistema de machine learning o como punto de partida para cualquier procesamiento donde se obtenga valor de los datos. En este tipo de procesos es necesario hacer uso de herramientas o servicios de terceros que podrían llegar a tener acceso a los datos para poder dar el servicio y por lo tanto ser un riesgo para la privacidad de los mismos. La contrapartida a hacer uso de servicios de terceros pasa por hacer desarrollos propios que ponen en peligro la rentabilidad del caso de uso.
La criptografía es una de las técnicas más antiguas que permite transmitir información de manera segura, ocultando la información frente a terceros. Además de esto, permite realizar técnicas para mantener la privacidad y la protección de los datos.
A lo largo de este post, explicaremos cómo es posible procesar estos datos y qué nuevas soluciones nos brinda la criptografía para poder externalizar el procesado de los datos sin perder la confidencialidad y privacidad de los mismos desde tres técnicas criptográficas: criptografía homomórfica, computación multiparte segura y privacidad diferencial.
Estas tecnologías no han aparecido recientemente, sin embargo, no era posible su uso en tiempos razonables de cómputo. En los últimos años el estado del arte ha evolucionado a pasos agigantados, permitiendo procesar en tiempos de cómputos asumibles y con más variedad de operaciones matemáticas, algo que era muy limitante al inicio, permitiendo el entrenamiento y la inferencia de modelos de machine learning de forma cifrada.
Este nuevo paradigma permite procesar la información sin necesidad de descifrar los datos en estado de reposo, conservando en los resultados un nivel de calidad similar al que se conseguirían si se realizaran los procesos sobre esos mismos datos en claro. Todo ello favorece la externalización de este tipo de procesos a infraestructura ajena a la organización, ahorrando costes para la misma y manteniendo la privacidad de los datos.
La criptografía homomórfica es la rama de la criptografía que trata de realizar operaciones sobre textos cifrados, sin desvelar el texto plano original. Es considerado por muchos autores como el “Santo Grial de la criptografía”, puesto que permitiría realizar cálculos sobre los datos cifrados en una tercera parte sin necesidad de descifrar los datos en ningún momento.
El caso de uso más típico de la criptografía homomórfica es poder delegar cálculos en la nube sin que la nube sea consciente de qué datos se están evaluando.
El funcionamiento de un sistema de cifrado homomórfico funciona de la siguiente manera:
Este tipo de sistemas normalmente, disponen de tres tipos de claves:
La importancia de esta técnica de cifrado está en los casos de uso que permite que se empiecen a desarrollar de forma segura, manteniendo la privacidad y la confidencialidad. Entre ellos, los más relevantes implican la externalización de datos con garantía regulatoria, por ejemplo, un conjunto de casos de uso que merece la pena destacar es el de externalizar el entrenamiento y la inferencia de modelos de machine learning en los que tanto el modelo como los datos se procesan de manera cifrada.
Este tipo de técnicas ya han sido probadas con éxito en entornos bancarios, por ejemplo, a través de la colaboración de IBM Research con el Banco Bradesco para aplicar este tipo de esquemas de cifrado sobre datos financieros. Los resultados finales que se obtuvieron a través de los experimentos fueron que:
El sistema que propuso IBM Research cifra los datos de las transacciones en los servidores de la infraestructura del Banco Bradesco, que son externalizadas a un proveedor de nube pública o híbrida. Los datos de entrenamiento cifrados son la entrada del módulo que implementa el entrenamiento del modelo de forma homomórfica. El resultado es un modelo cifrado al que se le introducen transacciones cifradas como entrada. Todo el proceso se realiza sin descifrar los datos, por lo que la predicción se realizará sobre los propios datos cifrados y, al acabar el proceso, son enviadas de nuevo a la infraestructura del Banco para descifrar los resultados. Los detalles de la investigación se pueden encontrar en el artículo publicado en Real World Crypto 2020.
Este ejemplo pone de relieve que este tipo de técnicas han pasado de un plano teórico a uno práctico en el que se abren un sinfín de casos de uso en los que emplear la criptografía homomórfica, aunque sigue siendo necesario conocer los detalles de los esquemas subyacentes (existen esquemas homomórficos que realizan descifrados intermedios que podrían no ser válidos para garantizar el cumplimiento normativo de este tipo de datos), su nivel de seguridad y las operaciones disponibles. Estas limitaciones se siguen tratando de resolver, siendo un área de investigación muy activa en los últimos tiempos.
La computación multiparte segura (MPC, por sus siglas en inglés) permiten a un grupo de personas realizar un cálculo de forma conjunta sin descubrir los datos privados de cada participante. Los participantes acuerdan una función para computar y, después, emplean un protocolo MPC para computar conjuntamente con sus entradas secretas la salida de la función.
La computación multiparte segura posibilita aplicaciones preservando la privacidad donde múltiples partes que no confían entre sí y que disponen de datos privados que no quieren compartir con el resto de partes cooperan para computar una función común.
Una aplicación que permite la MPC es habilitar el machine learning seguro. La MPC se puede emplear tanto en la fase de entrenamiento como de inferencia en los sistemas de machine learning.
En la fase de entrenamiento, la MPC puede ser empleada para entrenar un modelo entre un grupo de partes usando la combinación de los datos de todas las partes, pero sin exponerlos al resto de partes. En la fase de inferencia, un cliente puede lanzar una petición a un servidor que contiene un modelo preentrenado, manteniendo la respuesta privada al servidor y el modelo al cliente. Las entradas para el protocolo MPC son el modelo privado del servidor y la petición privada del cliente, produciendo la predicción del modelo, que sólo puede ser descifrada por el cliente.
La mayor parte de los conjuntos de datos están formados por datos sensibles, por lo que hacer análisis de datos con ellos no debería filtrar información sensible de ninguno de los individuos del conjunto de datos.
Con el uso de la privacidad diferencial es posible entrenar modelos de machine learning sin poner en riesgo la privacidad de los conjuntos de datos. El aprendizaje de modelos mediante procesos de privacidad diferencial provee garantías de privacidad demostrables y mitiga el riesgo de exponer datos sensibles. Un modelo entrenado con privacidad diferencial no debería verse afectado por un sólo ejemplo ni por un grupo pequeño de ejemplos de entrenamiento, además, esta propiedad permite una mejor generalización y evita el sobreentrenamiento de los mismos.
La privacidad diferencial nace para proveer una definición formal de privacidad y mejorar anteriores propuestas. Informalmente, la privacidad diferencial establece que dos bases de datos (o conjuntos de datos) que difieran en un individuo, deberían ser indistinguibles a la hora de realizar un análisis de los datos. De esta manera, los resultados del análisis no deberían depender de un individuo en concreto.
A los algoritmos que permiten transformar datos en datos diferencialmente privados se les llama mecanismos. Entre los más conocidos se encuentran el mecanismo de Laplace y el mecanismo exponencial. El primero consiste en introducir cierto ruido procedente de una distribución de Laplace al resultado de una consulta a una base de datos.
La propiedad más relevante de los mecanismos de privacidad diferencial es el teorema de composición, que permite aplicar distintos mecanismos de forma secuencial o en paralelo, garantizando que la privacidad diferencial se sigue conservando.
Estas tecnologías de las que venimos hablando hoy son aún materia de estudio y la realidad del desarrollo teórico aún no se ha podido implementar de una forma generalista, lo que quiere decir que las herramientas que implementan estas tecnologías aún tienen una elevada curva de aprendizaje y el uso de estas medidas de seguridad sobre la privacidad de los datos requiere un conocimiento muy en detalle de las capacidades individuales de cada librería.
Cada una de estas tecnologías no tiene una única aproximación a cómo implementar librerías que traccionen los casos de uso de la forma más óptima posible y de momento ninguna opción disponible en el entorno académico proporciona soluciones exentas de excepciones y consideraciones en cuanto a la seguridad de los datos en base al contexto en que se encuentran.
La seguridad que estas librerías proporcionan a la privacidad de los datos a día de hoy es muy dependiente del contexto de seguridad de los propios datos, de la cantidad de datos a proteger y de la estructura que modela los datos.
Usando como referencia las tecnologías que hemos comentado anteriormente, hemos probado las herramientas open source del mercado que implementan las funcionalidades descritas. Debido a la extensión de dicho estudio, hemos querido, al menos, referenciar una herramienta dentro de cada una de las tecnologías anteriores: criptografía homomórfica, computación multiparte y privacidad diferencial. Las herramientas que queremos destacar tras nuestras pruebas son: TF SEAL y TenSeal, CrypTFlow y DiffPrivLib.
TF SEAL y TenSeal son las librerías más destacadas que implementan criptografía homomórfica para trabajar sobre modelos de machine learning cifrados.
TF SEAL, es un puente entreMicrosoft SEAL, una biblioteca de cifrado homomórfico de última generación, y TensorFlow, uno de los frameworks de _machine learning_ más populares. Esta librería forma parte deTF Encrypted cuyo objetivo consiste en construir una interfaz para el _machine learning_ sobre datos cifrados.La instalación es compleja debido a que se requiere una versión de Tensorflow compilada en C++ 17 para que sea compatible con SEAL, escrito en ese lenguaje. También es requisito fundamental usar la versión 3.7 de Python para que la librería pueda funcionar.
TenSEAL es una librería similar TF SEAL, que permite trabajar sobre tensores cifrados usando SEAL. Esta librería emplea la última versión de SEAL, haciendo que incorpore las últimas funcionalidades/mejoras.La librería se encuentra implementada en Python y se puede instalar directamente desde pip. Implementa los dos esquemas disponibles en SEAL.
No dispone de mucha documentación, sólo de un pequeño tutorial que explica qué es la criptografía homomórfica y cómo operar con tensores de forma cifrada. La librería está en constante desarrollo, por lo que es esperable que en no mucho tiempo haya más documentación disponible.
CrypTFlow es un sistema end-to-end para realizar inferencia segura sobre Tensorflow. Está compuesto de tres componentes:
Con todos estos componentes, son capaces de ejecutar por primera vez una inferencia segura en el conjunto de datos de ImageNet con los modelos pre-entrenados de las siguientes redes neuronales profundas: ResNet-50, DenseNet-121 y SqueezeNet.
Cada uno de estos componentes es independiente y usable de forma independiente, pero combinados hacen CrypTFlow un sistema potente y seguro escrito en TensorFlow.
El funcionamiento de CryptTFlow es el siguiente: dada una porción de código escrita en Tensorflow, Athos genera el grafo de computación del código y los metadatos para ayudar a calcular las dimensiones de los tensores. A continuación, el grafo de computación es compilado a un lenguaje intermedio de alto nivel llamado HLIL. Por último, este código generado se puede utilizar por distintos backends como ABY (para cómputos entre 2 partes), Porthos (para 3 partes semihonestos) y Aramis (para cómputos frente a adversarios maliciosos).
Es la librería de privacidad diferencial de IBM. Se ha liberado como código libre, disponible en GitHub.
Funciona como envoltorio sobre scikit-learn, y su integración con esta librería es inmediata. La librería se encuentra dividida en tres módulos:
Además, permite el entrenamiento de modelos de machine learning. En la siguiente imagen, se ve la comparación del entrenamiento de un modelo usando mecanismos de privacidad diferencial y sin ellos.
Como hemos visto a lo largo del post existen tres áreas de la criptografía que permitirían la externalización de datos manteniendo y protegiendo su privacidad.
En la actualidad existen diferentes herramientas y trabajos sobre cada una de estas áreas, herramientas basadas en estudios y pruebas de concepto que no son adecuadas para usar en entornos productivos, además de haber sido probadas con conjuntos de datos típicos en investigación como el MNIST pero no en entornos reales. Por lo tanto, sigue siendo un contexto a explorar y ver su continuidad en el tiempo para conocer el gran número de herramientas emergentes. Las herramientas más potentes en este ámbito son las que implementan todas estas técnicas de forma conjunta, que veremos en un próximo post.
Fuente Imagen destacada: Unsplash