Envío de criptomonedas de forma confidencial: firma de anillo, compromiso homomórfico y pruebas de rango de conocimiento cero

Introducción: una plataforma de monedas de privacidad descentralizadas ▸

Proteger las criptomonedas: convertir cualquier criptomoneda en una moneda de privacidad ▸

Custodios sin confianza: un enfoque descentralizado para la custodia de criptomonedas

Envío de criptomonedas de forma confidencial ▾

Una vez que las monedas públicas están protegidas, pueden enviarse, recibirse, almacenarse y comercializarse de forma confidencial como monedas de privacidad. Un custodio puede mantener un registro de cuántas monedas de privacidad se han acuñado, pero no sabrá cómo se utilizan estas monedas de privacidad posteriormente. Cada transacción de moneda de privacidad es confidencial e imposible de rastrear, incluso por custodios y validadores. Incognito utiliza varias primitivas criptográficas, como el esquema de firma de anillo enlazable, el esquema de compromiso homomórfico y las pruebas de rango de conocimiento cero, para proteger las direcciones de envío, las direcciones de recepción y los montos de las transacciones.

Fungibilidad: la base de la privacidad monetaria

Todas las monedas de privacidad emitidas en la red de Incognito son fungibles, uno de los requisitos básicos del dinero. Una unidad de moneda debe ser idéntica e intercambiable con otra.

Como se puede rastrear su historial, la mayoría de las criptomonedas, incluidas BTC y ETH, no son fungibles. Si las unidades de BTC se asocian con actividades ilegales o ilícitas en cualquier momento de su historial, podrían incluirse en la lista negra como bitcoins contaminados. Cualquiera podría negarse a aceptarlos, y los tenedores podrían verse obligados a venderlos por menos.

Un billete de dólar, por el contrario, es fungible. Uno es fácilmente intercambiable con otro y no pierde valor en función de cómo se haya utilizado anteriormente. Las monedas de privacidad emitidas en Incognito comparten esta importante cualidad.

Firmas de anillo: protección de direcciones de envío

Un esquema de firma en anillo permite que un miembro de un grupo firme un mensaje en nombre del grupo sin revelar la identidad del firmante [Chaum y Van Heyst, 1991; Fujisaki y Suzuki, 2007; Van Saberhagen, 2013]. El anonimato del firmante se conserva dando a cada miembro del grupo las mismas oportunidades de ser el verdadero firmante. BÚSQUEDA .

Figura 1. La identidad del firmante está oculta. Por ejemplo, si encuentra una firma de anillo con las claves públicas de Annie, Bob, John y Peter, podrá afirmar que uno de estos usuarios es el firmante, pero no podrá identificarlo.

La formación del grupo es espontánea. No hay un administrador de grupo que revele la identidad del verdadero firmante. Debido a estas propiedades, llamamos al grupo grupo ad hoc o anillo. El firmante puede formar un grupo simplemente recopilando las claves públicas de otros miembros del grupo. Estos miembros del grupo de desvío, a menudo llamados señuelos o mixins, se extraen de transacciones históricas. La firma unificada proporciona anonimato al firmante.

En Incognito, se utiliza una firma de anillo para autorizar el gasto de una Salida de transacción no gastada [Nakamoto, 2008], o “UTXO” sin revelar la identidad del gastador. El anillo consiste en el UTXO real que se gasta, así como sus señuelos, que son varias salidas aleatorias de transacciones históricas. La UTXO real y sus señuelos forman colectivamente las entradas de la transacción. Para el público, cualquiera de estos insumos podría ser igualmente el producto real que se está gastando.

Figura 2. Visualización de la firma del anillo. La noción de firma de anillo se propuso por primera vez como una forma de denuncia de irregularidades [Rivest et al., 2001]

Dado que no hay forma de verificar qué UTXO se está gastando, es posible que tengamos un problema de doble gasto [Finney, 1993]. Para solucionar esto, implementamos una variante de ring signature llamada Linkable Ring Signature [Liu et al., 2004], en la que se añade una propiedad adicional: linkability. Con vinculabilidad, cualquier firma emitida bajo la misma clave pública, ya sea al firmar el mismo mensaje o un mensaje diferente, tiene un identificador único: un número de serie. Con los números de serie en su lugar, cualquiera puede verificar si el mismo miembro del grupo ha emitido dos firmas sin saber quién es el firmante. Un número de serie se deriva de cada UTXO que se gasta y es parte de cada firma de anillo.

Direcciones ocultas: blindaje de direcciones receptoras

En una cripto-red típica como Bitcoin o Ethereum, una dirección pública es todo lo que se necesita para que cualquiera pueda ver las transacciones entrantes y salientes asociadas con esa dirección [Reid y Harrigan, 2013]. Estas transacciones son públicas y se pueden vincular fácilmente para inferir saldos totales y patrones de gasto.

Para evitar la vinculación de transacciones, Incognito crea automáticamente varias claves públicas únicas, una para cada transacción entrante. Las claves públicas de un solo uso, también conocidas como direcciones ocultas, se pueden considerar como cajas de depósito de un solo uso. Solo el receptor puede abrir la caja para ver lo que hay dentro y gastarlo.

Figura 3. Creación de varias claves únicas de un solo uso

Las direcciones sigilosas se basan en el protocolo de intercambio de claves Diffie-Hellman [Diffe y Hellman, 1976], un método criptográfico que permite a dos usuarios crear un secreto compartido incluso en presencia de un adversario que puede observar todas las comunicaciones entre ellos.

Una dirección de incógnito consiste en una clave de vista pública y una clave de gasto público. Una clave de gasto pública tiene una clave de gasto privada correspondiente, que se utiliza para autorizar transacciones. De manera similar, una clave de vista pública tiene una clave de vista privada correspondiente, que se utiliza para recibir pagos.

Cuando Alice quiere enviar monedas de privacidad a Bob, Alice usa la clave de vista pública y la clave de gasto público de Bob, junto con algo de aleatoriedad nueva, para derivar una clave pública única para el nuevo UTXO de Bob, de tal manera que solo Bob pueda calcular el clave privada de un solo uso correspondiente a esta clave pública de un solo uso.

Bob usa su clave de vista privada para reconocer el UTXO que se le envía al escanear todas las transacciones entrantes. Una vez que se encuentra la UTXO, Bob puede calcular la clave privada única que corresponde a la clave pública única. Bob puede gastar la UTXO con su clave de gasto privada.

Figura 4. Direcciones ocultas

Los datos de la transacción están en el libro mayor público de Incognito. Cualquiera puede ver que se ha producido una nueva transacción, pero no puede vincular la clave pública única de la transacción con Bob. Si Bob fuera un comerciante, por ejemplo, nadie podría determinar que él y Alice están haciendo negocios juntos.

Transacciones confidenciales: protección de los montos de las transacciones

Las Transacciones Confidenciales protegen los montos negociados [Maxwell, 2015]. Cualquiera puede ver que las monedas de privacidad se negocian en el libro mayor público de Incógnito, pero no puede ver las cantidades exactas.

Figura 5. Monto de la transacción confidencial

La idea básica es comprometer las cantidades de entrada y salida de una transacción como compromisos de Pedersen [Pedersen, 1991]. Un compromiso está formado por el valor en sí mismo y una aleatoriedad llamada factor de cegamiento, que evita que otros adivinen el valor. El valor y el factor de cegamiento pueden ser revelados más tarde por el autor del compromiso para que todos puedan usarlos para verificar que el compromiso se formó correctamente.

Figura 6. Los compromisos están equipados con pruebas de rango de conocimiento cero para demostrar su validez

El primer problema con este enfoque es que los validadores ya no pueden verificar la transacción, específicamente la suma de entradas contra salidas.

Para solucionar esto, incluimos una prueba de conocimiento cero de la validez de la transacción confidencial en cada transacción. Las pruebas de conocimiento cero [Goldreich et al., 1991] permiten al probador demostrar su conocimiento de la verdad de un enunciado en particular sin revelar nada más allá del hecho de que es verdadero.

Debido a una propiedad criptográfica denominada homomórfica [Gentry y Boneh, 2009], o maleable, todos los compromisos de entrada de una transacción se pueden sumar a un único compromiso de entrada. De manera similar, todos los compromisos de producción se pueden sumar a un solo compromiso de producción. La suma de compromisos es un compromiso con la suma de valores subyacentes, con el factor de cegamiento como la suma de factores de cegamiento en compromisos individuales.

Resulta que un compromiso a cero es una clave pública válida, de la cual la clave privada correspondiente es el factor de cegamiento. Un remitente ahora firma la diferencia entre estos dos compromisos, que es un compromiso a cero, para demostrar que se preserva el equilibrio. Al incluir este compromiso como miembro del anillo en la firma del anillo, el remitente puede probar el reclamo al firmar la transacción con este factor de cegamiento como una de las claves de gastos privados.

El segundo problema con este enfoque es que un atacante podría crear dinero de la nada e inflar un suministro de monedas de privacidad comprometiéndose con cantidades negativas.

Para solucionar esto, asociamos cada compromiso de salida con una prueba de rango [Boudot, 2000; Morais et al., 2019]. Una prueba de rango demuestra que las cantidades de salida son positivas, en el intervalo [0, 264), sin revelar las cantidades reales. Los validadores ahora pueden verificar que la transacción es legítima sin conocer los montos reales que se transfieren.

Para implementar pruebas de rango, empleamos Bulletproofs [B unz et al., 2018]. Bulletproofs son pruebas cortas no interactivas de conocimiento cero diseñadas para permitir transacciones confidenciales eficientes, sin necesidad de una configuración confiable. Bulletproofs reduce el tamaño de la prueba de rango anterior de ~ 5 KB a solo 700 bytes. Bulletproofs también admite la agregación; combinar varias pruebas de rango solo aumentaría el tamaño en varios cientos de bytes.

2 Likes