¿Cómo obtiene ImportPrivateKey la dirección si no la envío explícitamente?

Supongamos que acabo de usar vanitygen para crear esta clave:

Pattern: 1a
Address: e1aMGYXuGpUwDGH9gz3ZBs8UH746nRdEk6
Privkey: 5KhCszBi22hEZZixPEQkLAMtUVkxbGaxBFsH7a9iefqrxHmSXgH

Todo lo que tenía que hacer para importar esta clave era importar la Privkey. No se necesitaba nada con "Dirección" con ImportPrivKey.

Me gustaría conocer los detalles técnicos sobre cómo se puede extraer la Dirección cuando todo lo que se conoce es la clave privada.

He leído esto y esta pregunta, pero aún no he encontrado el ingrediente secreto sobre cómo se calcula o encuentra una dirección en formato binario con solo una clave privada. ¿Cómo se extrae la dirección solo de la clave privada?

Mi intención es aprender este proceso e implementarlo en C#. Tenga en cuenta que ya conozco el formato Base58Check, y no se menciona la clave privada en ningún wiki que haya visto al respecto.

Obtener una clave pública a partir de una clave privada sería una mejor respuesta en un SE de criptografía, ya que no es específico de Bitcoin.
Podría hacerse específico de Bitcoin si cambiamos el término "dirección" por el término "clave pública", aunque la pregunta base (y su respuesta) sigue siendo la misma.
@DavidPerry Estoy rompiendo ese hábito... ;) y actualicé la publicación

Respuestas (3)

Debería hacer esta pregunta en CryptoSE, ya que el problema no es específico de Bitcoin. Incluso he hecho eso por ti .

En breve:

La clave pública es QA=dAG donde G es el punto base en la curva definida en los parámetros acordados públicamente.

Y puede encontrar los parámetros de la curva de Bitcoin (secp256k1) en la wiki.

¿Ha mirado las referencias de http://en.wikipedia.org/wiki/Elliptic_Curve_DSA Me gusta: Certicom Research, Estándares para criptografía eficiente, SEC 1: Criptografía de curva elíptica, Versión 2.0, 21 de mayo de 2009.

El artículo Antecedentes técnicos de las direcciones de Bitcoin en Bitcoin Wiki describe en detalle cómo se obtiene una dirección de Bitcoin a partir de una clave privada .

Clave privada de la dirección de Bitcoin

Vi esto pero no veo dónde la clave privada se convierte en clave pública. Esa es solo la clave pública ECC para Base58. El artículo que enlazas dice When a private key is imported, it always corresponds to exactly one Bitcoin address. Any utility which performs the conversion can display the matching Bitcoin address. The mathematical conversion is somewhat complex and best left to a computer,... esa última parte me está dejando colgado, y los detalles en el otro enlace no ayudan, por lo que puedo decir.
Si multiplica la clave privada por el orden de la curva, obtiene el punto de clave pública. Si xes la clave privada Gxes la clave pública. Entonces es una simple multiplicación de EC para obtener la clave pública de la clave privada.
@DavidSchwartz ¿Hay algún manual básico sobre esto para los no matemáticos? Quizás secep256 sea único, pero todavía no entiendo esa variante de ECC.
Va a ser específico del idioma. Python: bitcointalk.org/index.php?topic=84238.0 Shell (Bash): github.com/grondilu/bitcoin-bash-tools Y puede haber otros.