¿Cómo firmar un mensaje usando la clave privada de Bitcoin?

¿Cómo se crea una firma adecuada para un mensaje determinado utilizando claves privadas de Bitcoin?

Tengo una dirección de entrada de

5JeWZ1z6sRcLTJXdQEDdB986E6XfLAkj9CgNE4EHzr5GmjrVFpf

o

6d7f6815bd7927423a728db28c5f4ea4032a81ab8dbca06ec41476508de48a6d

Quiero firmar mensaje:

test

Lo convierto a hexadecimal:

74657374

Lo paso a una función de firma de la biblioteca ECDSA que usa secp256k1, y obtengo dos salidas,

r = D16A44BF1095FB7D517C7C4DD6A51E3EFD29548C5CAD8CA4AB763946D02AE0E8 
s = 2AB3E674B788804B87CED50619A1EFA267E17D20C016D0779BC3203D40E8105D 

Si lo organizo con DER/asn1 como una lista de Big Integers, obtengo un resultado de:

MEUCIQDRakS/EJX7fVF8fE3WpR4+/SlUjFytjKSrdjlG0Crg6AIgKrPmdLeIgEuHztUGGaHvomfhfSDAFtB3m8MgPUDoEF0=

Si los organizo como una lista de matrices de bytes, obtengo

MEQEINFqRL8Qlft9UXx8TdalHj79KVSMXK2MpKt2OUbQKuDoBCAqs+Z0t4iAS4fO1QYZoe+iZ+F9IMAW0HebwyA9QOgQXQ==

si los clasifico como una matriz de bytes larga, obtengo 0WpEvxCV+31RfHxN1qUePv0pVIxcrYykq3Y5RtAq4Ogqs+Z0t4iAS4fO1QYZoe+iZ+F9IMAW0HebwyA9QOgQXQ==

Ninguno de ellos parece funcionar como firma cuando trato de verificar la firma del mensaje usando herramientas como http://brainwallet.org/#verify .

¿Cómo firmo correctamente los mensajes con claves privadas de Bitcoin para que sean compatibles con BitcoinQT?

La documentación definitiva es la fuente...
¿Qué tiene de malo signmessage <bitcoinaddress> <message>?
¿Has encontrado el algoritmo de firma? Probé doubleSha(msg.getBytes) (en Java). La verificación falla.
Por el amor de Dios, la pregunta se hace para que las cosas se puedan hacer manualmente sin usar ningún programa como bitcoin-qt, ¡es una pregunta técnica! ¡El usuario quiere firmar un tx manualmente y verificar con bitcoin-qt o cli para asegurarse de que firmó correctamente!

Respuestas (2)

Usando bitcoind y bitcoin-cli puedes hacerlo de la siguiente manera:

bitcoin-cli signmessage 1DiWX6p3FdHPZqN88vMeGVXSwAQ1h7BeVj 'Hello world!'

En Bitcoin-qt

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

O puede hacerlo en blockchain.info/wallet haciendo clic en el menú sobre sus direcciones.

No es necesario hacerlo manualmente.