Revista Bitcoin
[[alloc] init] publica una propuesta de Bitcoin blindada para transacciones privadas de Bitcoin
Bitcoin protegido es una propuesta presentada por los investigadores de [[alloc] init] Clara Shikhelman, Misha Komarov y Aleksei Moskvin para un metaprotocolo de privacidad novedoso en la capa base de Bitcoin para permitir transacciones de Bitcoin protegidas sin necesidad de operadores, bifurcaciones suaves u otros cambios en el consenso de Bitcoin. Puede encontrar el documento técnico aquí y el anuncio del blog aquí.
El protocolo define una estructura transaccional y un protocolo de indexación para transacciones sólidas que preservan la privacidad, al tiempo que se basa en Bitcoin PIPE para vincular fondos dentro y fuera del sistema. Más sobre el mecanismo PIPE al final del artículo.
Su diseño es en gran medida un espejo del de Bitcoin; hay un equivalente a un UTXO (una nota), las transacciones consumen notas como entradas como una transacción normal de Bitcoin, un testigo demuestra que las entradas consumidas están debidamente autorizadas, los nodos (indexadores en el caso de un metaprotocolo) analizan el historial de transacciones y construyen un estado actual de qué monedas se gastan y no gastan, etc.
Sin embargo, todos los detalles son bastante diferentes.
Una transacción de Bitcoin protegida es simplemente una masa de datos con un prefijo (algo así como “shbtc:”) incluido en una transacción de Bitcoin utilizando OP_RETURN, el campo testigo o algún otro método de transporte de datos. No tiene ningún significado para Bitcoin, la red Bitcoin no hace nada para verificarlo ni hacer cumplir ninguna regla en su contra. Es perfectamente posible que las transacciones inválidas de Bitcoin protegido terminen en la cadena, y es trabajo de un indexador de Bitcoin protegido, que observa pasivamente la cadena de bloques (léase: nodo), ignorar esas transacciones cuando no pasan la validación y negarse a aplicarlas para actualizar el estado de los saldos de la red.
Un indexador no elimina notas de un conjunto de notas no utilizadas como lo hace Bitcoin con los UTXO. Utiliza un conjunto anulador. Esta es una forma para que un usuario publique públicamente una prueba cifrada y un anulador de que se ha gastado una nota sin revelar qué nota se ha gastado. La idea es que, en lugar de ver si una nota está en el "conjunto de notas no gastadas", verifique si ya se ha utilizado un anulador. Los indexadores construyen un árbol merkle que crece para siempre y al que solo se le puede agregar cada salida de nota creada y luego el conjunto de anuladores.
Para utilizar este protocolo, todo lo que necesita es un nodo Bitcoin y un indexador Bitcoin blindado. No es necesario que un proveedor de servicios, un coordinador ni ningún estado fuera de la cadena recupere los fondos. Funciona igual que Bitcoin en cadena, todo lo que necesita es su nodo/indexador y sus claves.
Cada billetera de usuario deriva una clave secreta maestra, a partir de la cual se crean todos los demás conjuntos de claves involucradas.
Piense en esto de manera muy similar a una billetera HD en Bitcoin. Puede generar muchos conjuntos de direcciones con esta relación. Sk_spend es su clave privada, sk_nf se usa para anular la salida de notas, vk_in se usa para descifrar y ver notas entrantes, vk_out para ver sus transacciones salientes y sk_view se usa para generar una dirección de recepción.
Cuando un usuario quiere darle una dirección a alguien para enviarle fondos, genera un valor diversificador d similar a un valor de derivación y luego multiplica el valor por su clave sk_view. La clave pública resultante, pk_d y d son la dirección del usuario.
Luego, el remitente genera un valor aleatorio, r_seed, que es necesario para cifrar la salida de la nota y para anularla (llegaremos allí en un segundo). Las salidas de las transacciones contienen solo tres cosas cifradas: el valor de la salida, el valor d que el receptor le dio al remitente y el valor r_seed del remitente. El remitente utiliza un par de claves secretas efímeras y la clave pública del receptor para crear un secreto compartido. Ambas partes pueden generar el mismo secreto multiplicando su clave privada por la clave pública del otro. La salida de la nota se cifra utilizando este secreto compartido y el sk_eph efímero se incluye sin cifrar para que el receptor pueda generar el secreto compartido.
En el lado de entrada de la imagen, se necesitan dos cosas para tener una transacción válida: un anulador público para las salidas de notas consumidas y una prueba de conocimiento cero que demuestre que 1) la salida de notas está incluida en el árbol merkle de notas, 2) la transacción está autorizada por la clave sk_spend apropiada, 3) el anulador se deriva correctamente y 4) no se ha producido inflación.
Si observa en la imagen de arriba, el anulador usa la clave sk_nf, el valor ρ derivado de r_seed y la posición de la nota en el árbol merkle de salidas de notas. La prueba de conocimiento cero garantiza que todo esto sea el motivo por el cual simplemente puede contar los anuladores de las repeticiones en lugar de eliminar las notas gastadas. Aunque nunca se sabe a qué salida de nota corresponde un anulador, las pruebas de conocimiento cero en cada transacción garantizan que cada anulador agregado al conjunto proviene de una salida de nota válida. Siempre que no tenga repeticiones, ofrece la misma garantía de doble gasto.
Así que ahí está, el protocolo le permite esencialmente incrustar transacciones de metaprotocolo cifradas en la cadena de bloques de Bitcoin, pero aún así proporciona una garantía de que no se gasta nada doble y que las monedas no se inflan de la nada.
En realidad, este es un sistema muy bien diseñado en términos de propiedades de privacidad y está a la par con algo como los pools protegidos de Zcash. Hay consideraciones de privacidad que se deben tener en cuenta al momento de ingresar y salir del metaprotocolo, y estas se detallarán en una próxima publicación en papel. No existe ninguna preocupación por medir la privacidad o realizar remezclas periódicas como ocurre con las combinaciones de monedas.
Entonces, la clavija. La intención es crear una vinculación utilizando PIPEs v2, un esquema de cifrado de testigos. Los PIPE le permiten cifrar una clave privada con un programa/mecanismo que no divulgará la clave a menos que pueda proporcionar una prueba ZK de que se ha cumplido una determinada condición (es decir, el estado de algún UTXO, que se ha confirmado una transacción, etc.). Esto permitiría que una vinculación funcione sin un operador, una federación o un tercero que custodie los fondos.
Esto no requiere bifurcaciones ni cambios de protocolo en Bitcoin y ocurre completamente fuera de la cadena.
El plan con Shielded Bitcoin, y la siguiente parte de su trabajo, es un mecanismo de vinculación que permite a los usuarios depositar fondos en Shielded Bitcoin utilizando claves controladas criptográficamente por PIPE, que luego se "desbloquearían" generando una prueba ZK de transacciones legítimas confirmadas en la cadena.
Actualmente se está trabajando en el documento que define este aspecto del sistema y debería publicarse en un futuro próximo.