El Elliptic Curve Digital Signature Algorithm (ECDSA) es un algoritmo criptográfico esencial para Bitcoin, ya que garantiza el control efectivo y seguro de la propiedad de los fondos. Para comprender cómo funciona, es crucial comprender los conceptos clave involucrados.

Claves Privadas y Públicas en ECDSA
Las claves privadas y públicas son dos componentes fundamentales en ECDSA. Estas claves se generan como pares, donde la clave privada es un número secreto conocido solo por el creador y la clave pública se deriva de ella, pero no se necesita mantener en secreto.
Clave Privada
La clave privada es un número secreto que solo conoce el usuario que lo generó. Si bien puede ser un número aleatorio, la mayoría de las billeteras, desde 2019, utilizan esquemas de claves deterministas derivados de BIP 003En Bitcoin, un usuario que puede demostrar la propiedad de las salidas no gastadas (UTXO) puede usar la clave privada para gastar los fondos. Una clave privada en Bitcoin es un entero de 256 bits (32 bytes) sin signo.
Clave Pública
La clave pública es una coordenada que corresponde a la clave privada, pero no necesita mantenerse en secreto. Se puede calcular a partir de la clave privada, pero no al revés. Una clave pública se utiliza para determinar si una firma es genuina utilizando ECDSA, validando que la firma fue generada por la clave privada correspondiente a la clave pública proporcionada, sin necesidad de revelar la clave privada. En Bitcoin, las claves públicas pueden ser comprimidas o no comprimidas.
- Claves públicas comprimidas : tienen 33 bytes, consisten en un prefijo (0x02 o 0x03) y un entero de 256 bits llamado 'x'.
- Claves públicas no comprimidas : tienen 65 bytes, consisten en un prefijo constante (0x04), seguido de dos enteros de 256 bits llamados 'x' e 'y' (2 32 bytes). El prefijo de una clave comprimida permite derivar el valor 'y' a partir del valor 'x'.
Firmas en ECDSA
Las firmas son cadenas de bytes que demuestran que se utilizó una clave privada para firmar un mensaje. Se generan matemáticamente a partir de un hash del mensaje que se está firmando y una clave privada. La firma en sí misma son dos números conocidos como 'r' y ', y el mensaje que se firma es la transacción de Bitcoin (sin los datos de la firma). Con la clave pública, se puede utilizar un algoritmo matemático (verificación de firma) en la firma para determinar que fue creada originalmente a partir del hash y la clave privada, sin necesidad de conocer la clave privada. Las firmas suelen tener 71, 72 o 73 bytes de longitud, con probabilidades de aproximadamente 25%, 50% y 25%, respectivamente.
El Papel de la Curva Elíptica en ECDSA
El ECDSA utiliza la curva elíptica como base para un sistema de firma digital. En esencia, las claves públicas y las firmas son puntos en una curva elíptica. Si ambos puntos se crean a partir de la misma clave privada (un número grande), existirá una conexión geométrica entre ellos, lo que demuestra que la persona que creó la firma también creó (o "posee") la clave pública.
En Bitcoin, las firmas elípticas deben firmar un hash de un "mensaje de transacción" que puede ser reproducido fácilmente por los nodos que validan la firma durante el proceso de validación de transacciones. El mensaje que se hashea para la firma contiene los siguientes elementos concatenados en una sola cadena:
- nVersion : versión de la transacción (4 bytes, little endian)
- hashPrevouts : concatenación de la(s) fuente(s) de entrada (hash de 32 bytes)
- hashSequence : concatenación del valor/valores nSequence de entrada (hash de 32 bytes)
- outpoint : Outpoint para la entrada que se está gastando (TXID / Vout) (hash de 32 bytes + 4 bytes, little endian)
- scriptLen : longitud del scriptPubKey de entrada para la entrada que se está gastando (formato VarInt)
- scriptPubKey : script para la entrada que se está gastando (scriptLen bytes)
- value : cantidad de satoshis que se están gastando por la entrada (8 bytes, little endian)
- nSequence : valor de secuencia para la entrada que se está gastando (4 bytes, little endian)
- hashOutputs : hash de la(s) salida(s) que se están firmando (hash de 32 bytes)
- nLocktime : tiempo de bloqueo de la transacción (4 bytes, formato de tiempo de bloqueo Little Endian)
- Bandera Sighash : (4 bytes, XX000000 donde XX es la bandera Sighash)
Variaciones basadas en las Banderas Sighash
Dependiendo de la bandera Sighash que se configure, el mensaje de firma se puede adaptar para incluir o excluir varios elementos de la transacción.

hashPrevouts
Si la bandera ANYONECANPAY no está configurada, hashPrevouts es el doble SHA256 de la serialización de todas las salidas de entrada. Por ejemplo: SHA256D(CAT(TXID1/Out1, TXID2/Out2, TXID3/Out3)
Si la bandera ANYONECANPAY está configurada, hashPrevouts es un uint256 de 0x0000......0000.
hashSequence
Si ninguna de las banderas Sighash ANYONECANPAY, SINGLE, NONE está configurada, hashSequence es el doble SHA256 de la serialización de nSequence de todas las entradas.
Por ejemplo: SHA256D(CAT(inputnSequence, inputnSequence, inputnSequence)

Si una o más de las banderas Sighash ANYONECANPAY, SINGLE o NONE están configuradas, hashSequence es un uint256 de 0x0000......0000.
hashOutputs
Si la bandera Sighash ALL está configurada, hashOutputs es el doble SHA256 de la serialización de todas las salidas en formato Output. Por ejemplo: SHA256D(CAT(value1/scriptLen1/scriptPubkey1, value2/scriptLen2/scriptPubkey2, value3/scriptLen3/scriptPubkey3)
Si la bandera Sighash SINGLE está configurada y el índice de entrada es menor que el número de salidas, hashOutputs es el doble SHA256 de la salida del mismo índice que la entrada en formato Output.
De lo contrario, hashOutputs es un uint256 de 0x0000......0000.
Aplicando las Banderas SIGHASH
Todas las firmas incluyen banderas SIGHASH que le indican al validador de transacciones qué partes del mensaje se utilizaron en la construcción del hash del mensaje.
ECDSA es un algoritmo fundamental que garantiza la seguridad de las transacciones en Bitcoin, asegurando que solo el propietario de la clave privada pueda gastar los fondos. El uso de la curva elíptica, las claves privadas y públicas, y las firmas digitales se combinan para proporcionar un sistema robusto y seguro para controlar la propiedad de las bitcoins.
Si quieres conocer otros artículos parecidos a Elliptic curve digital signature algorithm (ecdsa) en bitcoin: una explicación detallada puedes visitar la categoría Finanzas / Inversiones.
