Firmas Digitales
¿Qué es una firma digital?
Una firma digital se usa para mostrar que conoces la clave privada conectada a una clave pública, sin tener que revelar la clave privada.
Así que, si alguna vez alguien te pregunta si tienes la clave privada de una clave pública específica (o dirección), puedes darle a esa persona una firma digital como prueba.
¿Por qué usamos firmas digitales en Bitcoin?
Cuando haces una transacción, necesitas desbloquear las salidas que quieres gastar.
Para eso, necesitas demostrar que "posees" la salida. Eso se hace probando que conoces la clave privada de la dirección a la que está bloqueada la salida:
Pero, si colocas tu clave privada directamente en los datos de la transacción, todos en la red podrán verla:
Y si alguien consigue tu clave privada, podrá usarla para desbloquear y gastar cualquier otra salida que haya sido bloqueada a esa misma dirección.
Entonces, ¿cómo podemos desbloquear salidas sin entregar nuestra clave privada?
Entra en escena la firma digital
Una firma digital puede crearse a partir de una clave privada para probar que conocemos la clave privada de una dirección.
Eso significa que podemos usar una firma digital para desbloquear salidas sin tener que entregar nuestra clave privada:
Es por eso que usamos firmas digitales en lugar de poner nuestras claves privadas directamente en los datos de la transacción.
¿Qué impide que alguien reutilice una firma digital?
Buena pregunta. Después de todo, si la clave privada puede desbloquear cualquier salida bloqueada a una dirección, ¿por qué alguien no puede tomar la firma digital y usarla para hacer lo mismo?
Respuesta: Porque toda firma digital está ligada a una transacción.
En otras palabras: no solo usas tu clave privada para crear una firma digital; usas tu clave privada y los propios datos originales de la transacción:
Por lo tanto, cada firma digital está conectada a la transacción en la que se usa:
Así que, si alguien intenta usar esa firma digital en una transacción diferente, no coincidirá con los datos de la transacción que se usaron para crearla, y los nodos de la red bitcoin la rechazarán.
Además, la firma digital también protege contra cualquier alteración de una transacción. Porque, si los datos de la transacción cambian (por ejemplo, alguien intenta cambiar el valor enviado o hacia dónde se envía), la firma digital dejará de funcionar.
¿Cómo funcionan las firmas digitales?
Matemática, la buena y vieja matemática.
Hay dos partes en el uso de firmas digitales:
- Firmar: Combinas la clave privada + los
datos de la transaccióny usas algo de matemática para crear una firma digital. - Verificar: Luego puedes tomar la firma digital + los
datos de la transacción+ la clave pública, hacer algo más de matemática, y el resultado confirmará si se usó una clave privada legítima para crear la firma digital.
Porque, recuerda, el objetivo de usar una firma digital es probar que eres el dueño de una clave pública.
No olvides que una dirección es solo una codificación de una clave pública. Así que, aunque envíes bitcoins a una dirección, en realidad los estás bloqueando a una clave pública.
Sé que el proceso parece humo y espejos magia al principio, pero sinceramente, por debajo es solo matemática.
¿Cómo creas una firma digital?
Una firma digital contiene dos partes:
- Una parte aleatoria.
- Una parte de firma.
1. Parte Aleatoria
Empieza generando un número aleatorio grande.
Luego lo multiplicas por el punto generador en la curva elíptica (el mismo punto generador usado al crear una clave pública):
La parte aleatoria de nuestra firma digital es el punto en la curva al que llegamos. Pero tomemos solo la coordenada x:
Llamemos a eso "r", para abreviar.
- Este es básicamente el mismo proceso de crear una clave privada y una clave pública. Solo que aquí lo hacemos para añadir un elemento aleatorio a nuestra firma digital.
- Ese elemento aleatorio ayuda a garantizar que cada firma digital sea única.
Así que ahora tenemos la primera mitad de nuestra firma digital lista, pero todavía no hemos usado nuestra clave privada para nada. Ahí es donde entra la segunda mitad…
2. Parte de Firma
Luego tomamos nuestra clave privada y la multiplicamos por r (la coordenada x de ese punto aleatorio en la curva que acabamos de encontrar).
Luego añadimos lo que queremos firmar. Eso se llama mensaje. En Bitcoin, el mensaje es el hash de todos los datos de la transacción que contiene la salida que queremos desbloquear:
Incluir el hash de la transacción ata la firma a una única transacción (para que no pueda usarse en una transacción diferente).
Por último, por si acaso, dividimos todo eso por ese número aleatorio inicial con el que empezamos:
Y listo, tenemos la parte vital de "firma" de nuestra firma digital. Llamémosla s, para abreviar.

Sr. A. Digital.
Ahora viene la parte divertida…
Si alguien nos pide probar que conocemos la clave privada de una clave pública, podemos darle a esa persona nuestra firma digital (r y s) como prueba.
Pero ¿cómo demonios puede alguien usar eso como prueba?
¿Cómo verificas una firma digital?
Para verificar que una firma digital fue hecha usando una clave privada correcta, la persona a la que le das esa firma digital necesita usar ambas partes para encontrar dos nuevos puntos en la curva elíptica:
Punto 1
Divide el mensaje por s. El primer punto es entonces el punto generador multiplicado por ese valor:
Punto 2
Divide r por s. El segundo punto es entonces la clave pública multiplicada por ese valor:
Verificación
Ahora, si sumamos esos dos puntos, obtenemos un tercer punto en la curva:
Y si la coordenada x de ese tercer punto es igual a la coordenada x del punto aleatorio con el que empezamos (r), entonces eso es la prueba de que la firma digital fue creada usando la clave privada conectada a esta clave pública.
Esta es una explicación simplificada de la matemática involucrada en las firmas digitales. Para una explicación más técnica, ve ECDSA.
Recursos
- Bitcoin 101: The Magic of Signing & Verifying – Un excelente video introductorio (en inglés) que cubre la matemática real detrás de la generación y verificación de firmas.