¡Bienvenido! ¿Eres nuevo en Zcash?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

Idioma

Pay-to-sudoku Revisitado

Sean Bowe | Jun 08, 2017

El año pasado, creé un proyecto llamado pay-to-sudoku que fue la primera implementación mundial de un pago contingente de conocimiento-cero (ZKCP, por sus siglas en inglés). Los ZKCP, inventados en 2011 por Gregory Maxwell, consisten en un ingenioso truco criptográfico que permite a las personas intercambiar información y valores atómicamente sobre un blockchain. ¡Gregory tuvo también la amabilidad de ayudarme a demostrarlo a los participantes del foro internacional Financial Cryptography 2016!

En pay-to-sudoku, una persona (el "comprador") puede pagar a otra persona (el "vendedor") para que éste resuelva una partida de Sudoku. El vendedor resuelve la partida y encripta la solución con una clave que es luego hasheada. Usando una prueba de conocimiento-cero ―en este caso, un zk-SNARK que utiliza libsnark― el vendedor construye una prueba de que posee una solución cifrada para el sudoku, y que el conocimiento de un determinado hash SHA256 permitirá descifrarla.

El comprador procede a realizar un pago en el blockchain que permite al vendedor amortizar ciertos fondos a cambio de revelar la pre-imagen del SHA256 (la clave). Cuando el vendedor haga esto, el comprador podrá descifrarla.

Para lograr esto con un zk-SNARK, el comprador es responsable de construir una cadena de referencia común (CRS) que permite al vendedor evaluar una prueba. Campanelli, Gennaro, Goldfeder y Nizzardo acaban de publicar un nuevo libro blanco que identifica una vulnerabilidad en la forma en que pay-to-sudoku utiliza la construcción PGHR implementada en libsnark. En particular, supone que el CRS tiene una estructura algebraica correcta, y como resultado, el comprador tiene la oportunidad de violar el conocimiento-cero para obtener información sobre la solución sin pagar por ella.

Tengamos presente que los parámetros públicos de Zcash no son vulnerables a este tipo de acción malintencionada porque la transcripción de computaciones multi-pares garantiza que el CRS sea correcto, incluso si todos los participantes de la computación multi-pares fueran deshonestos. Esto también es señalado en el libro blanco.

Hay varios pasos a tomar para mitigar esta vulnerabilidad cuando se utiliza un CRS de terceros. Así como lo hicimos con los parámetros públicos de Zcash, basta con asegurar que los parámetros se construyan correctamente usando un protocolo de computación multi-pares. No permitir una estructura incorrecta en el CRS es suficiente para defenderse de los ataques particulares descritos en el documento. Como precaución adicional, ¡verifica la prueba después de haberla construido!

El libro blanco propone adicionalmente otras ideas interesantes, como por ejemplo una extensión del concepto de ZKCP a la compra de servicios digitales en lugar de productos digitales (como las soluciones de sudoku).

ZKCP, cryptography, zkSNARKs | Ver todos los tags