Esta pregunta aparece muchas veces en SO, pero hay algo en las respuestas que no obtengo.
Estoy diseñando un sistema basado en las llamadas API realizadas a blockchain.info, pero tengo problemas para entender la relación entre Pubkey, la dirección y las firmas digitales para mi caso de uso.
Digamos que el usuario Jane ha realizado transacciones previamente con Bitcoin y asumimos que la transacción está confirmada en la cadena de bloques de Bitcoin. Jane ahora hace una solicitud desde su software de billetera basado en la aplicación para algunos metadatos relacionados con esa transacción específica a través del servicio web del sistema.
El servicio web requiere que Jane demuestre que su billetera realmente instigó esa transacción para permitir que su billetera acceda a los datos, pero aquí me pongo un poco confuso: de toda mi lectura durante los últimos 6 o 7 días, reúno la billetera el software necesitaría firmar algún mensaje predeterminado que contenga, por ejemplo, el TXID usando la clave privada de la billetera, firmarlo y enviarlo al sistema junto con la clave pública, pero una vez que el sistema recibe los datos, puede verificar el mensaje usando la clave pública clave, ¿y qué? ¿Cómo prueba eso que el txid (o la dirección o lo que sea) en ese mensaje firmado fue firmado por la misma clave privada de la que se deriva indirectamente la transacción en cuestión? Me falta una parte que "reconcilia" los datos remotos de blockchain con los datos enviados desde la aplicación de billetera.
Entiendo la PKI básica y que las direcciones son derivaciones cifradas de una clave pública, pero la parte de la firma digital me está dando vueltas en la cabeza.
Gracias por leer. Cualquier ayuda sería muy apreciada.
Abrí una transacción aleatoria para este ejemplo: https://blockchain.info/tx/c929454d6c83c15ecd9931c005a5a7fbacb1faba69f0a49538ab334d2848c5a1
Guiones de entrada:
ScriptSig:
PUSHDATA(72)[3045022100eb1d36c6fe6c201e5594d90a7bdc73dd9a33d291e7e58ba74fec46ab2139c9c602207a7124819f9a004a36a0a2ac494603cfeecf38b8c12b3c6e3ff6dea74053706101]
PUSHDATA(33)[033f2223c8f6b74e75e4afd05811b8c9f55c8584abef768336e6ad61d931bef548]
El primer valor hexadecimal es la firma de la transacción. El segundo valor es la clave pública (punto de curva elíptica). Y a partir de este valor podemos derivar la dirección.
Si tiene otra firma que firma algo, y esta firma tiene la misma clave pública , eso prueba que este es el mismo tipo que realizó la transacción. Solo alguien que tenga una clave privada puede firmar algo.
La criptografía elíptica funciona de la siguiente manera: elegimos un número aleatorio, y esta será la clave privada. Luego multiplicamos este número y el punto EC llamado generador, y obtenemos la clave pública.
david schwartz
theruss