¿Puedo usar la misma clave privada para Ethereum y Bitcoin?

Tanto las claves privadas de Bitcoin como las de Ethereum suelen ser un número de 256 bits, ¿no es posible usar la misma clave privada tanto para las carteras de Bitcoin como para las cuentas de Ethereum?

Por ejemplo, la wiki de Bitcoin dice :

En Bitcoin, una clave privada suele ser un número de 256 bits (algunas billeteras más nuevas pueden usar entre 128 y 512 bits), que se puede representar de varias maneras. Aquí hay una clave privada en hexadecimal: 256 bits en hexadecimal son 32 bytes, o 64 caracteres en el rango 0-9 o AF.

E9 87 3D 79 C6 D8 7D C0 FB 6A 57 78 63 33 89 F4 45 32 13 30 3D A6 1F 20 BD 67 FC 23 3A A3 32 62

Que es (se eliminaron los espacios en blanco):

e9873d79c6d87dc0fb6a5778633389f4453213303da61f20bd67fc233aa33262

Con MyEtherWallet generé la clave pública correspondiente para Ethereum:

0x60751Ab56d58781069b1C73064aD580dAde1F469

Ahora veo que no todos los números de 256 bits son una clave privada ECDSA válida para bitcoin. ¿Puedo usar la misma clave privada para Ethereum y Bitcoin? ¿Hay alguna forma conveniente de generar la clave pública ETH y BTC a partir de cualquier número aleatorio de 256 bits?

Esta sería una forma genial de almacenar Ether y Bitcoin en la misma cuenta. ¿Es posible?

Respuestas (2)

Sí, ambas criptomonedas usan la misma curva elíptica SECP256K1.

Quizás una mejor alternativa es usar una billetera BIP32 . Tiene una clave maestra que no se usa directamente para transacciones, pero se usa para derivar claves secundarias que se pueden usar.

Puede derivar claves separadas para bitcoin y ethereum. Siempre podrá utilizar la clave maestra para firmar transacciones para ambas claves.

@5chdn consulte BIP 44 para conocer un esquema de billetera que permite usar múltiples criptomonedas con la misma clave privada HD
"Sí, se puede"... pero ¿cómo se hace? Si ya tengo una billetera fría de bitcoin debidamente respaldada y asegurada, ¿cómo puedo reutilizarla para ethereum?
@JamesTheAwesomeDude Si tiene una billetera compatible con BIP44 , puede generar claves usando una ruta. Para ethereum, la ruta más común es m/44'/60'/0'/0, pero no hay una ruta estandarizada ethereum.stackexchange.com/questions/19055/… y github.com/ethereum/EIPs/issues/84 .

Respondiendo a mi propia pregunta 4 años después: ¡Sí!

Escribí una implementación de Secp256k1 en Crystal: github.com/q9f/secp256k1.cr

En ese proceso, implementé la gestión de claves para Bitcoin y Ethereum. Se puede usar el mismo par de claves para recuperar direcciones formateadas de Bitcoin y Ethereum:

generar una dirección de red principal de bitcoin comprimida:

key = Secp256k1::Keypair.new

btc = Secp256k1::Bitcoin::Account.new key
btc.address
# => "1Q1zbmPZtS2chwxpviqz6qHgoM8UUuviGN"

eth = Secp256k1::Ethereum::Account.new key
eth.address
# => "0x224008a0F3d3cB989c807F568c7f99Bf451328A6"

El repositorio de Github contiene más ejemplos. Beneficio interesante: de esta manera, podría usar el formato de importación de billetera Bitcoin (WIF) para cuentas Ethereum o incluso mini claves privadas.