Firmar una transacción de Bitcoin Core es un proceso crucial para asegurar que solo el propietario de una dirección de Bitcoin puede gastar los fondos asociados a ella. Este proceso implica el uso de claves privadas para generar una firma digital que autentica la transacción y demuestra la propiedad de los fondos.
https://www.youtube.com/watch?v=ytttqvZA0RA
En este artículo, te guiamos a través de los pasos necesarios para firmar una transacción de Bitcoin Core, explicando los conceptos clave, los diferentes algoritmos de firma y las herramientas disponibles.
¿Qué es firmar una transacción de Bitcoin?
Firmar una transacción de Bitcoin es como poner tu firma digital en un documento legal. La firma digital prueba que tú, y solo tú, eres el propietario de la clave privada asociada a la dirección de Bitcoin desde la que se envía la transacción. Esta firma se utiliza para desbloquear los fondos que están bloqueados en una dirección pública, asegurando que nadie más pueda gastar esos fondos sin tu autorización.
Para crear una firma, se utiliza la clave privada correspondiente a la clave pública de la dirección desde la que se envía la transacción. Esta firma tiene una conexión matemática única con la clave pública, lo que permite verificar la propiedad de la dirección sin revelar la clave privada.
Algoritmo ECDSA
Bitcoin utiliza el algoritmo de firma digital de curva elíptica (ECDSA) para generar y verificar firmas digitales. Este algoritmo se basa en las matemáticas de las curvas elípticas y proporciona un alto nivel de seguridad.
Pasos para firmar una transacción
El proceso de firma de una transacción de Bitcoin Core se puede dividir en los siguientes pasos:
Construir la transacción
El primer paso es construir la transacción. Esto implica especificar las entradas (los fondos que se van a gastar) y las salidas (las direcciones a las que se enviarán los fondos). La transacción también debe incluir información como la tarifa de la transacción y el tiempo de bloqueo. Una vez que se ha construido la transacción, se debe preparar para la firma.
Preparar los datos de la transacción
Los datos de la transacción deben estar en un formato específico para que se puedan firmar. Este formato depende del algoritmo de firma que se vaya a utilizar. Hay dos algoritmos principales de firma utilizados en Bitcoin: el algoritmo heredado y el algoritmo SegWit.
Algoritmo heredado
El algoritmo de firma heredado se utiliza para firmar transacciones que usan scripts de bloqueo no SegWit, como P2PK, P2PKH, P2MS y P2SH.
Los pasos para preparar los datos de la transacción para la firma con el algoritmo heredado son los siguientes:
- Eliminar los ScriptSig existentes. El ScriptSig es el script de desbloqueo que se usa para desbloquear las entradas de la transacción. Si ya se han firmado otras entradas, se deben eliminar sus ScriptSig de la transacción antes de firmar la entrada actual.
- Colocar el ScriptPubKey como un marcador de posición en el ScriptSig. El ScriptPubKey es el script de bloqueo que se usa para bloquear los fondos en una dirección pública. Antes de firmar una entrada heredada, se debe colocar el ScriptPubKey de la salida que se va a gastar en el ScriptSig de la entrada. Esto sirve como un marcador de posición para indicar la entrada que se está firmando.
- Agregar el tipo de hash de firma a los datos de la transacción. El tipo de hash de firma (SIGHASH) indica qué partes de la transacción se firmarán. El tipo de hash de firma más común es SIGHASH_ALL, que indica que la firma cubre todas las entradas y salidas de la transacción.
- Hacer un hash de los datos de la transacción. Una vez que los datos de la transacción están listos, se realiza un hash de ellos. Bitcoin utiliza un doble SHA-256 para hacer hash de los datos.
Algoritmo SegWit
El algoritmo de firma SegWit (Segregated Witness) se introdujo en la actualización de Segregated Witness y se usa para firmar transacciones que usan el nuevo script de bloqueo P2WPKH.
El algoritmo SegWit tiene dos ventajas sobre el algoritmo heredado:
- Es más eficiente.
- Requiere la cantidad de la entrada.
Los pasos para preparar los datos de la transacción para la firma con el algoritmo SegWit son los siguientes:
- Construir el preimage y el preimage hash. En lugar de hacer un hash de todos los datos de la transacción como una sola unidad, el algoritmo SegWit los divide en partes reutilizables y los reconstruye para crear un preimage hash.
- Agregar el tipo de hash de firma al preimage hash. Al igual que en el algoritmo heredado, se agrega un tipo de hash de firma al preimage hash.
- Hacer un hash del preimage. El preimage hash se hace hash usando un doble SHA-25
Firmar el hash de la transacción
Una vez que se ha hecho un hash de los datos de la transacción, se puede firmar el hash utilizando la clave privada. Este proceso se realiza utilizando el algoritmo ECDSA.
Para firmar el hash de la transacción, se necesita la clave privada y un nonce aleatorio. El nonce es un número aleatorio que se usa para crear una firma única.
Codificar la firma en DER
Después de firmar el hash de la transacción, la firma se codifica en DER (Distinguished Encoding Rules). DER es un formato estándar para codificar estructuras de datos criptográficos.
Agregar el tipo de hash de firma a la firma codificada en DER
Finalmente, se agrega el tipo de hash de firma a la firma codificada en DER. Esto asegura que la firma sea válida para la transacción específica.
Insertar el ScriptSig o la Witness en la transacción
Una vez que la firma está completa, se inserta en la transacción. El ScriptSig o la Witness se utilizan para desbloquear las entradas de la transacción y asegurar que solo el propietario de la clave privada puede gastar los fondos. La ubicación exacta de la firma en la transacción depende del tipo de script de bloqueo que se haya utilizado para bloquear los fondos.
Verificación de la firma
Para verificar una firma de Bitcoin, se necesita la firma (R y S), la transacción serializada y la clave pública correspondiente a la clave privada que se utilizó para generar la firma.
El algoritmo de verificación de firma toma el mensaje (un hash de la transacción o partes de la misma), la clave pública del firmante y la firma (valores R y S), y devuelve TRUE si la firma es válida para este mensaje y clave pública.
Ejemplos de código
Aquí se presentan algunos ejemplos de código que muestran cómo firmar una transacción de Bitcoin Core utilizando el algoritmo heredado y el algoritmo SegWit:
Algoritmo heredado
Si quieres conocer otros artículos parecidos a Cómo firmar una transacción de bitcoin core: tutorial paso a paso puedes visitar la categoría Finanzas / Inversiones.
