Blockstream estrena Confidential Assets
Elements

Blockstream estrena Confidential Assets

Andrew Poelstra

La seguridad de cualquier libro contable blockchain se desprende de la verificabilidad pública de dos propiedades de toda transacción: que haya sido autorizada por todas las partes correspondientes y que no afecte la masa monetaria total en circulación. En Bitcoin, es tan sencillo comprobar la segunda propiedad que, a menudo, pasa inadvertida: sumamos todas las cantidades de entrada y comparamos ese total con la suma de las cantidades de salida. No obstante, desde que inventamos Confidential Transactions (CT)1, esta propiedad de seguridad pasó a ser el centro de atención, porque todos los montos de la transacción deben cuadrar a pesar de estar ocultos criptográficamente.

Parte de la evolución natural de las tecnologías blockchain es la compatibilidad con diversos tipos de activos en la misma cadena. Así, se amplía la gama de usuarios que comparten las propiedades de seguridad de la misma cadena y además se habilitan usos nuevos, como transacciones con activos múltiples que efectúan intercambios atómicos. Una manera sencilla de habilitar la compatibilidad con diversos tipos de activos sería etiquetar las salidas de cada transacción con una “etiqueta de activo” visible públicamente; sin embargo, esto revelaría información relativa al comportamiento financiero de los usuarios. Confidential Assets (CA)2,3,4 es una tecnología que posibilita la compatibilidad con diversos tipos de activos e incorpora el ocultamiento de sus etiquetas identificatorias, lo cual complementa los beneficios de CT en términos de privacidad y extiende la capacidad y la expresividad de las transacciones blockchain.

Al igual que CT, Confidential Assets permite que cualquier usuario pueda verificar criptográficamente la seguridad de la transacción, según dos criterios: que haya sido autorizada por todas las partes correspondientes y que no se haya creado, destruido o transmutado ningún activo inesperadamente. No obstante, los participantes de la transacción son los únicos habilitados para ver la identidad y los montos de los tipos de activos involucrados.

En una cadena de activos múltiples y en algunos contextos, puede que tenga sentido que se creen o destruyan ciertos tipos de activos en particular. Con CA, esto se logra por medio de transacciones de emisión, que generan nuevas etiquetas de activos y la cantidad especificada del activo en cuestión. Posteriormente, es posible reemitirlos si se demuestra autoridad respecto de tokens de reemisión, un tipo de activo relacionado pero autónomo. Al mismo tiempo que se emite un tipo de activo en particular, es posible crear sus tokens de emisión, a menos que el activo en cuestión deba ser incompatible con la reemisión.

Las transacciones de emisión son distintas de todas las demás porque no se les exige que su saldo dé cero. No obstante, si emiten un monto público de un activo cualquiera, sigue siendo posible verificar que lo que efectivamente se emitió fue ese monto exacto, ni más ni menos.

La tecnología detrás de Confidential Assets

Etiquetas de activos y pruebas de rango

Para describir la tecnología que hay detrás de Confidential Assets, empecemos por los compromisos de Pedersen que conforman la base de Confidential Transactions:

compromiso = xG + aH

donde G es un generador estándar de curva elíptica y H es un segundo generador cuyo logaritmo discreto respecto de G es desconocido. A este generador lo llamamos “nada bajo la manga” (NUMS, por sus siglas en inglés).

En CT, describimos este paso como comprometerse a un monto a de monedas, con un factor de ocultamiento x. Observamos que si nos referimos al generador H como si fuese una moneda, podemos leer el término aH como “a monedas”, en términos algebraicos. Cuando nuestro único generador es H, esto no es más que un truco semántico. Pero supongamos que añadiésemos otro generador NUMS, I, y consideremos los dos compromisos.

compromiso_1 = xG + aH compromiso_2 = xG + aI

Ahora podemos pensar que H e I representan dos activos distintos y, entonces, observamos que estos dos compromisos, si bien se comprometen al mismo monto, remiten a activos diferentes.

Ahora, pensemos en una transacción completa con dos entradas de dos tipos de activos distintos y dos salidas, como se expresa a continuación:

in1 = xG + aH, H --\ /-- uG + cH, H = out1 |---| in2 = yG + bI, I --/ \-- vG + dI, I = out2

En CT, donde había un solo generador, necesitábamos que se cumpliera la siguiente ecuación:

out1 + out2 - in1 - in2 = 0

que se cumpliría si y solo si cuadraban los montos de la transacción. Pero resulta que la misma ecuación funciona incluso con múltiples activos:

0 = out1 + out2 - in1 - in2 = (uG + cH) + (vG + dI) - (xG + aH) - (yG + bI) = (u + v - x - y)G + (c - a)H + (d - b)I

Dado que tanto H como I son puntos NUMS, la única manera de que esta ecuación se cumpla es que cada término individual sea 0 y, en particular, que c = a y b = d. En otras palabras, esta ecuación se cumple solo si el monto total del activo H es igual del lado de las entradas y las salidas, y si el monto total del activo I es igual del lado de las entradas y las salidas.

Este procedimiento se extiende naturalmente a más de dos etiquetas de activos; de hecho, es posible habilitar un número ilimitado de tipos de activos distintos, siempre y cuando a cada uno se le pueda asignar un generador NUMS específico.

Al igual que en CT, esta sencilla ecuación es insuficiente, porque es posible que los montos se desborden, lo cual en rigor permite que existan salidas de valor negativo. Es posible resolver este problema de la misma manera que se hizo en CT: añadiendo una prueba de rango a cada salida. La única diferencia reside en que el verificador debe emplear la etiqueta del activo correspondiente en lugar del generador H fijo.

Etiquetas de activos encubiertos y pruebas de sobreyección de activos

Los comentarios anteriores dan por sentado que cada salida de una transacción está asociada a un generador NUMS o a una etiqueta de activo, y que las salidas del mismo tipo de activo emplean la misma etiqueta. Este planteo no cumple con nuestras metas de privacidad porque el tipo de activo que representa cada salida sigue siendo visible.

Para resolver este problema, es posible reemplazar las etiquetas de los activos con etiquetas de activos encubiertos conforme a la siguiente fórmula:

A = H + rG

En este caso, H es una etiqueta de activo como las que ya se mencionaron y r es un valor aleatorio secreto. Quienes conozcan r sabrán qué activo representa esta etiqueta, pero para todos los demás parecerá un punto de la curva elíptica uniformemente aleatorio. Observamos que comprometerse a un valor cualquiera con A implica comprometerse al mismo valor con H, de modo que nuestra regla “restar las entradas a las salidas da cero” aún funciona cuando se trata de validar transacciones:

compromiso_A = xG + aA = xG + a(H + rG) = (x + ra)G + aH = compromiso_H

La incorporación de este factor de ocultamiento no afecta la capacidad de los usuarios de generar pruebas de rango, aunque sí complica un tanto los cálculos algebraicos necesarios para construir una transacción cuyo saldo dé cero.

Ahora bien, dado que todas las etiquetas de activos encubiertos aparentan una aleatoriedad uniforme, ¿qué pueden hacer los verificadores para asegurarse de que las etiquetas subyacentes sean legítimas? Descubrimos que la regla “la suma da cero” no es suficiente para prevenir las prácticas malintencionadas. Por ejemplo, consideremos la siguiente “etiqueta de activo encubierto”:

A′ = -H + rG

Cualquier monto del activo encubierto A′ en realidad va a corresponder a un monto negativo del activo H, aspecto que un atacante podría explotar para contrarrestar un incremento ilegal de la masa monetaria.

Para solucionar este problema, presentamos la prueba de sobreyección de activos, una prueba criptográfica que demuestra que dentro de una transacción, cada uno de los tipos de activos de las salidas es idéntico a algún tipo de activo de las entradas, al tiempo que oculta la correspondencia exacta entre una y otra parte.

El funcionamiento de esta prueba es sencillo.  Si A y B son etiquetas de activos encubiertos que se comprometen a la misma etiqueta de activo H, digamos que

A - B = (H + aG) - (H + bG) = (a - b)G

será la clave de firma a la que le corresponderá la clave secreta a - b. Si tenemos una salida de la transacción out1, podemos emplear una firma de tipo anillo (para probar que conocemos una de las claves secretas sin revelar cuál) con las claves out1 - in1, out1 - in2, y así sucesivamente para cada entrada de la transacción. Si out1 posee la misma etiqueta de activo que una de las entradas, el firmante de la transacción va a conocer la clave secreta que corresponde a una de estas diferencias y así podrá generar la firma de tipo anillo.

La prueba de sobreyección de activos consiste en dicha firma de tipo anillo.

Demostración de Confidential Assets

DG Lab elaboró una demostración de código abierto orientada a desarrolladores que presenta estas nuevas capacidades de ocultamiento de los identificadores de activos.

Nuestro trabajo a futuro

Dado que, en términos algebraicos, Confidential Assets es una extensión muy sencilla de Confidential Transactions, muchas de las herramientas desarrolladas para ser utilizadas con CT también pueden emplearse con CA con unas pocas modificaciones, lo cual les otorga la capacidad de gestionar transacciones de activos múltiples con seguridad y confidencialidad. Entre estas tecnologías se encuentran:

●     MimbleWimble

●     Scriptless Scripts

●     ValueShuffle

Nuestra perspectiva a futuro nos ilusiona, porque sabemos que van a seguir apareciendo muchas novedades apasionantes.

Temas relacionados

1 Confidential Transactions

2 Comunicado de prensa: Blockstream estrena una nueva característica, Confidential Assets, para los clientes de Blockchain Empresas

3 Whitepaper de Confidential Assets

4Documentación e información adicional sobre cómo empezar a usar CA

If you have specific preferences, please, mark the topic(s) you would like to read: