Pages:
Author

Topic: ¿Firmar transacciones offline? La parte más oscura de BTC (Read 3054 times)

legendary
Activity: 1974
Merit: 1030
Bueno, tan offtopic no es, porque estamos hablando de poder construir una transacción offline a través del cliente_qt.

La razón última sí lo es porque a bitcoin hay que pasarle unas comillas (como parte del JSON) pero normalmente el intérprete de comandos que uses elimina algunas comillas y por tanto hay que "escaparlas"/"citarlas"/"quotearlas" y bla bla bla…
hero member
Activity: 597
Merit: 500
Bueno, tan offtopic no es, porque estamos hablando de poder construir una transacción offline a través del cliente_qt.

De todos modos cuando tenga algo de tiempo te posteo lo que intento. Aunque creo que el problema es por usar el windows. A ver si algún día aprendo algo de linux.
legendary
Activity: 1974
Merit: 1030
aunque intento construir una transacción mediante la ventana de depuración con el comando "createrawtransaction", siempre me da error aunque los parámetros que introduzca sean correctos.

¿Qué intentas hacer y qué error te da? Un copy-paste del texto sería bastante ilustrativo Wink.

Edito: con 0.8.2rc1 me funciona bien la misma sintaxis que en la terminal de linux, es decir, createrawtransaction '[{"txid":"blabla","vout":0}]' '{"12345":0.01}'.


En este hilo hablan sobre ello:

https://bitcointalksearch.org/topic/raw-transactions-api-am-i-using-it-correctly-104512

Pero yo no entiendo ni el 50% de lo que están escribiendo en código allí Sad  ¿Tú me puedes ayudar a entenderlo?

Err, sí, pero es un poco off topic la verdad… además allí tienen la complicación adicional de trabajar en una ventana de msdos, no con la consola de depuración.
hero member
Activity: 597
Merit: 500
Esto, de todas formas, no tiene que ver con createrawtransaction. Siempre puedes ir a blockchain.info a mirar el txid que te interese y ponerlo en createrawtransaction, tal como he puesto en el anterior mensaje.

Si, eso es precisamente lo que hace la aplicación esa que he posteado para hacer transacciones offline, tú le das la dirección bitcoin y la aplicación busca en blockchain.info todas las "unspent_outputs" que tiene para meterlas como input de una transacción.

De todos modos yo aquí sí que tengo una duda muy importante, y creo que tú me podrías ayudar. Yo sé que tú usas linux porque me ha parecido leértelo en algún post anterior (algo así como que en tu oficina donde curras todos usan linux). Yo como usuario de windows, aunque intento construir una transacción mediante la ventana de depuración con el comando "createrawtransaction", siempre me da error aunque los parámetros que introduzca sean correctos.

En este hilo hablan sobre ello:

https://bitcointalksearch.org/topic/raw-transactions-api-am-i-using-it-correctly-104512

Pero yo no entiendo ni el 50% de lo que están escribiendo en código allí Sad  ¿Tú me puedes ayudar a entenderlo?
legendary
Activity: 1974
Merit: 1030
Y si pruebo a obtener el txid de cualquier otra transacción (una transacción a cualquier otra dirección bitcoin de una paperwallet) mediante el comando "gettransaction"

No puedes obtener el txid de una transacción con ese comando, puesto que necesitas saberlo de antemano para poder usarlo Wink.


mira lo que dice la ayuda:

gettransaction
Get detailed information about in-wallet transaction

Te da información, pero siempre de transacciones que "entren" en la billetera, o sea, que tengan relación con las claves que conservas allí.

Esto es así porque el cliente no guarda toda la información de todas las transacciones de la red. Cuando haces un gettransaction el cliente se va a tu wallet a consultarla, ya que tus transacciones se guardan en él.

Esto, de todas formas, no tiene que ver con createrawtransaction. Siempre puedes ir a blockchain.info a mirar el txid que te interese y ponerlo en createrawtransaction, tal como he puesto en el anterior mensaje.
hero member
Activity: 597
Merit: 500
Yo cuando he intentado construir transacciones desde la ventana de depuración, para obtener la txid (identificador de la transacción) he tenido que utilizar el comando "listunspent", que te devuelve el listado de unspent_outputs que puedes utilizar en la transacción. Y ese pool de unspent_transactions lo forma el cliente_qt de aquellas direcciones bitcoin cuya clave conserva en la billetera.

Y si pruebo a obtener el txid de cualquier otra transacción (una transacción a cualquier otra dirección bitcoin de una paperwallet) mediante el comando "gettransaction", mira lo que dice la ayuda:

gettransaction
Get detailed information about in-wallet transaction

Te da información, pero siempre de transacciones que "entren" en la billetera, o sea, que tengan relación con las claves que conservas allí.
legendary
Activity: 1974
Merit: 1030
dserrano5, veo un problemilla en tu planteamiento. Y es que, si no recuerdo mal, el cliente_qt sólamente puede crear transacciones que incluyen "unspent outputs" de direcciones bitcoin cuyas claves privadas se encuentran en tu billetera. Esto significa que con el comando createrawtransaction podrías construir una transacción válida según la cadena de bloques de tu cliente, pero con bitcoins cuyas claves privadas ya se encuentran en el archivo wallet.dat. Por lo tanto esa clave privada ya podría haber sido "expuesta" a posibles hackeos.

No dudes en corregirme si me equivoco, pero como te digo, creo que había un problemilla a la hora de construir raw transactions a través de comandos rpc sin tener la correspondiente clave privada en la billetera. De ahí que tuviera que consultarse a servidores externos (blockchain.org o electrum) la información sobre unspent outputs de direcciones bitcoin cuyas claves privadas no se encontraban en el equipo.

Aunque puede ser que esté equivocado, ya que no tengo ni idea de programación.

Code:
$ bitcoind createrawtransaction '[{"txid":"deadbeef","vout":0}]' '{"12345Vypv2QSmuRXcciT5oEB27mPbWGeva":2}'
0100000001efbeadde000000000000000000000000000000000000000000000000000000000000000000ffffffff0100c2eb0b000000001976a9140b5b86d88f06861798ea629265fb793862c4755d88ac00000000
$ bitcoind decoderawtransaction 0100000001efbeadde000000000000000000000000000000000000000000000000000000000000000000ffffffff0100c2eb0b000000001976a9140b5b86d88f06861798ea629265fb793862c4755d88ac00000000
{
    "txid" : "395791169994ef6826a952a21f8329ff132ffdb8c93a148103fc0ec069f2b670",
    "version" : 1,
    "locktime" : 0,
    "vin" : [
        {
            "txid" : "00000000000000000000000000000000000000000000000000000000deadbeef",
            "vout" : 0,
            "scriptSig" : {
                "asm" : "",
                "hex" : ""
            },
            "sequence" : 4294967295
        }
    ],
    "vout" : [
        {
            "value" : 2.00000000,
            "n" : 0,
            "scriptPubKey" : {
                "asm" : "OP_DUP OP_HASH160 0b5b86d88f06861798ea629265fb793862c4755d OP_EQUALVERIFY OP_CHECKSIG",
                "hex" : "76a9140b5b86d88f06861798ea629265fb793862c4755d88ac",
                "reqSigs" : 1,
                "type" : "pubkeyhash",
                "addresses" : [
                    "12345Vypv2QSmuRXcciT5oEB27mPbWGeva"
                ]
            }
        }
    ]
}

Tú en createrawtransaction pones una transacción cualquiera, aunque como en este ejemplo no exista (quién sabe, a lo mejor la has creado localmente y todavía no está en la cadena de bloques, pero lo estará en el futuro). Esto no tiene ninguna relación con claves privadas ni nada, simplemente le dices qué inputs y outputs vas a conectar para crear una transacción nueva.

Con signrawtransaction sí que firmas, y sí que las claves privadas entran en juego, pero da igual porque esto idealmente lo realizas en un ordenador offline. Si las claves privadas no están en tu wallet las puedes especificar en la propia línea de comandos, quizá es eso lo que tenías en la cabeza… pero ya te digo, no es en el paso de construir la transacción sino al firmarla.
hero member
Activity: 715
Merit: 500
Bitcoin Venezuela
Para usuarios básicos:

Electrum usando seedless wallets (carteras sin semilla).
hero member
Activity: 597
Merit: 500
dserrano5, veo un problemilla en tu planteamiento. Y es que, si no recuerdo mal, el cliente_qt sólamente puede crear transacciones que incluyen "unspent outputs" de direcciones bitcoin cuyas claves privadas se encuentran en tu billetera. Esto significa que con el comando createrawtransaction podrías construir una transacción válida según la cadena de bloques de tu cliente, pero con bitcoins cuyas claves privadas ya se encuentran en el archivo wallet.dat. Por lo tanto esa clave privada ya podría haber sido "expuesta" a posibles hackeos.

No dudes en corregirme si me equivoco, pero como te digo, creo que había un problemilla a la hora de construir raw transactions a través de comandos rpc sin tener la correspondiente clave privada en la billetera. De ahí que tuviera que consultarse a servidores externos (blockchain.org o electrum) la información sobre unspent outputs de direcciones bitcoin cuyas claves privadas no se encontraban en el equipo.

Aunque puede ser que esté equivocado, ya que no tengo ni idea de programación.
legendary
Activity: 1974
Merit: 1030
Igual me pica la mano por invertir para saber como funciona todo el proceso.

Sería provechoso para todos que me des unas instrucciones de modo que el proceso quede documentado para todos.

En primer lugar creas la transacción, por ejemplo con createrawtransaction. Pongamos que queremos coger la primera salida de la transacción e9519006d274f9e54edea5a9751f342121e4f24f3c8a37be4ec3151dad53d71c y mandar 26 BTC a 12345Vypv2QSmuRXcciT5oEB27mPbWGeva:

Code:
$ bitcoind createrawtransaction '[{"txid":"e9519006d274f9e54edea5a9751f342121e4f24f3c8a37be4ec3151dad53d71c","vout":0}]' '{"12345Vypv2QSmuRXcciT5oEB27mPbWGeva":26}'
01000000011cd753ad1d15c34ebe378a3c4ff2e42121341f75a9a5de4ee5f974d2069051e90000000000ffffffff0100daf89a000000001976a9140b5b86d88f06861798ea629265fb793862c4755d88ac00000000

El churro resultante lo descodificamos con decoderawtransaction (no hace falta en la práctica):

Code:
$ bitcoind decoderawtransaction 01000000011cd753ad1d15c34ebe378a3c4ff2e42121341f75a9a5de4ee5f974d2069051e90000000000ffffffff0100daf89a000000001976a9140b5b86d88f06861798ea629265fb793862c4755d88ac00000000
{
    "txid" : "7fbb53a6e1b5abbe20cc9aa5142eb5d262ce6991c4db5a543168d1b952df07a2",
    "version" : 1,
    "locktime" : 0,
    "vin" : [
        {
            "txid" : "e9519006d274f9e54edea5a9751f342121e4f24f3c8a37be4ec3151dad53d71c",
            "vout" : 0,
            "scriptSig" : {
                "asm" : "",
                "hex" : ""
            },
            "sequence" : 4294967295
        }
    ],
    "vout" : [
        {
            "value" : 26.00000000,
            "n" : 0,
            "scriptPubKey" : {
                "asm" : "OP_DUP OP_HASH160 0b5b86d88f06861798ea629265fb793862c4755d OP_EQUALVERIFY OP_CHECKSIG",
                "hex" : "76a9140b5b86d88f06861798ea629265fb793862c4755d88ac",
                "reqSigs" : 1,
                "type" : "pubkeyhash",
                "addresses" : [
                    "12345Vypv2QSmuRXcciT5oEB27mPbWGeva"
                ]
            }
        }
    ]
}

Ahí puede verse que dentro de vin > scriptSig no hay nada; eso es porque la transacción está sin firmar. Como curiosidad, la parte donde dice "sólo el que tiene tal clave privada puede gastar" está en vout > scriptPubKey > asm. "0b5b86d88f06861798ea629265fb793862c4755d" y "12345Vypv2QSmuRXcciT5oEB27mPbWGeva" son lo mismo, representado de distintas maneras.

Para firmarla, procedemos con signrawtransaction (antes hay que desbloquear el wallet usando walletpassphrase):

Code:
$ bitcoind signrawtransaction 01000000011cd753ad1d15c34ebe378a3c4ff2e42121341f75a9a5de4ee5f974d2069051e90000000000ffffffff0100daf89a000000001976a9140b5b86d88f06861798ea629265fb793862c4755d88ac00000000
{
    "hex" : "01000000011cd753ad1d15c34ebe378a3c4ff2e42121341f75a9a5de4ee5f974d2069051e9000000006a4730440220143a4c3008f8502aa64cfffffffffffffffffffffffffa32d587da603d7e40b3022027ead7f994b52a412de6bbd7246f17ec45612c9829a2034b989c36ad10ec8c46012103bf7f10738469801723bb5bebbf54de86121eb48fca2dcd463805bbf7f54b3130ffffffff0100daf89a000000001976a9140b5b86d88f06861798ea629265fb793862c4755d88ac00000000",
    "complete" : true
}

Esto nos devuelve otro churro, que es la misma transacción ya firmada, y un valor que nos dice que ya están todas las firmas incluidas y la transacción puede enviarse a la red (usando sendrawtransaction).

Podemos hacer un decoderawtransaction del churro nuevo para comprobar la presencia de la firma:

Code:
$ bitcoind decoderawtransaction 01000000011cd753ad1d15c34ebe378a3c4ff2e42121341f75a9a5de4ee5f974d2069051e9000000006a4730440220143a4c3008f8502aa64cfffffffffffffffffffffffffa32d587da603d7e40b3022027ead7f994b52a412de6bbd7246f17ec45612c9829a2034b989c36ad10ec8c46012103bf7f10738469801723bb5bebbf54de86121eb48fca2dcd463805bbf7f54b3130ffffffff0100daf89a000000001976a9140b5b86d88f06861798ea629265fb793862c4755d88ac00000000
{
    "txid" : "72ca3d55d2774233c4afc72109607d3ea7269b101ed3008d0823ccf65ec95315",
    "version" : 1,
    "locktime" : 0,
    "vin" : [
        {
            "txid" : "e9519006d274f9e54edea5a9751f342121e4f24f3c8a37be4ec3151dad53d71c",
            "vout" : 0,
            "scriptSig" : {
                "asm" : "30440220143a4c3008f8502aa64cfffffffffffffffffffffffffa32d587da603d7e40b3022027ead7f994b52a412de6bbd7246f17ec45612c9829a2034b989c36ad10ec8c4601 03bf7f10738469801723bb5bebbf54de86121eb48fca2dcd463805bbf7f54b3130",
                "hex" : "4730440220143a4c3008f8502aa64cfffffffffffffffffffffffffa32d587da603d7e40b3022027ead7f994b52a412de6bbd7246f17ec45612c9829a2034b989c36ad10ec8c46012103bf7f10738469801723bb5bebbf54de86121eb48fca2dcd463805bbf7f54b3130"
            },
            "sequence" : 4294967295
        }
    ],
    "vout" : [    bla bla bla, lo mismo de antes   ]
}

He modificado la firma a mano para que sea inválida, de lo contrario cualquiera podría enviar esa transacción Wink.

Ahora bien, el meollo de las firmas offline es que las claves privadas no estén en un ordenador conectado a la red. En éste tendríamos lo necesario para consultar nuestras direcciones y sus saldos, y ver las transferencias nuevas que nos van llegando. A la hora de enviar fondos a otro sitio, podríamos hacer el createrawtransaction en esta máquina, pero el signrawtransaction hay que hacerlo allí donde estén las claves privadas, que idealmente sería una máquina sin conexión. Con la transacción ya firmada, podemos volver a la máquina conectada y enviarla con sendrawtransaction. Yo no lo he probado, pero todo el mundo dice que con Armory este proceso está chupao de hacer.
hero member
Activity: 597
Merit: 500
¿Se te habría ocurrido enviarme la clave privada cifrada con mi clave pública de GPG? Te lo digo porque, en el caso de que me enviases por correo electrónico o por mensaje privado del foro esa clave privada lo estarías haciendo a través de dos cauces extremadamente inseguros.

Si lo hicieras por correo electrónico, éste es fácilmente hackeable y algunos organismos estatales de espionaje tendrían acceso a él (ECHELON, SITEL). Si lo intentases por Whassup o por SMS, las operadoras de telefonía tienen acceso directo al SMS y el whassup también está crackeado e intervenido por los servicios secretos.

Y si lo intentases por mensaje privado del foro, los administradores tienen acceso a dichos mensajes y ten por seguro que algunos de ellos seguro que están olfateándolos por si a algún novato se le ocurriese cometer semejante error.

Si en algún momento tienes que enviar información sensible SIEMPRE debes hacerlo de forma cifrada, porque TODOS los canales de comunicación están intervenidos.

Imagínate que soy un moderador/administrador que quiero dejar mi cargo en el foro, pero antes quiero llevarme un "dinerillo" conmigo. Símplemente he de olfatear todos los privados sin cifrar que enviáis a Vescudero (por poner un ejemplo) y hacer un ataque man in the middle, de forma que iría sustituyendo vuestras direcciones bitcoin en las que confiáis que os envíe los bitcoins que estáis comprando, por direcciones de mi propiedad y a él le enviaría esos mensajes privados modificados.

legendary
Activity: 1568
Merit: 1032
Beyond the flavor!
Eso es correcto. Si yo te daba una clave privada lo hacia de modo protegido es decir que no pertenezca a ninguna de las llaves privadas de las que yo hago uso en mi wallet.

Estaba viendo que en https://coinb.in/brainwallet.html te permite hacer llaves (privadas y su correspondiente dirección pública) generandolas de una password. De modo que pensaba hacerte el donativo a una address generada por ese medio y luego mandarte por privado la privkey para que luego tu cobres el monto depositado en tal address. Tal sistema tiene el inconveniente que tu desecharas tal address porque ya seremos dos las personas que tenemos la privkey de esa dirección.

Además hay un mayor pago de comisiones de esa forma. Porque tu transferirás ese donativo a una cuenta segura y allí hay que pagar de nuevo comisión.

Igual me pica la mano por invertir para saber como funciona todo el proceso.

Sería provechoso para todos que me des unas instrucciones de modo que el proceso quede documentado para todos.

hero member
Activity: 597
Merit: 500
Ok, un momento. Ya se me estan cruzando los cables de nuevo.

Acabo de ver una opción en Blockchain que dice "Sign a message" "Use this tool to sign a message which proves that you own an address. Only Sign Detailed Messages you fully agree with, never sign vague messages. Pressing Sign Message may cause your browser to become unresponsive for a few seconds."

¿Esto es más de lo mismo o es otra cosa? Porque te da un espacio donde escribir y luego te da un código todo extraño.

Ese botón es para firmar un mensaje, no para realizar una transacción. Firmar un mensaje sirve para demostrar que eres el propietario de una determinada clave privada.

Te voy a poner un ejemplo de para lo que sirve. Imagínate que yo tengo una web en la que vendo juguetes sexuales a cambio de Bitcoins. En esa web yo tengo una única dirección bitcoin a la que tenéis que enviar los bitcoins para pagarme. Tú me pagas allí 2 bitcoins por un liguero y un consolador XXL.

Como las transacciones bitcoin son públicas y cualquiera sabe cuál es la dirección bitcoin de mi tienda, un listillo puede intentar suplantar tu identidad y enviarme un email diciéndome que ha sido él el que me ha efectuado el pago, pero que se acaba de mudar de domicilio y quiere que le envíe los productos a una dirección distinta a la que tú me diste cuando hiciste el pedido.

¿Cómo puedo saber yo cuál de los dos dice la verdad? Pues pediría que me enviáseis un mensaje con la dirección de entrega de la mercancía firmado con la clave privada desde la que los bitcoins salieron hacia mi dirección. De esta forma sólamente aquel que tenga en su posesión esa clave privada podrá acreditar la titularidad de los bitcoins que participaron en la transacción.
hero member
Activity: 597
Merit: 500
Las claves privadas no se entregan jamás. A NADIE.
Si yo quisiese un donativo te daría una dirección pública (una dirección Bitcoin válida) a la que tu podrías enviarme los bitcoins.

Recuerda, si me das la clave privada de alguna de tus direcciones, te podré robar el dinero que tengas en ellas en cualquier momento (actual o futuro).

Imagina que me das una clave privada de las que hay en tu billetera (wallet.dat) y resulta que, en algún momento en el futuro, el cambio de una de tus transacciones recae en la dirección bitcoin de la clave privada que me diste tiempo atrás. Yo podría robarte ese dinero.

Para pagar mediante bitcoin símplemente has de hacer una transacción. Y agradezco tu ofrecimiento pero lo declino ya que, en un futuro, tendrás seguro ocasión de agradecer la ayuda de gente más pedagógica que yo o podrás regalárselos a alguien para introducirlo en el universo Bitcoin.
legendary
Activity: 1568
Merit: 1032
Beyond the flavor!
Me alegra ver que lo has entendido. Si haces la donación mediante la aplicación esa que te he puesto, pon el link a la transacción de blockchain.org y así podremos ver todos que el construir y firmar transacciones offline es sencillo.

Ok, pero aqui de nuevo me quedo pegado.  Grin

¿Debes darme tu una dirección a donde mandarte el donativo? o ¿debo generar una y luego mandarte la llave privada por otra vía?

---------------------------------------------------------------------------------------------------

Ok, un momento. Ya se me estan cruzando los cables de nuevo.

Acabo de ver una opción en Blockchain que dice "Sign a message" "Use this tool to sign a message which proves that you own an address. Only Sign Detailed Messages you fully agree with, never sign vague messages. Pressing Sign Message may cause your browser to become unresponsive for a few seconds."

¿Esto es más de lo mismo o es otra cosa? Porque te da un espacio donde escribir y luego te da un código todo extraño.
hero member
Activity: 597
Merit: 500
Me alegra ver que lo has entendido. Si haces la donación mediante la aplicación esa que te he puesto, pon el link a la transacción de blockchain.org y así podremos ver todos que el construir y firmar transacciones offline es sencillo.

Lo que cuenta dserrano5 es muy importante. Generalmente la condición para que alguien pueda hacer uso de los bitcoins que le has transferido suele ser "demostrar que posee la clave privada correspondiente a esta dirección". Pero en un futuro esa condición podrá condicionarse de formas distintas, dando lugar a la posibilidad de realizar "contratos" complejos.

Por ejemplo, poder gastar esos bitcoins sólamente después de haber pasado un determinado tiempo, o necesitar la firma conjunta de varias personas, etc. (Buscad en google Bitcoin - Contracts y veréis la de posibilidades que se abrirán en el futuro)
legendary
Activity: 1568
Merit: 1032
Beyond the flavor!
No entiendo eso de firmar transacciones y menos transacciones offline. ¿Hay alguien con la suficiente paciencia y nivel pedagógico que pueda ayudarnos? (somos varios con la duda)  

Una transacción consta de "entradas" y "salidas". Las entradas apuntan a salidas de transacciones previas. Cuando tú me haces una transacción, las entradas apuntan a las salidas de otras transacciones que has recibido en el pasado. Y en las salidas no pones mi dirección, realmente lo que pones es "el que tenga la clave privada correspondiente a esta dirección". Y yo, a la hora de querer gastar esas coins, ¿cómo demuestro que la tengo? Pues firmando mi nueva transacción con ella.

Perfecto. Ya entendí la teoría. Solo me falta hacerlo en la practica.

¿Algún voluntario? tengo 0.0035 BTC para dedicarlos a esta practica.


EDIT:

Gracias a ambos ya entendí perfectamente todo. Te voy a donar mis 0.0035 BTC como un pequeño pago a tu esfuerzo y tu contribución. Polvos, veamos si lo sé hacer desde los link que colocaste acá. Todo sea en nombre de la ciencia.
legendary
Activity: 1974
Merit: 1030
No entiendo eso de firmar transacciones y menos transacciones offline. ¿Hay alguien con la suficiente paciencia y nivel pedagógico que pueda ayudarnos? (somos varios con la duda) 

Una transacción consta de "entradas" y "salidas". Las entradas apuntan a salidas de transacciones previas. Cuando tú me haces una transacción, las entradas apuntan a las salidas de otras transacciones que has recibido en el pasado. Y en las salidas no pones mi dirección, realmente lo que pones es "el que tenga la clave privada correspondiente a esta dirección". Y yo, a la hora de querer gastar esas coins, ¿cómo demuestro que la tengo? Pues firmando mi nueva transacción con ella.
legendary
Activity: 1568
Merit: 1032
Beyond the flavor!
Gracias!!!

Recien he visto tu esfuerzo y te agradezco enormemente, ahora me pongo a leer. Si me surje una duda te la hago llegar seguramente.

Gracias again.

Edito luego de leer:

Veamos si ahora entiendo.

Una persona A por un servicio prestado exige a una persona B un pago X:

La persona A opta por una transacción segura por lo que genera una clave publica de una clave privada también generada de modo offline. De este movimiento offline nuestro personaje A obtiene la clave publica con la cual le pedirá el pago a B.

B deposita el dinero en la clave publica.

Y luego con el tiempo A retira los fondos de dicha clave pública "firmando" con su clave privada en un movimiento online.

¿es más o menos así?

Edito de nuevo: 

Ya veo que no es así... porque la firma se hace también de manera offline y luego se hace el lo que se llama push.
hero member
Activity: 597
Merit: 500
Aquí tienes el post con los links del programador que hizo la página con la que poder construir la transacción (la online) que después pasas al ordenador desconectado de internet (offline) donde se firmará con la clave privada.

The first prototype of w1R903's bitcoin-secured seems to work fine. I tried to make it more straightforward to use.

Online part:
http://offlinewallet.appspot.com/

Offline part:
http://offlinewallet.appspot.com/signtransaction.zip

Una vez firmada la transacción ya puede publicarse por la red bitcoin sin miedo, bien mediante el cliente_qt o bien mediante https://blockchain.info/pushtx
Pages:
Jump to: