Estaba leyendo sobre las matemáticas detrás de bitcoins en este artículo , y una cosa que parece que no puedo entender es cómo se usa dicho algoritmo para firmar "datos". ¿Qué son exactamente estos "datos"? ¿Es mi bitcoin? Si es así, ¿cómo se representa exactamente un bitcoin en términos de datos? Digamos que tengo 5 bitcoins en mi billetera Coinbase que quiero enviar a mi amigo. ¿Cómo se traduciría eso en todo el proceso de "obtener la clave privada y firmar sus datos con ella" como se describe en el artículo?
Lo siento si esta es una pregunta demasiado novata, soy nuevo en los conceptos de criptografía. ¡Gracias de antemano!
Cada Bitcoin que existe hoy existe como una salida de transacción no gastada (UTXO) en la cadena de bloques de Bitcoin. Es decir, la salida de una transacción confirmada existente que aún no se ha consumido como entrada de alguna otra transacción.
Coinbase tiene una colección de UTXO que representan los Bitcoins que tienen. Cuando le dice a Coinbase que haga un pago de Bitcoin a alguien desde su billetera, ellos eligen uno o más de esos UTXO para realizar el pago.
Luego forman una porción de datos que reclama esos UTXO y crea un nuevo UTXO que le da los Bitcoins al destinatario y otro que le devuelve cualquier cambio. Es esa porción de datos que firman con la clave para cada UTXO que gastan con ese pago.
Una vez que se confirma la transacción, el nuevo UTXO para el destinatario son los Bitcoins que le enviaste. Cuando ven que UTXO aparece en la cadena de bloques, saben que les pagó. Luego pueden formar una transacción que gasta ese UTXO para transferir esos Bitcoins a otra persona.
A coin
se describe por 3 cosas.
txid
índice de salida y en la transacción de creación. Identifica explícitamente las monedas que se gastanPara gastar una moneda, crea una transacción especificando el punto de salida como entrada. Usted especifica algunos destinos (conocidos como salidas). A scriptPubKey
menudo requiere que proporcione una firma que autentique el gasto.
ECDSA especifica tomar h = H(m) mod n
, donde H(m) es un algoritmo hash, y usar estos datos para calcular una firma mediante una clave privada. Tu pregunta es ¿Qué es m
?
m
(los datos que se firman) es una transacción serializada de acuerdo con las banderas SIGHASH que determinan qué partes se comprometen en la firma.
Las banderas SIGHASH se agregan a la firma, lo que permite que otros repitan el procedimiento realizado durante la firma.
Hay algunas otras modificaciones: - Los scripts de entrada se establecen en cero, ya que las firmas no pueden firmarse a sí mismas. - se txout.scriptPubKey
agrega como txin.scriptSig
para este vin (la parte desde el último OP_CODESEPARATOR) - al final, hashTypeCode
se agrega la (bandera sighash de 4 bytes)
Para obtener más detalles sobre este proceso, lea esta página y la imagen: https://en.bitcoin.it/wiki/OP_CHECKSIG
El testigo segregado incluye una modificación a la forma en que m
se deriva. Ver BIP 143: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki