¿Cómo obtiene la clave pública de su entero aleatorio de 256 bits?

Una vez que he lanzado una moneda justa 256 veces y tengo el entero aleatorio de 256 bits que voy a usar como mi clave privada, ¿cómo se obtiene la clave pública?

He leído:

Dada una clave privada, ¿cómo se obtiene una dirección pública?

Y:

https://en.bitcoin.it/wiki/Dirección

Pero no encuentro la respuesta a mi pregunta. Entiendo que se utilizan curvas ECDSA, pero no entiendo qué parte es la clave pública y cuál es la relación entre la clave pública (¿única?) Y las direcciones que proporciona.

Si convierte la clave privada en una clave pública realizando una multiplicación con el punto base de la curva, surge la pregunta: ¿cuál es el punto base de la curva?

¿El punto base de la curva es parte de la clave privada?

¿Lo que significaría que lo que se llama la "clave privada" no es realmente solo una "clave privada", sino más bien un par de claves del que puede, en cualquier momento, derivar la clave pública?

Respuestas (2)

El punto base de la curva es una constante bien conocida. Dado que Bitcoin usa SECp256k1 , el punto base es:

04 (punto sin comprimir)

79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9
59F2815B 16F81798 (primera coordenada)

483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448
A6855419 9C47D08F FB10D4B8 (segunda coordenada)

(Consulte la página 15 de mi enlace).

La clave privada es un número entero del que puede derivar la clave pública y producir firmas que se pueden verificar con la clave pública.

All bitcoin addresses share a common base point known as a generator, G = (0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8) on the elliptic curve defined as y^2 = x^3 + 0 * x + a, over the field defined by P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f.

Me temo que todo eso es bastante técnico, pero si conoce las matemáticas del módulo, no es extremadamente complejo, y los valores se pueden encontrar si busca sepc256k1 en los parámetros de dominio de curva elíptica recomendados por Standards for Efficient Cryptography .

La curva elíptica sobre el campo tiene la propiedad de que cuando se agrega un punto a sí misma. Bitcoin usa este hecho para calcular la clave pública agregando el punto generador a sí mismo una gran cantidad de veces. Su clave privada es simplemente la cantidad de veces que se agrega el punto a sí mismo.

If your private key happened to be 1, your public key would be identical to G. That is obviously no good because that is a very well known point, but simply changing your private key to 2 will yield the public key (0xc6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5, 0x1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a) que es extremadamente diferente del generador. Normalmente se usa una clave privada enorme , lo que hace que sea computacionalmente inviable intentar retroceder de la clave pública a la clave privada.

La clave pública es "simplemente" private_key * G, en la curva elíptica sobre el campo. Escribo "simplemente" porque es un poco complicado, pero las matemáticas en sí no son muy complicadas. Es solo suma, resta, multiplicación y división con residuos. La parte realmente difícil es que los números involucrados son tan increíblemente grandes que es más o menos imposible para el cerebro humano comprender lo que significan, y algunas de las definiciones de los cálculos sobre curvas elípticas difieren de lo que estás acostumbrado, lo que puede ser confuso