¿Cómo usar UTXO de direcciones derivadas de xpub?

Soy nuevo en Bitcoin, esto es algo con lo que estoy confundido.

Si estamos derivando elementos secundarios, es decir, claves públicas, de xpub, sin claves privadas, con el fin de recibir resultados, ¿cómo podemos gastar UTXO si no tenemos una clave privada?

En este ejemplo: https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch05.asciidoc#using-an-extended-public-key-on-a-web-store xpub está configurado en el servidor para generar público Claves para recibir dinero en el sitio web de comercio electrónico. Pero, ¿cómo accedemos a ese dinero si no tenemos claves privadas?

Respuestas (2)

La billetera HD de Gabriel ofrece una solución mucho mejor a través de la capacidad de derivar claves secundarias públicas sin conocer las claves privadas. Gabriel puede cargar una clave pública extendida (xpub) en su sitio web, que se puede usar para derivar una dirección única para cada pedido de cliente. Gabriel puede gastar los fondos de su Trezor, pero el xpub cargado en el sitio web solo puede generar direcciones y recibir fondos.

El enlace que mencionó describe cómo puede usar XPUB para obtener una nueva dirección para cada pedido en su sitio web y la dirección pertenecerá a la configuración de su billetera, tal vez en una billetera de hardware o en otro lugar para gastar.

Pero, ¿cómo accedemos a ese dinero si no tenemos claves privadas?

No accede a él en la tienda web, pero accede a él mediante la billetera de hardware o tal vez la configuración de la billetera en una máquina diferente, etc.

Puedes probar esto con btcpayserver

En esquemas de derivación deterministas como BIP-32, la esencia de una billetera se reduce a dos piezas de información: una clave privada y una regla de derivación. Llamamos a estos dos en combinación una xPrivclave privada extendida. De manera similar, una clave pública extendida ( xPub) consta de la clave pública correspondiente y otra regla de derivación. Podemos encontrar fácilmente la clave pública de la clave privada. Sin embargo, ¿qué pasa con la regla de derivación?

En el caso estándar¹, las reglas de derivación son aritmética simple con números grandes. Veamos un ejemplo. Sean kla clave privada principal, la regla de derivación k' = k + 1, gel generador y la clave pública K = k•g. Entonces, cuando derivamos la segunda clave en la cadena, k'observamos

k'•g = (k+1)•g = k•g + g = K + g = K'

lo que significa que cuando las claves privadas son una serie escalar creada por sumas de 1, las claves públicas correspondientes serían una serie de puntos de curva elíptica derivados por sumas del generador g. Entonces, ¡tenemos tanto la clave pública principal como una regla de derivación por la cual podemos encontrar cualquier subclave a partir de ella!

¿Qué tiene que ver eso con tu pregunta? En el ejemplo al que se vincula, Gabriel usa la relación descrita entre él xPuby su xPrivpara mantener la clave privada fuera de línea y solo implementarla xPuben su sistema en línea. Esto le permite a Gabriel generar direcciones según sea necesario para la tienda web, pero evita que las claves privadas queden expuestas a un sistema en línea potencialmente violable. Cuando Gabriel quiere gastar algunos fondos que recibió, genera la transacción con la billetera de solo reloj y la firma fuera de línea derivando las claves privadas correspondientes con su billetera de hardware según sea necesario.


¹ También existen reglas de derivación que no permiten que las claves públicas se deriven de la clave pública principal, por ejemplo, utilizando un paso de hashing en la derivación. Dichos esquemas "reforzados" requieren acceso a la clave privada principal para derivar direcciones adicionales.