Piedra, papel o tijera y otras formas de comprometerte ahora y revelar el compromiso luego

Gonzalo Álvarez Marañón    10 noviembre, 2020
Piedra, papel o tijera y otras formas de comprometerte ahora y revelar el compromiso luego

¿Alguna vez has jugado a piedra, papel o tijera? Apuesto a que sí. Bien, vamos a rizar el rizo: ¿cómo jugarías a través del teléfono? Una cosa está clara: el primero en revelar su elección pierde seguro. Si tú gritas «¡piedra!», el otro dirá «papel» y así perderás una y otra vez. La cuestión es: ¿cómo conseguir que los dos os comprometáis a un valor sin revelárselo a la otra parte?

En la vida real se usan sobres de papel y cajas para comprometerse con un valor sin revelarlo. Por ejemplo, un juez de un jurado escribe su veredicto en un papel y lo mete en un sobre cerrado. Cuando se abren los sobres, ya no puede echarse atrás. ¿Podrá la criptografía crear un sobre o caja digital, incluso más seguro? ¡Qué pregunta, por supuesto que sí! Veamos cómo jugar a piedra, papel o tijera por teléfono gracias a la criptografía.

Creando esquemas de compromiso mediante protocolos criptográficos

En criptografía, un esquema de compromiso permite comprometerse a un valor que permanecerá oculto hasta el momento en que deba revelarse y ya no habrá marcha atrás. Usando la analogía de la caja: guardas tu mensaje en una caja cerrada con llave y le entregas la caja a otra persona. Sin la llave, no puede leer tu mensaje. Ni tú puedes cambiarlo, porque la caja está en su poder. Cuando le entregues la llave, abrirá la caja y, entonces sí, podrá leer el mensaje. Como ves con este sencillo ejemplo, un esquema de compromiso consta de dos fases:

  1. La fase de compromiso: guardas el mensaje bajo llave en una caja y envías la caja.
  2. La fase de revelación: el destinatario de la caja la abre con tu llave y lee el mensaje.

Matemáticamente, este esquema puede representarse de la siguiente manera:

c = C (r, m)

Es decir, el compromiso c es el resultado de aplicar una función C pública a un valor aleatorio r y a un mensaje m. Cuando posteriormente el emisor revele los valores de r y m, el receptor podrá recalcular c y, si coincide con el original, sabrá que no ha habido trampa ni cartón.

Para considerarlo seguro, todo esquema de compromiso deberá satisfacer las siguientes dos propiedades:

  1. Secreto (u ocultación): al final de la primera fase, el receptor no obtiene ninguna información sobre el valor comprometido. Este requisito debe satisfacerse incluso si el receptor hace trampas. La ocultación protege los intereses del emisor.
  2. Sin ambigüedad (o vinculación): dado el mensaje comprometido en la primera fase, el receptor encontrará ese mismo valor en la segunda fase tras la «apertura» legal del compromiso. Este requisito debe cumplirse incluso si el emisor hace trampas. La vinculación protege los intereses del receptor.

Una forma sencilla de realizar este esquema digitalmente es usando funciones hash criptográficamente seguras como función de compromiso C. Imagina que nuestros viejos amigos Alice y Bob quieren jugar a piedra, papel o tijera por teléfono. Pueden enviarse la siguiente información usando la función hash genérica H y un valor aleatorio rA, como se muestra en la figura:

Esquema de compromiso

Al final del protocolo, Bob necesita verificar que el valor del hash hA enviado por Alice es igual al valor H ( rA || «piedra» ) calculado por él mismo. Si ambos valores concuerdan, sabe que Alice no ha hecho trampa. El resultado de este protocolo es que Alice pierde el juego porque el papel envuelve a la piedra.

Sigamos el protocolo anterior desde la perspectiva de Alice. Ella primero se compromete con el valor «piedra» enviando a Bob el valor del hash hA. Por su parte, Bob no podrá determinar todavía que Alice se ha comprometido con dicho valor, ya que Bob no conoce el valor aleatorio rA utilizado y Bob es incapaz de invertir la función hash. El hecho de que Bob no pueda determinar qué valor ha sido comprometido es la propiedad de “secreto” (u “ocultación”) del esquema de compromiso.

Tan pronto como Bob envía su propio valor «papel» a Alice, ella sabe que ha perdido, pero es incapaz de hacer trampa, ya que para engañar a Bob tendría que inventar un valor diferente para el valor aleatorio rA, digamos rA’, que cumpla H( rA’ || «tijera» ) = H( rA || «piedra» ). Pero este fraude implicaría que Alice puede encontrar colisiones en la función hash, lo cual se considera (computacionalmente) imposible (técnicamente, se requiere que la función hash sea resistente a la segunda preimagen). Esta es la propiedad de “sin ambigüedad” (o “vinculación”) del esquema de compromiso: que Alice no pueda cambiar de opinión después de la fase de revelación.

El uso de hashes como función de compromiso constituye la forma más sencilla de implementar un esquema de compromiso. Sin embargo, en aplicaciones reales, puede requerirse que el compromiso exhiba algunas propiedades especiales, como el homomorfismo, que exigen funciones matemáticas más sofisticadas, basadas en variantes de Diffie-Hellman, ElGamal o Schnorr. Uno de los ejemplos más conocidos es el compromiso de Pedersen, muy simple y con la siguiente propiedad de gran utilidad en muchas situaciones: si has comprometido dos mensajes m1 y m2 a los valores c1 y c2, respectivamente, entonces el producto de los dos compromisos, c1 × c2, es igual al compromiso de la suma de los mensaje m1 + m2.

Aplicaciones de los esquemas de compromiso

Los esquemas de compromiso están viendo nuevas aplicaciones gracias al desarrollo reciente de novedosos protocolos criptográficos:

  • Al igual que hemos empezado el artículo jugando a piedra, papel o tijera por teléfono, podríamos utilizar versiones de los esquemas de compromiso para cualquier otro juego de azar jugado remotamente: desde tirar una moneda al aire hasta jugar al póker mental y otros juegos de azar.  
  • Otra aplicación de los esquemas de compromiso junto con las pruebas de conocimiento nulo es la construcción de bases de datos de conocimiento nulo, en las que se pueden hacer consultas que solo revelan si una propiedad consultada es o no verdadera, como, por ejemplo, si una persona es mayor de edad o si tiene saldo suficiente en su cuenta, pero sin revelar ni su edad ni su saldo. En esta aplicación se utiliza un esquema especial bautizado como compromiso mercurial.
  • Los esquemas de compromiso constituyen asimismo una pieza clave de un esquema de reparto de secretos verificable: la distribución del secreto entre varios individuos va acompañada de compromisos de las partes del secreto que posee cada uno. Los compromisos no revelan nada que pueda ayudar a una parte deshonesta, pero tras la revelación de los compromisos de las partes cada individuo puede verificar si las partes son correctas.
  • Los esquemas de compromiso también se están utilizando en las subastas óptimas y creíbles, en las que el pujador debe comprometerse con el valor de una puja sin posibilidad de echarse hacia atrás.
  • Polyswarm utiliza esquemas de compromiso junto con contratos inteligentes en Ethereum. Polyswarm es un mercado descentralizado de inteligencia de amenazas en el que se incentiva la detección de amenazas poniendo dinero en juego: la moneda virtual Nectar (NCT). Los motores de los distintos fabricantes pueden apostar dinero en función de la confianza en sus propias detecciones. Comprometen su veredicto calculando el hash Keccak sobre la muestra de potencial malware junto con un número aleatorio. Este hash representa su compromiso sobre el artefacto. Después de que un motor se haya pronunciado, ya no hay marcha atrás. Una vez se ha cerrado la ventana de compromiso, durante la cual los motores podían hacer sus predicciones, éstos revelan su veredicto original y su número aleatorio. Los que hicieron evaluaciones correctas son recompensados, mientras que los que fallaron en su predicción pierden sus apuestas. De esta manera, Polyswarm recompensa la participación honesta en el mercado, incentivando la calidad y la detección de malware único.

Subastas en línea, juegos de azar por Internet, firma de contratos inteligentes, búsqueda segura en bases de datos, computación multiparte segura, pruebas de conocimiento nulo, … existen multitud de aplicaciones que requieren que la información se oculte de forma segura hasta el momento en que puede ser revelada. A medida que crezca el interés por los entornos de computación pública, como blockchain, los esquemas de compromiso seguirán aportando confianza e impulsarán el florecimiento de nuevas tecnologías seguras.

Deja un comentario

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