Comprender las cadenas de bloques de conocimiento cero

Cómo demostrar que sabes algo sin mostrar lo que sabes

El viernes pasado vio el lanzamiento de Zcash, una nueva blockchain pública y criptomonedas asociadas que atrajeron mucha atención. Por ahora, hay cientos de criptomonedas, por lo que cualquier participante joven en ciernes necesita un diferenciador serio para superar la refriega. En el caso de Zcash, esto es fácil: los usuarios de Zcash pueden enviarse dinero entre ellos en absoluta privacidad. Para una criptomoneda basada en una cadena de bloques, este es un logro técnico notable. (Aunque cabe señalar que otras cadenas como monero y Dash apunte al mismo objetivo utilizando medios más simples pero menos efectivos).

Como yo he escrito sobre antes, en un sentido general, las cadenas de bloques (ya sean públicas o privadas) representan una compensación en la que la desintermediación se obtiene a costa de la confidencialidad. Las cadenas de bloques proporcionan una forma nueva e inteligente para que los participantes compartan una base de datos de forma segura, incluso si no confían entre sí, sin necesidad de un intermediario central. Pero hay un precio que pagar por esta descentralización de igual a igual: el "nodo" que pertenece a cada participante en la cadena debe verificar cada transacción por sí mismo, y esto a su vez significa que ve lo que todos los demás están haciendo.

Dos formas de encadenar

En el caso de las cadenas de bloques públicas y las criptomonedas, la base de datos compartida sirve principalmente como un registro de quién controla (y de manera efectiva posee) la cantidad de criptomonedas, con una adición opcional de “metadatos” (bitcoin) o lógica contractual (Ethereum) en la parte superior. Por el contrario, en las cadenas de bloques privadas, tendemos a ver dos clases principales de casos de uso: (a) la propiedad y transferencia de activos externos representados por tokens en la cadena, y (b) aplicaciones más generales relacionadas con el almacenamiento y la recuperación de datos. Por ejemplo, en nuestro propio producto MultiChain, estas dos clases de casos de uso se implementan utilizando activos nativos y flujos de datos, respectivamente.

Cuando se trata del almacenamiento general de datos, la cadena de bloques proporciona una serie de servicios: probar de dónde proviene un dato, sellarlo con el tiempo y notarizarlo de manera inmutable para evitar modificaciones por parte de una minoría de participantes de la cadena de bloques. Pero la cadena de bloques no necesita tener nada que decir sobre los datos en sí: cada aplicación puede decidir qué significa un dato y si es válido. Los datos erróneos simplemente se pueden ignorar a nivel de la aplicación, sin causar daño al estado de la cadena de bloques en su conjunto.

Por el contrario, si las cadenas de bloques transfieren directamente activos tokenizados, deben aplicar reglas internas con respecto a la validez de esas transferencias. En pocas palabras, un evento como “Alice le paga a Bob un euro” solo será aprobado por la cadena si Alice tiene al menos un euro a su nombre. Si bien los diferentes tipos de blockchain expresan esta regla de diferentes maneras (restricciones de transacción de bitcoin frente a contratos inteligentes de Ethereum), todos comparten la propiedad de que las finanzas de Alice deben ser conocidas por todos los nodos de la cadena. Esto les permite evaluar si su pago es válido, saber cuánto tiene Bob como resultado y evaluar cualquier pago futuro de Bob a Charlie y otros.

En este punto, los lectores familiarizados con blockchains señalarán que Alice y Bob no están directamente identificados por su nombre en una cadena. En cambio, cada uno realiza transacciones bajo una o más "direcciones", que son largas cadenas alfanuméricas de galimatías que no guardan relación con sus identidades del mundo real. Si bien esto es cierto, en realidad no ayuda mucho, porque hay varias formas de inferir la conexión entre los usuarios y sus direcciones.

Primero y más simple, para poder realizar transacciones con alguien en una cadena de bloques, necesito saber al menos una de sus direcciones. Entonces, si les envío algo de dinero, puedo ver a dónde va ese dinero después, y si me pagan, puedo ver de dónde vino. En segundo lugar, si sé algo sobre un participante del mundo real (por ejemplo, qué tipos de activos negocian a qué hora del día), puedo buscar la actividad de la cadena en busca de patrones correspondientes y luego inferir su dirección con un alto nivel de confianza. Por último, una vez que conozco una dirección de un participante, a menudo puedo averiguar qué otras direcciones son de su propiedad y utilizan, mediante el seguimiento del flujo total de fondos en la cadena. Si bien esto no es trivial de lograr, ciertamente es posible con la suficiente motivación, como lo demuestran empresas como Cadena de análisis y Skry que se ganan la vida proporcionando este tipo de "análisis de red" para bitcoin.

¿Salvado por encriptación?

El contraste entre activos y datos toca directamente la cuestión del cifrado. En el caso del almacenamiento de datos generales en una cadena de bloques, podemos cifrar la información almacenada, mientras seguimos obteniendo los beneficios de la procedencia de los datos, el sello de tiempo y la inmutabilidad. Ninguna de estas funciones necesita información sobre los datos en sí. Por lo tanto, es perfectamente válido que dos participantes utilicen una cadena de bloques para almacenar información que solo ellos pueden leer, mientras se benefician de que otros participantes se comprometan con el origen de esos datos y su existencia en un momento determinado.

Por el contrario, el cifrado de esta naturaleza no puede ser utilizado por transacciones que representan transferencias de activos tokenizados. Si Alice y Bob encriptasen su transacción, los activos en cuestión no podrían ser utilizados de manera segura por ningún otro participante de la cadena, porque nadie más sabría dónde están realmente los activos. Los activos dejarían de tener un significado colectivo en la cadena, lo que destruye todo el punto.

En el sector financiero, este conflicto entre la privacidad y la liquidez es la dificultad principal de usar blockchains para transferir activos, frustrando las esperanzas de muchas startups en el espacio. Mientras que la técnico La viabilidad de mover activos a través de una cadena de bloques ha sido probada por innumerables proyectos piloto, en la práctica esto hace que se revele demasiada actividad entre pares. La filtración de información es una desventaja en el mejor de los casos, pero es un verdadero espectáculo cuando los participantes de una cadena están en una competencia feroz, o donde la regulación lo prohíbe.

Como resultado, muchas startups destacadas de “contabilidad distribuida” se han alejado de la idea de liquidación en cadena, volviendo a transacciones bilaterales más tradicionales que están encriptadas y certificadas ante notario en una cadena de bloques bajo el paradigma de “almacenamiento general de datos”. Esto puede evitar disputas y duplicar gastos, pero la solución en sí permanece externa a la cadena. Si bien la cadena de bloques sigue proporcionando algún valor, es menos transformadora de lo que se esperaba originalmente. Sin duda, ha habido más de unas cuantas reuniones enrojecidas entre las nuevas empresas y sus inversores.

Y, sin embargo, después de toda la decepción, la salvación puede estar finalmente a la mano. Ingrese la cadena de bloques de conocimiento cero.

Introducir conocimiento cero

Antes de discutir este nuevo tipo de blockchain, es útil comprender el principio de conocimiento cero en sí. En un sentido general, una prueba de conocimiento cero es aquella que demuestra la verdad de una determinada declaración, sin revelar ninguna información adicional más allá de lo que está tratando de probar.

Para tomar un ejemplo, digamos que tengo un amigo daltónico que tiene dos bolígrafos, que son idénticos excepto que uno es verde y el otro es azul. Mi amiga no puede distinguir entre ellos y quiero convencerla de que son realmente diferentes. Por supuesto, no puedo hacer esto simplemente diciéndole los colores, porque ella no puede evaluar si estoy mintiendo o no.

¿Entonces Que puedo hacer? (¿Por qué no te tomas un minuto y tratas de resolver la respuesta tú mismo ...?) Bueno, puedo pedirle que tome una hoja de papel y dibuje dos líneas en otra habitación. Al hacer esto, puede decidir libremente si usar el mismo bolígrafo para ambas líneas, o un bolígrafo para cada una. Desde su perspectiva, el resultado se ve igual en ambos sentidos. Luego regresa con el papel y le digo si usó uno o dos bolígrafos. Por supuesto, si las plumas fueran del mismo color, no tendría forma de saberlo. Entonces, el hecho de hacerlo bien demuestra que son diferentes.

Bueno, no del todo. Hay un problema con esta lógica. Incluso si los bolígrafos fueran idénticos, todavía tendría un 50% de posibilidades de dar la respuesta correcta, porque solo hay dos posibilidades (ella usó uno o dos bolígrafos). Así que una conjetura afortunada no prueba nada en absoluto. Para fortalecer mi caso, el juego debe jugarse en varias rondas. Después de cada ronda, mis posibilidades de acertar constantemente se reducen a la mitad. Entonces, con 5 rondas, tengo 1 en 32 posibilidades de fingir con éxito. Con 10 rondas, es 1 en 1024, y con 20 rondas, 1 en 1048576, en otras palabras, una en un millón. Dependiendo del nivel relativo de aburrimiento y sospecha de mi amiga, ella puede alcanzar cualquier nivel probabilístico de prueba que desee, aunque nunca con absoluta certeza.

Trae los gruñidos

Las pruebas de conocimiento cero en blockchains aplican un principio similar, aunque, por supuesto, no se tratan del color de los bolígrafos. Más bien, pretenden probar la afirmación "esta transferencia de activos es válida", sin revelar nada importante sobre la transferencia en sí. Zcash utiliza una técnica relativamente nueva para pruebas de conocimiento cero llamada zk-SNARKs, la explicación completa de los cuales está (para decirlo suavemente) más allá del alcance de esta pieza. Pero la idea básica es esta: cualquier condición computacional puede ser representada por un circuito aritmético, que toma algunos datos como entrada y da una respuesta de "verdadero" o "falso" en respuesta. Un zk-SNARK usa un modelo de este circuito para permitirme probar, con cualquier grado de certeza deseado, que poseo una entrada que da una respuesta verdadera, sin revelar la entrada en sí. Filosóficamente al menos, esto es como probar que dos bolígrafos son de diferentes colores, sin revelar cuáles son esos colores.

Un zk-SNARK utiliza un pequeño truco para evitar la interactividad que es típica de las pruebas de conocimiento cero, en las que una parte escéptica presenta repetidamente un desafío al que hace una afirmación. En el caso de nuestros bolígrafos, este desafío es la elección de mi amigo entre usar uno o dos bolígrafos en cada ronda. Este tipo de interactividad no es factible en una cadena de bloques porque no hay una parte central confiable para establecer los desafíos. En cambio, un zk-SNARK utiliza una aproximación de un "oráculo aleatorio" en el que los desafíos se crean de forma determinista mediante algún código, pero se comportan a todos los efectos como si fueran aleatorios. No por coincidencia, esta combinación de determinismo e imprevisibilidad utiliza el mismo tipo de función hash que asegura una cadena de bloques en sí.

Las pruebas de conocimiento cero han existido por un tiempo, pero zk-SNARKs introducen una serie de innovaciones que las hacen utilizables en blockchains. Lo más importante es que los zk-SNARK reducen el tamaño de las pruebas y el esfuerzo computacional requerido para verificarlas. Zerocoin, un intento previo de usar pruebas de conocimiento cero en blockchains, requiere transacciones de 45 kb, cada una de las cuales toma medio segundo para verificar (cifras tomadas de la detalles de la moneda en el que se basa Zcash). Esto es drásticamente peor que bitcoin, cuyas transacciones suelen tener un tamaño de 0.3 kb y se pueden verificar en menos de un milisegundo. Por el contrario, las transacciones de Zcash pesan 1kb y se pueden registrar en menos de 6 milisegundos. Esto coloca a Zcash en la misma liga de escalabilidad que bitcoin, un logro notable. Si nos quitamos el sombrero ante el (los) creador (es) de bitcoin, deberíamos quitarnos los calcetines y los zapatos para esto.

Precaución aconsejada

Antes de convertir todos sus bitcoins a Zcash, debe tener en cuenta algunas advertencias. Primero, la criptografía de Zcash se basa en un proceso de configuración confiable, en el que dos claves públicas largas se derivan de una única privada generada al azar. Es absolutamente vital que esta clave privada sea destruida, ya que cualquiera que la posea puede falsificar las pruebas en las que se basa el sistema. En el caso de Zcash, la clave privada se creó en una ceremonia elaborada, descrita en detalle esta página. La ceremonia involucró a varios personajes conocidos del mundo de las criptomonedas, cada uno de los cuales (se nos dice) tenía solo una vista parcial de la clave privada. A su vez, esto significa que Zcash solo puede verse comprometido si todos los participantes de la ceremonia se confabularon maliciosamente. Depende del lector decidir qué tan seguro se siente al respecto.

En segundo lugar, aunque es relativamente rápido verificar una transacción anónima de Zcash, la creación cada una de estas transacciones conlleva una gran carga computacional. De acuerdo con la Centro de velocidad de Zcash, actualmente tarda 48 segundos en un servidor de gama alta y más de 3 GB de memoria. Esto hace que sea poco práctico realizar transacciones de forma anónima desde dispositivos móviles y computadoras de escritorio y portátiles más antiguas. Zcash soluciona parcialmente esta limitación al admitir tanto criptomonedas visibles regulares (con transacciones rápidas) como “notas” anónimas (con lentas), con un método incorporado para convertir entre los dos.

En tercer lugar, incluso si asumimos que la criptografía subyacente es sólida, podría haber errores al acecho en el código de Zcash que permitan conjurar notas anónimas de la nada. Esto permitiría que la base monetaria de Zcash se inflara ilimitadamente, lo que en última instancia haría que la criptomoneda no tuviera valor. A diferencia de las criptomonedas transparentes como bitcoin, este evento catastrófico no se puede detectar, porque el objetivo de Zcash es mantener las transacciones ocultas. No obstante, según Zooko Wilcox, CEO de Zcash, ya se está trabajando para encontrar una solución, por lo que podemos esperar verla.

Finalmente, como con cualquier criptomoneda basada en prueba de trabajo, el potencial de ataques del 51% permanece. Esto significa que un grupo de "mineros" con más de la mitad del poder computacional de la red puede coludirse para revertir transacciones que todos los demás pensaban que estaban completas (los mineros malos aún no pueden falsificar transacciones que roban los fondos de otros). Zcash confía inteligentemente en Equihash, un algoritmo de hashing diferente del SHA-256 de bitcoin, lo que significa que la gran masa de poder de minería de bitcoin existente no se puede convertir contra Zcash. Equihash también está diseñado para ser más resistente a los "ASIC" (microprocesadores de propósito especial) que han convertido la minería de bitcoin en un oligopolio, pero solo el tiempo dirá si los ingenieros de hardware pueden encontrar una solución y a qué costo.

Blockchain privada de conocimiento cero

Hasta ahora, hemos centrado nuestra discusión en la cadena de bloques pública de Zcash y la criptomoneda. Pero, ¿qué pasa con los activos externos que se mueven sobre blockchains privados o autorizados y libros de contabilidad compartidos? ¿Se pueden usar las mismas técnicas de conocimiento cero?

A nivel técnico, la respuesta es sin duda sí. En comparación con el tour de force teórico y tecnológico que subyace a Zcash, es trivial extender el protocolo para admitir activos emitidos en una cadena. Todo lo que se requiere es extender las condiciones probadas por un zk-SNARK para hacer cumplir la preservación de múltiples activos, en lugar de una sola criptomoneda. O incluso más simplemente, cree múltiples subsistemas anónimos distintos en una sola cadena de bloques, cada uno representando un tipo diferente de activo, y realice transacciones dentro de cada subsistema exactamente como lo hace Zcash hoy. Este segundo método no requeriría ningún conocimiento de zk-SNARK en absoluto.

¿Cómo se vería el ciclo de vida de un activo en este modelo? Primero, una entidad de confianza emite tokens que representan el activo, enviando una transacción de blockchain visible que certifica el valor de esos tokens. La misma entidad luego realizaría una segunda transacción que convierte los tokens visibles en “notas” anónimas al estilo de Zcash, moviendo efectivamente el activo bajo tierra. Estas notas pueden luego transferirse secretamente del emisor a otros, y en adelante entre los participantes de la cadena. Al igual que con Zcash, las transacciones de transferencia pueden ser verificadas como válidas por todos los participantes de blockchain sin revelar su contenido. Finalmente, cuando un titular desea canjear una nota, la vuelve a convertir en tokens visibles utilizando otra transacción al estilo de Zcash, envía esos tokens al emisor original y recibe el activo equivalente en el mundo real a cambio. También podríamos permitir que los billetes se canjeen directamente de forma anónima, en cuyo caso los participantes de blockchain no sabrían cuánto del activo permanece en circulación.

Por lo tanto, las transacciones de conocimiento cero prometen desatar el nudo gordiano que ha impedido que las cadenas de bloques se utilicen para la liquidación en el sector financiero. En resumen, en una transacción normal de blockchain, cuando un activo se envía de un banco a otro, los detalles de esa transacción son visibles para todos los demás bancos de la cadena. Por el contrario, en una transacción de conocimiento cero, los demás solo saben que se ha realizado una transacción válida, pero nada sobre el remitente, el destinatario, la clase de activo (si somos inteligentes) y la cantidad. Incluso el volumen de transacciones puede ser ofuscado por los participantes que crean regularmente transacciones falsas en las que se envían activos a sí mismos.

En términos de privacidad, esto es tan bueno como un lingote de oro que viaja en un maletín de un banco a otro, pero sin el costo y el tiempo de mover físicamente el oro. Y es mejor que utilizar un intermediario de confianza, como un banco custodio, porque ni siquiera existe esa única parte que ve todo lo que sucede. Por primera vez, las cadenas de bloques de conocimiento cero permiten que las transferencias de activos se realicen digitalmente de igual a igual, en perfecto secreto.

No tire esa base de datos (todavía)

Suponiendo que los fundamentos técnicos de Zcash sean sólidos, espero que alcance el nivel superior de criptomonedas en términos de interés de los desarrolladores y capitalización de mercado. Pero, ¿hay un futuro igualmente brillante para las transacciones de conocimiento cero en privada blockchains? ¿Harán la transición del laboratorio a sistemas de calidad de producción que muevan dinero real en todo el mundo?

Por supuesto, es demasiado pronto para saberlo. Pero hay una serie de preguntas que deben responderse antes de que los defensores de blockchain autorizados puedan señalar transacciones de conocimiento cero y declarar triunfalmente la victoria.

Primero, y lo más importante, ¿es seguro? ¿Podemos estar realmente seguros de que tanto la criptografía subyacente como sus implementaciones codificadas son lo suficientemente fuertes como para evitar que una parte malintencionada genere activos de la nada? Como se mencionó anteriormente, a diferencia de las cadenas de bloques transparentes, aún no es posible detectar si la base monetaria de una cadena de bloques de conocimiento cero se ha visto comprometida. Aún así, no hay una prueba más segura de esta tecnología que lanzarla como una cadena de bloques pública abierta que está disponible para que todos la vean y ataquen, y esto es exactamente lo que está haciendo Zcash. Después de varios años de ver Zcash funcionando sin problemas, las instituciones pueden convencerse de que las cadenas de bloques de conocimiento cero pueden salvaguardar genuinamente sus activos. Como con todos los asuntos de blockchain, se requiere paciencia.

Un tema relacionado es la novedad de la propia criptografía de conocimiento cero. Es cierto que las cadenas de bloques regulares se basan en la criptografía avanzada, es decir, encriptación asimétrica (claves públicas / privadas) y funciones de hash criptográficas (huellas digitales). Y también es cierto que la gran mayoría de los programadores y desarrolladores de aplicaciones de blockchain no comprenden los principios matemáticos que subyacen a estas técnicas. Pero el punto más amplio es este: si se tratan como cajas negras, estos métodos han sido ampliamente empleados durante décadas por una gran cantidad de desarrolladores y usuarios (¿han oído hablar de https?) Y todos creen que funcionan. Por el contrario, hasta hace poco, las pruebas de conocimiento cero solo eran conocidas por una pequeña comunidad de académicos y no tenían amplias aplicaciones en Internet ni en ningún otro lugar. Podemos esperar que esta oscuridad reduzca la voluntad del CIO o del funcionario de riesgos de un banco para mover sus procesos centrales a cadenas de bloques de conocimiento cero, al menos durante los próximos cinco años. Y ni siquiera comencemos a imaginar cuánto tiempo les tomará a los reguladores sentirse cómodos con los activos moviéndose de esta manera.

Hablar de regulación plantea otro problema práctico con las cadenas de bloques de conocimiento cero. Las transacciones anónimas en una cadena de bloques contienen declaraciones sobre la transferencia de activos y la propiedad, pero esas declaraciones solo son visibles para las partes seleccionadas (es decir, las directamente involucradas). Incluso si le damos a un regulador una visibilidad total de una cadena de bloques de conocimiento cero y las identidades de sus participantes, no tiene forma de saber lo que realmente está sucediendo dentro. Por supuesto, el regulador podría pedir a todos los participantes que identifiquen y revelen sus transacciones, y pueden hacerlo de manera eficiente utilizando “claves de visualización” estilo Zcash. No obstante, si las partes de una transacción en particular quieren mantenerla en secreto, el regulador está atascado y no sabe a quién multar. No existe un banco custodio del que pueda obtener una imagen completa, y la única opción para hacer cumplir la ley es cerrar toda la cadena.

Entonces, ¿cuál es el resultado final? Al menos por ahora, sugiero simplemente seguir el progreso de la cadena de bloques pública Zcash, para ver cómo se desarrolla y crece. Si el historia de Ethereum se repite, habrá sorpresas y vulnerabilidades que acechan bajo la superficie, esperando ser explotadas por oportunistas codiciosos. No obstante, a largo plazo, no se equivoque: las transacciones de conocimiento cero son un avance revolucionario para las cadenas de bloques. Si los principios criptográficos subyacentes resultan sólidos, espere que amplíen significativamente la gama de casos de uso a los que se pueden aplicar blockchains.

Por favor publique cualquier comentario en Linkedin.

Sello de tiempo:

Mas de Multicain