Autor:
witcher_senseHilo en inglés:
Silent payments
IntroducciónEn este hilo me gustaría debatir sobre una propuesta interesante de Ruben Somsen denominada "Pagos silenciosos", que es una técnica para la mejora de la privacidad cuyo objetivo es hacer que los pagos entre dos partes en la blockchain sean menos transparentes para un observador externo. Se basa en conceptos tales como "direcciones sigilosas" y "códigos de pago reutilizables" y, esencialmente, trata de resolver el mismo problema pero de un modo más elegante.
La idea fundamentalLa idea fundamental es la siguiente: El
usuario A publica un
identificador (generalmente una clave pública), y el
usuario B combina su clave privada con la clave publicada por
A y crea una dirección única desde la que solo
A puede gastar. El
usuario C también puede enviar pagos al
usuario A combinando su clave privada con la dirección de
A y derivando otra dirección única. El
usuario A sabrá que ambos usuarios
B y
C le enviaron dinero, pero
B y
C no sabrán nada el uno sobre el otro. Así, se consigue que el
usuario A reciba pagos en direcciones totalmente desvinculadas usando tan solo una dirección pública.
Cómo funcionaImaginemos que Bob quiere mandar un pago silencioso a Alice.
1) Alice crea un identificador único (esto es, una clave pública) usando matemáticas de curva elíptica estándar:
A = a*G, donde
A - clave pública de Alice (un punto en una curva elíptica),
a - clave privada de Alice (un número aleatorio que debería mantenerse en secreto), y
G - un punto generador (algún punto predefinido en una curva elíptica).
2) Alice publica este identificador único
A para que Bob (y también otros usuarios, como Carol) sepan dónde mandar sus pagos.
3) Bob elige uno de los inputs que él controla, que contiene una clave pública
B = b*G, donde
B - clave pública de Bob (un punto en una curva elíptica),
b - clave privada de Bob (un número entero aleatorio que solo Bob conoce), y
G - el punto generador.
4) Bob toma la clave pública de Alice
A y crea una nueva clave pública usando la siguiente fórmula:
A' = hash(b*A)*G + A, donde
A' - una clave pública a la que Bob manda su pago.
5) Bob realiza un pago a Alice creando un output asociado a una clave pública previamente creada
A'.
6) Si
b*A = b*a*G = a*b*G = a*B, Alice puede reconstruir la misma clave privada
A' usando su clave privada
a con la siguiente fórmula:
A' = (hash(a*B) + a)*G, donde
hash(a*B) + a - nueva clave privada de Alice que le permite gastar el dinero del output correspondiente a la clave pública
A'.
Sin embargo, el problema es que Alice necesita conocer la clave pública de Bob
B para detectar su pago, razón por la que ella escaneará continuamente la blockchain tratando de adivinar cuál de las claves públicas puede ser combinada con su clave privada
a para reconstruir direcciones de bitcoin existentes.
Pros:1) No es necesaria interacción alguna entre emisores y receptores. Para que un emisor pueda realizar un pago, solo necesita crear una dirección basándose en la clave pública silenciosa del receptor.
2) Los pagos silenciosos utilizan el espacio de bloques más eficientemente ya que no necesitan "anunciar" las transacciones, como en el caso de BIP47. Así, una transacción equivale a un pago, lo que es perfecto para donaciones no periódicas.
3) Las transacciones silenciosas son indistinguibles de las transacciones regulares (esto es, no hay outputs OP_RETURN para compartir una clave pública efímera como en el caso de las "direcciones sigilosas"), lo que significa que no es esconderse el usuario entre la multitud resulta trivial - el conjunto de anonimato es la blockchain en su conjunto.
4) Las direcciones derivadas de la clave pública silenciosa inicial siempre son deterministas y únicas porque cada emisor usa sus propias claves únicas para retocar la clave pública silenciosa del receptor.
5) Los pagos silenciosos promueven que el receptor de los fondos funcione con su propia nodo de Bitcoin, lo que tiene como resultado una red más descentralizada.
6) Nadie, salvo el emisor de la transacción y su receptor, sabrá que la transacción se llevó a cabo.
7) Los pagos silenciosos pueden mejorar enormemente la fungibilidad de las transacciones de bitcoin.
Contras:1) La mayor desventaja de esta técnica son los relativamente altos costes de validación. Dado que un receptor de pagos no sabe de antemano qué direcciones de bitcoin pueden gastarse con la clave privada que controla, tiene que comprobar cada input de cada transacción, calculando y comparando claves públicas.
2) Capacidad del emisor para reutilizar direcciones. Cuando un emisor tiene varios inputs que comparten la misma clave pública, cada uno de esos inputs dará como resultado la misma dirección calculada. Reusar la dirección se considera una mala práctica de privacidad y debería evitarse a toda costa. Esto se podría evitar incluyendo información adicional en el el proceso de computación, pero crea una barrera adicional, especialmente para clientes ligeros. Alternativamente, un emisor puede gastar todos los inputs en una sola transacción, pero esto también revela una propiedad común, lo que vulnera la privacidad.
Referencias:1]
https://gist.github.com/RubenSomsen/c43b79517e7cb701ebf77eec6dbb46b82]
https://github.com/genjix/bips/blob/master/bip-stealth.mediawiki3]
https://github.com/bitcoin/bips/blob/master/bip-0047.mediawiki4]
https://en.m.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman5]
https://bitcoinops.org/en/newsletters/2022/04/06/6]
https://bitcoinmagazine.com/technical/bitcoin-silent-payments-secret-keys7]
https://bitcoinmagazine.com/technical/improving-bitcoin-privacy-with-silent-payments8]
https://gist.github.com/w0xlt/72390ded95dd797594f80baba5d2e6ee
Traducción ofrecida a iniciativa de: