Glosario / Transacciones y comisiones
Firma digital
También se conoce como Firma o Firma ECDSA.
- ¿Qué es una firma digital?
- Una firma digital es la prueba, producida con una clave privada, de que quien autorizó una transacción de bitcoin controlaba la clave en la que estaban bloqueadas las monedas de esa transacción, y de que los detalles no se han alterado.
Bitcoin ya no es solo ECDSA. Las monedas en direcciones que empiezan por 1, 3 o bc1q se desbloquean con firmas ECDSA de 71 o 72 bytes; las monedas en direcciones que empiezan por bc1p usan firmas Schnorr de 64 bytes, activas desde noviembre de 2021. En cualquier caso, la firma demuestra el control de una clave, y nunca demuestra quién es la persona.
Cómo funciona
Producir una firma requiere tres ingredientes: una clave privada, un número aleatorio de un solo uso llamado nonce y un hash de la transacción, recortada según el indicador elegido para esa entrada.
El resultado son dos números calculados sobre secp256k1, la curva elíptica que bitcoin usa desde su primera versión. La verificación ejecuta la misma aritmética a la inversa con la clave pública, y un nodo la realiza dentro del opcode (código de operación) de script OP_CHECKSIG. En ninguna etapa se cifra nada, y la firma no revela nada sobre la clave privada que hay detrás.
Los dos esquemas en uso empaquetan esos dos números de forma distinta. Una firma ECDSA va envuelta en DER, y por eso ocupa 71 o 72 bytes en lugar de una longitud fija, y el último byte no forma parte de la firma en absoluto: es el indicador que dice qué partes de la transacción cubre la firma. Una firma Schnorr según BIP340 ocupa 64 bytes exactos, sin envoltura, y el byte del indicador se omite por completo cuando se aplica el valor predeterminado, así que los 65 bytes solo aparecen cuando un firmante quiere algo inusual.
El nonce es la parte que sale mal. Si se usa el mismo dos veces con la misma clave, la clave privada se despeja con álgebra escolar, y no es una preocupación teórica: el 11 de agosto de 2013, bitcoin.org publicó un aviso sobre un fallo de Android que hacía que las aplicaciones de billetera de los teléfonos afectados generaran valores repetidos, y como consecuencia se robaron monedas. Ahora las billeteras derivan el nonce de forma determinista a partir de la clave y del mensaje, según el RFC 6979 para ECDSA y una regla equivalente dentro de BIP340.
Dónde aparece
Todo gasto que usted hace contiene al menos una. En un explorador de bloques es la larga cadena hexadecimal del testigo de una entrada SegWit o del script de desbloqueo de una entrada heredada (legacy), y el 01 final de las firmas ECDSA es el indicador, no parte de las matemáticas.
Las firmas también funcionan fuera de las transacciones. Firmar un mensaje simple con la clave que hay detrás de una dirección demuestra que usted controla esa dirección sin mover ni un satoshi, y así es como los exchanges verifican un destino de retiro, como se elaboran las certificaciones de prueba de reservas y como un vendedor de un mercado entre pares demuestra que una dirección es realmente suya. El formato original solo funcionaba con direcciones que empezaban por 1; BIP322 generaliza la firma de mensajes a todos los tipos de dirección que se usan hoy.
Esa distinción importa siempre que alguien le pida firmar algo. Un mensaje firmado no puede mover monedas. Una firma sobre una transacción puede moverlas todas, y la única forma fiable de saber cuál de las dos le están pidiendo es leer la pantalla de su billetera de hardware y no la del sitio web.
Firma digital frente a hash de firma
El hash de firma es el valor de entrada; la firma es el resultado. Su billetera primero construye un hash que fija un subconjunto concreto de la transacción y luego firma ese hash, así que la firma no dice absolutamente nada sobre las partes que el hash dejó fuera. No es un tecnicismo. Es la razón misma de que existan los indicadores de sighash, y explica cómo dos firmas de una misma transacción pueden estar protegiendo cosas completamente distintas.