Computación segura bipartita

La Computación Segura Bipartita o 2PC (siglas del inglés Secure Two-Party Computation) es un subconjunto de la Computación segura multipartita, cuyo objetivo es crear protocolos que permitan a dos partes computar de manera conjunta una función arbitraria de sus entradas sin compartir entre ellas el valor de sus entradas.

Es frecuente que la computación segura bipartita involucre funciones criptográficas dando lugar a protocolos criptográficos bipartitos

Uno de los ejemplos mejor conocidos de 2PC es el Problema de los Millonarios, en el cual dos partes, A y B, son millonarios que quieren determinar quien es el más rico sin revelar el patrimonio de cada uno. Formalmente A tiene una riqueza de a {\displaystyle a} , B tiene una riqueza de b {\displaystyle b} , y se quiere determinar si es verdad que a b {\displaystyle a\geq b} sin revelar los valores de a {\displaystyle a} o b {\displaystyle b} .[1]

Un problema de contexto similar (aunque su propuesta es un poco más acotada que la de Yao) fue planteado por Manuel Blum,[2]​ donde se desea lanzar una moneda a través de un teléfono.

Formalización

El problema consiste en dos participantes Alice y Bob tienen algún dato privado, x 1 {\displaystyle x_{1}} y x 2 {\displaystyle x_{2}} , respectivamente. Los participantes desean calcular el valor de una función pública F {\displaystyle F} evaluándola en los puntos x 1 {\displaystyle x_{1}} y x 2 {\displaystyle x_{2}} . Un protocolo 2PC se considera seguro si ninguno de los dos participantes puede aprender alguna información adicional del dato del otro, además de la que pueda deducir del resultado de la función.

En su propuesta, Andrew C. Yao plantea dos escenarios posibles bajo los cuales se puede ejecutar un protocolo para 2PC:

  • Participantes honestos, pero curiosos
  • Participantes potencialmente deshonestos.

Cabe mencionar que el problema para participantes potencialmente deshonestos no fue completamente solucionado hasta el año 2007, cuando Yehuda Lindell y Benny Pinkas plantean un protocolo que es seguro antes este tipo de participantes.

Ejemplos

Protocolo para el Problema de los Millonarios

El problema de los millonarios, inicialmente planteado por Yao al presentar el tema de Computación Bipartita Segura, consiste en lo siguiente: Alice y Bob son dos millonarios, quienes poseen i {\displaystyle i} y j {\displaystyle j} millones respectivamente y desean saber quién posee la mayor fortuna, sin revelar cuánto dinero tiene cada uno. El protocolo propuesto para solucionar este problema en particular es el siguiente:

Sean i {\displaystyle i} y j {\displaystyle j} los valores secretos de Alice y Bob respectivamente, con 1 < i , j < 10 {\displaystyle 1<i,j<10} . Sean E α {\displaystyle E_{\alpha }} y D α {\displaystyle D_{\alpha }} dos funciones de cifrado y descifrado (en un sistema de cifrado simétrico) bajo la clave α {\displaystyle \alpha } , respectivamente.

  • Bob escoge aleatoreamente un entero x {\displaystyle x} de N {\displaystyle N} bits, y calcula privadamente el valor k = E α ( x ) {\displaystyle k=E_{\alpha }(x)} .
  • Bob envía a Alice el valor k j + 1 {\displaystyle k-j+1} .
  • Alice calcula privadamente los valores y u = D α ( k j + u ) {\displaystyle y_{u}=D_{\alpha }(k-j+u)} para u = 1..10 {\displaystyle u=1..10} .
  • Alice genera aleatoreamente un primo de N {\displaystyle N} bits, y calcula los valores z u = y u ( m o d   p ) {\displaystyle z_{u}=y_{u}(mod\ p)} para cada u {\displaystyle u} . Si todos los z u {\displaystyle z_{u}} difieren por al menos 2 (en el sentido de la aritmética modular), parar; de otro modo, repetir hasta que los z u {\displaystyle z_{u}} difieran todos en al menos 2. Sean p {\displaystyle p} y z u {\displaystyle z_{u}} los valores finales.
  • Alice envía el primo p {\displaystyle p} y los siguientes 10 números a Bob: z 1 , z 2 , . . . , z i , z i + 1 + 1 , z i + 2 + 1 , . . . , z 10 + 1 {\displaystyle z_{1},z_{2},...,z_{i},z_{i+1+1},z_{i+2+1},...,z_{10+1}} . La suma siempre es módulo p {\displaystyle p} .
  • Bob mira el j {\displaystyle j} -ésimo número de la secuencia enviada por Alice, y decide que i j {\displaystyle i\geq j} si es igual a x ( m o d   p ) {\displaystyle x(mod\ p)} , y que i j {\displaystyle i\leq j} de otro modo.
  • Bob le comunica el resultado a Alice.

Protocolo para lanzamiento de una moneda

La situación es la siguiente: Alice y Bob están divorciados y viven en ciudades distantes, por lo que deben decidir quin se queda con el auto a través del teléfono. Para esto, Alice lanza una moneda al aire y Bob debe adivinar si salió cara o sello, pero Bob debe tener una certeza de que Alice no manipula el resultado a su favor. El protocolo planteado originalmente por Blum es como sigue:

  • Bob elige aleatoreamente dos primos p 1 {\displaystyle p_{1}} y p 2 {\displaystyle p_{2}} , congruentes con 3 ( m o d   4 ) {\displaystyle 3(mod\ 4)} . Calcula n = p 1 p 2 {\displaystyle n=p_{1}p_{2}} y se lo envía a Alice.
  • Alice comprueba que n = 1 ( m o d   4 ) {\displaystyle n=1(mod\ 4)} y que para algún x {\displaystyle x} existe y tal que x 2 = y 2 ( m o d   n ) {\displaystyle x^{2}=y^{2}(mod\ n)} .
  • Alice elige valores aleatorios x i {\displaystyle x_{i}} y envía a Bob sus cuadrados ( m o d   n ) {\displaystyle (mod\ n)} junto con n {\displaystyle n} .
  • Bob comprueba n {\displaystyle n} , y envía a Alice n {\displaystyle n} , x 2 ( m o d   n ) {\displaystyle x^{2}(mod\ n)} y b i {\displaystyle b_{i}} .
  • Alice comprueba n {\displaystyle n} y x 2 ( m o d   n ) {\displaystyle x^{2}(mod\ n)} , y determina la secuencia aleatoria: 1 si Bob acertó sobre x i {\displaystyle x_{i}} , y −1 en otro caso.
  • Alice envía a Bob los x i {\displaystyle x_{i}} .
  • Bob comprueba los cuadrados.

Protocolo para lanzar una moneda basado en Hash

Posteriormente se han creado diversas soluciones más eficientes y más seguras para este problema, entre ellas destaca la utilización de funciones de Hash para ocultar el resultado. Asumiendo la existencia de una función unidireccional H, el protocolo es el siguiente:

  • Alice y Bob acuerdan una función H {\displaystyle H} .
  • Alice elige un entero x {\displaystyle x} secretamente (lanzamiento de la moneda), y calcula H ( x ) {\displaystyle H(x)} y se lo envía a Bob.
  • Bob dice a Alice si cree que x {\displaystyle x} es par o impar (apuesta de Bob).
  • Alice comunica a Bob si acertó o no, y lo convence enviándole x {\displaystyle x} (Bob puede calcular entonces H ( x ) {\displaystyle H(x)} , verificando que sea igual al que recibió).

Solución a cualquier problema de 2PC

En 1986, Andrew C. Yao propone una solución[3]​ para el problema de 2PC para calcular cualquier función F. Para esto crea un circuito, representación gráfica de la función booleana, y uno de los participantes se encarga de hacerlo ilegible, es decir, codifica cada una de las entradas a las compuertas del circuito con una máscara que solo ella conoce y que además tiene su entrada pre-cargada. La forma de codificar estas entradas es cifrando los valores posibles bajo diversas claves solo conocidas por el participante que lo hace. El protocolo completo funciona de la siguiente forma:

  • Alice construye un circuito booleano ilegible, el que contiene tablas para cada compuerta codificadas con una máscara y con su entrada pre-llenada. Luego le envía el circuito a Bob.
  • Bob le pide a Alice la codificación de los valores que debe ingresar a la entrada principal mediante transferencia inconsciente.
  • Bob ha recibido un circuito ilegible y la correspondencia de su entrada con los valores codificados de la tabla. Corre el circuito y obtiene el resultado de la función que representa el circuito.
  • Bob le envía el resultado a Alice.

Otras propuestas

La gran mayoría de los protocolos desarrollados a la fecha utilizan como base la propuesta de Yao de circuitos booleanos. El año 2004 un grupo de investigadores desarrollan Fairplay,[4]​ una optimización del protocolo de Yao, mejorando su rendimiento. En el mismo 2004, Y. Lindell y B. Pinkas[5]​ desarrollan una prueba de seguridad para el protocolo de Yao para adversarios maliciosos, para finalmente el año 2007 implementar un protocolo eficiente.[6]​ Finalmente en 2007, S. Jarecki y V. Shmatikov plantean una alternativa para resolver 2PC, que consiste en enviar los valores de entrada usando Compromiso de Bits.

Referencias

  1. Andrew Chi-Chih Yao: Protocols for Secure Computations (Extended Abstract) FOCS 1982: 160-164
  2. Manuel Blum, Coin Flipping by Telephone, Proceedings of CRYPTO 1981, pp. 11-15, 1981, reprinted in SIGACT News vol. 15, pp. 23-27, 1983.
  3. A. Yao. How to Generate and Exchange Secrets. In 27th FOCS, pages 162--167, 1986. 21
  4. D. Malkhi, N. Nisan, B. Pinkas and Y. Sella. Fairplay - A Secure Two-Party Computation System. Proceedings of Usenix Security '2004, August 9-13, 2004.
  5. Y. Lindell and B. Pinkas. A Proof of Security of Yao's Protocol for Two-Party Computation. To appear in the Journal of Cryptology.
  6. Y. Lindell and B. Pinkas. An efficient protocol for secure two-party computation in the presence of malicious adversaries. In Proc. EUROCRYPT, 2007

Enlaces externos

  • Zero Knowledge Proof (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). Artículo ilustrativo de lo que es una Demostración de Nula Divulgación.
  • Solución al problema de los Millonarios Descripción del protocolo de Yao (en inglés).
  • The Fairplay Project — Incluye un paquete de software para Computación Bipartita Segura (en inglés).
Control de autoridades
  • Proyectos Wikimedia
  • Wd Datos: Q7444883
  • Wd Datos: Q7444883