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.

Ilustración que muestra cómo una firma digital se crea a partir de una clave privada y prueba que eres el dueño de la clave pública.

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:

Diagrama que muestra datos de transacción conteniendo una entrada con una traba.

Pero, si colocas tu clave privada directamente en los datos de la transacción, todos en la red podrán verla:

Diagrama que muestra datos de transacción con una entrada siendo desbloqueada usando una clave privada directamente.

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:

Diagrama que muestra datos de transacción con una entrada siendo desbloqueada usando una firma digital.

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:

Diagrama que muestra cómo se crea una firma digital usando una clave privada y algunos datos de transacción.

Por lo tanto, cada firma digital está conectada a la transacción en la que se usa:

Diagrama que muestra cómo una firma digital está atada a los datos de 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.

Diagrama que muestra cómo una firma digital debe estar contenida en los mismos datos de transacción usados para crearla para ser válida.

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:

  1. Firmar: Combinas la clave privada + los datos de la transacción y usas algo de matemática para crear una firma digital.
  2. 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:

  1. Una parte aleatoria.
  2. 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):

Diagrama que muestra el punto generador siendo multiplicado por un número aleatorio grande.

La parte aleatoria de nuestra firma digital es el punto en la curva al que llegamos. Pero tomemos solo la coordenada x:

Diagrama que muestra la coordenada x siendo extraída del punto aleatorio en la curva.

Llamemos a eso "r", para abreviar.

Ilustración que muestra r (la coordenada x del punto aleatorio) como la primera parte de una firma digital.
  • 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).

Diagrama que muestra r siendo multiplicado por la clave privada.

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:

Diagrama que muestra el mensaje que queremos firmar sumándose a (r multiplicado por la clave privada).

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:

Diagrama que muestra la parte aleatoria de la firma siendo dividida por r.

Y listo, tenemos la parte vital de "firma" de nuestra firma digital. Llamémosla s, para abreviar.

Ilustración que muestra r y s como las dos partes de una firma digital.

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:

Diagrama que muestra el punto 1 en la curva elíptica durante la verificación de la firma.

Punto 2

Divide r por s. El segundo punto es entonces la clave pública multiplicada por ese valor:

Diagrama que muestra el punto 2 en la curva elíptica durante la verificación de la firma.

Verificación

Ahora, si sumamos esos dos puntos, obtenemos un tercer punto en la curva:

Diagrama que muestra el resultado de sumar el punto 1 y el punto 2 en la curva elíptica.

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.

Diagrama que muestra la coordenada x del punto 3 siendo igual a la coordenada x del punto aleatorio en la firma.

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