¿Cómo funcionan los códigos de pago reutilizables?

Recientemente escuché sobre los "Códigos de pago reutilizables" (BIP 47), y suena como una gran característica, excepto que no pude encontrar una explicación simple de cómo funcionan.

¿Alguien puede explicarlos por favor?

FYI: No he seguido los detalles de este BIP, pero un nombre anterior para (creo) una propuesta similar era "Dirección sigilosa".

Respuestas (1)

La esencia del código de pago reutilizable BIP es que puede obtener cierta medida de privacidad de la dirección al combinar BIP32 (carteras deterministas jerárquicas) con el intercambio de claves Diffie-Hellman. Para entender lo que esto significa, averigüemos cuál es la situación actual de las billeteras de bitcoin.

Originalmente, en el cliente de referencia, las billeteras de bitcoin simplemente generaban números aleatorios para las claves privadas, lo que a su vez creaba un montón de direcciones aleatorias. Esto funcionó muy bien para enviar y recibir, pero para la privacidad, no es tan bueno. Si publica su dirección, por ejemplo, todos saben exactamente cuánto está recibiendo en esa dirección, ya que la cadena de bloques es un libro de contabilidad público.

Luego vinieron las carteras deterministas de Armory. Esto permitió que una sola semilla generara un número virtualmente infinito de direcciones. Es decir, puedes generar una billetera única desde 256 bits (o menos) y obtener tantas direcciones como necesites. Esto permitió que las personas se enviaran billeteras solo para relojes Armory entre sí y se les pagara de esa manera. Mucho mejor para la privacidad, ya que generalmente se supone que solo debe usar nuevas direcciones, pero una vez que alguien está en posesión de su billetera de solo reloj, conoce todas las transacciones dentro y fuera de esa billetera. Es mejor que sea público, por supuesto, pero sigue siendo algo que desear cuando se trata de privacidad financiera, si, por ejemplo, su empleador le estaba pagando a través de una billetera solo para relojes Armory, saben exactamente cuánto de eso se ha movido y pronto.

Luego vinieron las billeteras HD (carteras deterministas jerárquicas) que le permiten tener múltiples niveles de billeteras desde una sola semilla. Ahora puede enviarle a una persona una billetera de solo reloj (xpub en el lenguaje BIP32) y a otra persona otra billetera de solo reloj y no sabrán nada sobre lo que está haciendo el otro. Nuevamente, es mejor para la privacidad, pero ahora tiene que entregar diferentes billeteras solo para relojes a todas las personas con las que está tratando, lo que puede complicarse.

Los códigos de pago reutilizables son esencialmente un código único (esencialmente un xpub de BIP32) que puede publicar y que crea una nueva billetera cuando se combina con cualquier otra billetera HD. Esto funciona a través del intercambio de claves Diffie-Hellman donde el remitente usa el xprv de su HD Wallet y lo combina con el xpub del receptor para crear esencialmente una billetera que solo el receptor puede abrir pero tanto el remitente como el receptor pueden determinar las direcciones de. Como parte del intercambio de claves, el remitente debe enviar al receptor su xpub para que los pagos puedan ser bidireccionales. Si necesita un reembolso, por ejemplo, el código de pago es simétrico, por lo que una billetera que va en la otra dirección puede ser conocida de forma determinista por ambas partes. Se puede enviar un reembolso al código de pago sin las locas soluciones alternativas que tipifican el panorama actual de bitcoin.

Los códigos de pago reutilizables son esencialmente una forma de identificarse sin filtrar ninguna información sobre cuánto recibió o envió ese código de pago. Las direcciones, las billeteras deterministas y las billeteras HD no tienen esta capacidad.

Gran respuesta, gracias Jimmy! Hice una pregunta similar recientemente , ¿quizás puedas opinar sobre esto?
Esta es una buena explicación en general, pero el párrafo sobre los códigos de pago reutilizables es un poco vago. Si el receptor puede determinar la dirección, ¿cómo es que no puede "ver" esa dirección? ¿El hecho de que el código de pago sea bidireccional significa que se puede usar el mismo código para pagos de A a B y de B a A?
Tanto el remitente como el receptor conocen la billetera combinada, pero no conocen ninguna otra billetera. Esto es bueno desde una perspectiva de privacidad. Y sí, el código de pago es bidireccional significa que si A conoce el código de pago de B, B debe conocer el código de pago de A para que se puedan crear dos billeteras diferentes, una que envía de A a B y otra que envía de B a A. Por cierto, si desea una respuesta más completa, haga una pregunta de StackeExchange para que tenga más espacio para elaborar =)