Claves Públicas

¿Qué es una clave pública?

Una clave pública es la contraparte de una clave privada.

Y, al igual que una clave privada, se muestra como una cadena hexadecimal.

Por ejemplo:

03e8375e9ef326c8e5b3f7c7366edc07a45939a6f48559614a1e18d644838b3390

Si no acortáramos esta clave pública a una dirección, este sería el "número de cuenta" al que enviarías bitcoins al hacer una transacción.

En fin, aquí está la parte interesante: tu clave pública se calcula a partir de tu clave privada.

¿Cómo obtienes una clave pública a partir de una clave privada?

Insertas una clave privada en una función matemática especial, y el resultado es una clave pública.

¿Qué función es esa?

Se llama multiplicación de curva elíptica.

Esto básicamente implica "rebotar" por el gráfico de una curva elíptica hasta que llegas a un conjunto final de coordenadas en el gráfico, y esas coordenadas resultantes son tu clave pública.

Será más fácil si te lo enseño...

¿Cómo es una curva elíptica?

Así:

Un gráfico simple que muestra la forma de una curva elíptica.

Además, la curva elíptica usada en Bitcoin viene con un punto de partida específico.

Un gráfico simple que muestra el punto generador en una curva elíptica.

Llamamos a ese punto de partida punto generador (G).

Y si fuéramos a hacer alguna "multiplicación" en esa curva (por ejemplo: "multiplicar" el punto de partida por 2), nos moveríamos por la curva así.

Diagrama que muestra la multiplicación de curva elíptica.

El hecho de que podamos trazar una tangente en cualquier lugar de la curva y que cruce un otro punto de la curva es una característica especial de las curvas elípticas.

Y ahí lo tienes. Acabamos de "multiplicar" la coordenada de partida G por 2 y encontramos la posición de la coordenada final 2G.

Esta es una ronda de multiplicación de curva elíptica.

¿Cómo creas una clave pública?

En el ejemplo anterior, multiplicamos G por 2 para obtener 2G.

Para obtener una clave pública, multiplicamos G por nuestra clave privada.

clave privada = b7ed7443c993af9937d9c869398bf4ed5f9523129e25dfb77ce4767fba405014
clave privada = 83192796475211405656707086712046461363785842576052176596271883290902735638548

clave pública = 83192796475211405656707086712046461363785842576052176596271883290902735638548 * G
Ícono de herramienta EC Multiply

Multiplicación de punto (EC Multiply)

Multiplique un punto en la curva elíptica secp256k1.

Punto 1
x:
0d
y:
0d
0d
Punto 1 × Multiplicador
x:
0d
y:
0d

O, en otras palabras, "rebota por la curva elíptica un número de veces igual a la clave privada".

Diagrama que muestra la multiplicación en una curva elíptica.

El punto final de descanso en la curva elíptica te dará un conjunto de coordenadas, y esas coordenadas forman la clave pública.

Entonces, si estas son las coordenadas a las que llegamos después de multiplicar G por nuestra clave privada:

x = 105034410509315626961767289640948690310492512927262445783804994734160408687504
y = 5516217054127125049495563880590479521608770728790951769271312566909207073125

Entonces todo lo que tenemos que hacer es convertir ambas a hexadecimal y unirlas...

clave pública (x) = e8375e9ef326c8e5b3f7c7366edc07a45939a6f48559614a1e18d644838b3390
clave pública (y) = 0c32117641c797f724e7435bc574cfc5f04aa560394af1efec8772f1a0505165

clave pública (x,y) = e8375e9ef326c8e5b3f7c7366edc07a45939a6f48559614a1e18d644838b33900c32117641c797f724e7435bc574cfc5f04aa560394af1efec8772f1a0505165
Ícono de herramienta Clave Pública

Clave Pública

Calcule la clave pública a partir de una clave privada.

0 bytes

Clave Pública

Coordenadas
0d
0d

Una clave pública es solo un punto en una curva elíptica. La clave pública final son esas coordenadas en hexadecimal.

Compresión

La curva es simétrica en el eje x, así que la clave comprimida guarda solo la coordenada x y si la y es par o impar. La x-only se usa en salidas Taproot.

0 bytes

Nunca introduzcas tu clave privada en un sitio, ni uses una clave privada generada por un sitio. Los sitios pueden guardar fácilmente la clave privada y usarla para robar tus bitcoins.

¡Y listo! ¡Una clave pública!

Claves Públicas Comprimidas

Para ahorrar espacio, las claves públicas (hoy en día) usan solo la coordenada x completa.

Esto es porque la curva elíptica es una ecuación (y² = x³ + 7), lo que significa que, si tienes la coordenada x, puedes calcular la coordenada y correspondiente.

Sin embargo, debido a la parte de la ecuación, y puede ser un número positivo o negativo:

Diagrama que muestra dos coordenadas y posibles para una dada coordenada x en la curva elíptica.

Así que la única información extra que necesitas para encontrar la coordenada y correcta es saber si está arriba o abajo del eje x. Y debido a cómo funcionan las curvas elípticas:

Así que, en lugar de tener que almacenar tanto la coordenada x como la y completas, puedes guardar solo la coordenada x completa y si la coordenada y es par o impar.

En Bitcoin, la polaridad de la coordenada y se representa con un prefijo:

Diagrama que muestra cómo un prefijo se usa para representar una de dos coordenadas y posibles en la curva elíptica.

Así que, mientras una clave pública no comprimida a la antigua empieza con 04, una clave pública comprimida empieza con 02 o 03:

clave pública (no comprimida) = 04e8375e9ef326c8e5b3f7c7366edc07a45939a6f48559614a1e18d644838b33900c32117641c797f724e7435bc574cfc5f04aa560394af1efec8772f1a0505165
clave pública (comprimida)     = 03e8375e9ef326c8e5b3f7c7366edc07a45939a6f48559614a1e18d644838b3390

Mucho más corta.

Parece mucho esfuerzo para ahorrar una pequeña cantidad de datos, pero, como las claves públicas se usan en casi todas las transacciones, esto termina ahorrando mucho espacio en la blockchain con el tiempo.

¿Por qué usamos multiplicación de curva elíptica para crear claves públicas?

Porque las curvas elípticas tienen dos propiedades útiles al crear un par de claves privada/pública.

  1. La multiplicación de curva elíptica es una "función trampa" (trapdoor). En otras palabras, no puedes volver de la clave pública para descubrir cuál era la clave privada.
    Una función trampa es una función fácil de calcular en una dirección, pero difícil de calcular en la dirección opuesta (encontrar su inversa) sin una información especial llamada "trampa".
  2. La clave pública tiene una conexión matemática con la clave privada. Como resultado, es posible probar esa conexión (con un poco más de matemática) sin tener que revelar tu clave privada.

    Así que, si te doy mi clave pública (o dirección), puedo probarte que la "poseo" sin tener que mostrarte mi clave privada.

    Esta característica es especialmente útil al hacer transacciones de bitcoin. Tu clave pública puede ponerse en una transacción cuando quieres recibir bitcoins, y no necesitas revelar la clave privada directamente cuando quieres gastarlos después (véase firmas digitales). Como resultado, eso significa que nadie puede obtener la clave privada y usarla para gastar bitcoins bloqueados a esa misma clave pública.

    Cuando digo probar que poseo una clave pública, quiero decir "mostrar que poseo la clave privada a partir de la cual se creó la clave pública".

¿Cómo puedes probar que posees una clave pública?

Este es un tema (o dos) completo por sí mismo. Pero, como esta es una pregunta tan irritantemente relevante, haré lo posible por cubrir lo básico.

Como se mencionó, hay una conexión matemática entre la clave privada y la clave pública.

Como resultado:

  1. Puedo pasar mi clave privada por más matemática de curva elíptica para obtener un nuevo valor (llamado firma digital).
  2. Puedo pasar mi clave pública por otra matemática de curva elíptica para obtener un nuevo valor.
Diagrama que muestra dos valores separados calculados a partir de la clave privada y la clave pública de forma independiente.

Ahora habrá un pequeño solapamiento entre esos nuevos valores:

Diagrama que muestra un solapamiento entre los dos valores separados calculados a partir de la clave privada y la clave pública de forma independiente.

Y ese solapamiento es suficiente para probar que existe una conexión matemática entre la clave pública y la clave privada.

Y como nadie puede recrear esa firma digital sin la clave privada, mi firma digital es suficiente para probar que yo "poseo" la clave pública.

Como resultado, puedo mostrarte que poseo una clave pública con una firma digital, y tú nunca necesitas ver mi clave privada.

Conclusión

Alabada sea la curva elíptica.