Electrum: cómo generar direcciones públicas reforzadas con la billetera HD BIP32

Por favor comente sobre la exactitud de esta explicación.

Escenario: la clave pública maestra está comprometida y, por lo tanto, un tercero puede generar y monitorear todas las direcciones públicas no protegidas. Esto niega la privacidad obtenida al evitar la reutilización de direcciones. (Sin embargo, el tercero no puede gastar bitcoins de estas direcciones).

Las claves públicas protegidas no pueden generarse a partir de la clave pública maestra y, a priori , no pueden atribuirse al propietario de las direcciones no protegidas anteriores.

¿Es posible generar tales claves reforzadas en Electrum y, de ser así, cómo?

Respuestas (3)

Electrum usa algunas rutas de derivación diferentes para varios tipos de scripts. Por ejemplo, para direcciones p2pkh heredadas (direcciones que comienzan con 1) usa m/n/i donde m es la clave privada extendida (xprv) derivada de la semilla, n es 0 para direcciones externas y 1 para cambiar direcciones e i es el índice de dirección con direcciones que se generan secuencialmente a partir de 0. Electrum también le permite crear una billetera usando cualquier xprv y luego asumirá que xprv es m en la ruta de derivación y generará direcciones relativas a eso. Entonces, todo lo que tiene que hacer es restaurar su billetera desde un xprv endurecido como m / 1 'y electrum generará direcciones relacionadas con eso. Estas direcciones no serán visibles para la persona que tiene la clave pública extendida para m.

Para generar una billetera usando m/1', puede usar este script así:

electrum getmasterprivate| python3 xprv.py -m - -d "m/1'" -p|electrum -w wallet_name restore -

¿Es posible generar tales claves reforzadas en Electrum y, de ser así, cómo?

No es posible generar claves reforzadas en Electrum porque Electrum no le permite ingresar sus propias rutas de derivación BIP 32. El endurecimiento se basa en las rutas de derivación.

En realidad no entendí lo que quieres.

Las claves públicas protegidas no pueden generarse a partir de la clave pública maestra y, a priori , no pueden atribuirse al propietario de las direcciones no protegidas anteriores.

No hay "xpub endurecido (clave pública extendida)" en absoluto.

Solo hay "hijos endurecidos" o "hijos normales (no endurecidos)", de un padre xprv (clave privada extendida).

Los hijos normales se derivan de la clave pública principal, mientras que los hijos reforzados se derivan de la clave privada principal, por lo que cualquier hijo reforzado solo se puede derivar con el conocimiento del xprv principal (que contiene la clave privada principal y la cadena principal). código).

Actualmente, Bitcoin Core utiliza los elementos secundarios reforzados directamente como claves de direcciones de recepción/cambio (las direcciones de recepción serían m/0'/0'/0', m/0'/0'/1', m/0'/0'/2', etc.).

Hasta donde yo sé, Electrum actualmente no admite la opción de "dirección reforzada" . Sin embargo, esto también podría lograrse con otras herramientas, como la herramienta BIP39 de Ian Coleman.


Aunque @Abudussamad ya había proporcionado un método sencillo, creo que su método no cumple con los estándares.

Si simplemente siguió su guía, sus direcciones de recepción se derivarían a través de rutas de derivación "extrañas", como m/1'/0/0, m/1'/0/1, m/1'/0/2, m/1'/0/3, ... etc., mientras que sus direcciones de cambio se derivarían a través m/1'/1/0de , m/1'/1/1, m/1'/1/2, m/1'/1/3, ... etc.

Vea, sus direcciones se derivarán en realidad a una profundidad de 3 , mientras que las billeteras Electrum regulares derivarán sus direcciones a una profundidad de 2 :

Las direcciones de recepción serían m/0/0, m/0/1, m/0/2, ...etc, mientras que las direcciones de cambio serían m/1/0, m/1/0, m/1/0, ...etc.


En mi opinión, es mejor lograr este objetivo con el esquema estándar BIP39/44/49/84.

BIP44/49/84 proporciona separación entre diferentes "cuentas". Si el xpub de la "cuenta 0" ya se ha comprometido, simplemente puede cambiar a la "cuenta 1", que no tiene ningún vínculo observable con la "cuenta 0" comprometida, siempre que la "moneda" principal xprv (que deriva todas las "cuentas" de 0 a 2^31) todavía se mantiene en secreto.

Esto es fácil de hacer con un mnemónico BIP39, aunque Electrum siempre muestra advertencias al respecto. Después de marcar "Usar semilla BIP39" en el cuadro de diálogo de opciones, Electrum le mostrará tres opciones de tipo de dirección diferentes.

Por ejemplo, si elige el tipo de dirección heredada, Electrum llenará automáticamente la ruta de derivación con m/44'/0'/0'. El último 0'fue el número de índice de la cuenta, de la primera cuenta. Puede cambiar este número a otro valor, como m/44'/0'/1'o m/44'/0'/2', que corresponde a la segunda o tercera cuenta respectivamente.

Si elige usar la tercera cuenta ( m/44'/0'/2'), sus direcciones de recepción serían m/44'/0'/2'/0/0, m/44'/0'/2'/0/1, m/44'/0'/2'/0/2, m/44'/0'/2'/0/3, ...etc, mientras que sus direcciones de cambio serían m/44'/0'/2'/1/0, m/44'/0'/2'/1/1, m/44'/0'/2'/1/2, m/44'/0'/2'/1/3, ...etc.