¿Cómo se crea una dirección o clave pública en Bitcoin? (X)

(OroyFinanzas.com) – Vamos a explicar en más detalle en este artículo cómo se crea una dirección o clave pública en el protocolo Bitcoin. Para entender este proceso de creación, es recomendable entender los siguientes conceptos de forma superficial antes de seguir leyendo a no ser que sea matemático o informático:

Criptografía simétrica o de clave privada, para entender la diferencia con la criptografía asimétrica y el origen de la criptografía que nos ayudará a entender mejor el protocolo de la criptomoneda Bitcoin.

Criptografía asimétrica o de clave pública, para entender las aplicaciones de la criptografía asimétrica y su aplicación en el protocolo Bitcoin para la creación de claves públicas y privadas.

Funciones hash, para entender qué es un hash y qué características tiene una función hash.

Curvas elípticas y ECDSA, para entender qué es una curva elíptica y por qué se ha utilizado este algoritmo para crear las direcciones públicas de Bitcoin que forman parte de la criptografía asimétrica.

SHA-256 y RIPEMD-160, para entender el origen de estas funciones hash y su relevancia en el protcolo Bitcoin.

El proceso de creación de una dirección pública de Bitcoin hasta que la obtenemos como en este ejemplo 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM está formado por diez pasos. En este artículo vamos a explicar de forma más detallada esos diez pasos.

Proceso de creación de una clave pública Bitcoin

El proceso de creación de una dirección o clave pública Bitcoin consiste en 10 pasos según Bitcoin.it/wiki:

0 – Tener una clave privada ECDSA (65 bytes, o sea, 1 byte 0x04, 32 bytes corresponden a la coordenada X, 32 bytes corresponden a la coordenada Y): 18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725

ECDSA es el algoritmo de curva elíptica que se utiliza en el protocolo Bitcoin para crear un par de claves privada y pública. La clave pública ECDSA se deriva de la clave privada, pero no se puede hacer el proceso inverso de derivar la clave privada a partir de la clave pública. Nuestro artículo sobre curvas elípticas y ECDSA explica más detalles del funcionamiento de estos algoritmos y su relevancia para el protocolo Bitcoin.

1 byte para 0x04 corresponde al código de versión de claves no comprimidas (uncompressed).

1 – Seleccionar la clave pública generada por ECDSA: 0450863AD64A87AE8A2FE83C1AF1A8403CB53F53E486D8511DAD8A04887E5B23522CD470243453A299FA9E77237716103ABC11A1DF38855ED6F2EE187E9C582BA6

Esta es la clave pública ECDSA que se genera a partir de la clave privada ECDSA del punto anterior.

2 – Hacer un hash con SHA-256 sobre la clave pública: 600FFE422B4E00731A59557A5CCA46CC183944191006324A447BDB2D98D4B408

SHA-256 es una función hash que se utiliza varias veces en el proceso de creación de una clave pública. En nuestro artículo sobre SHA-256 explicamos el origen de este algoritmo y su aplicación en el protocolo Bitcoin.

3 – Hacer un hash con RIPEMD-160 sobre el resultado anterior del hash SHA-256:

010966776006953D5567439E5E39F86A0D273BEE

RIPEMD-160 es una función hash no muy conocida. Se asume que Satoshi Nakamoto decidió utilizar este algoritmo para poder crear direcciones públicas más cortas, pero que fueran seguras al mismo tiempo. En nuestro artículo sobre RIPEMD-160 explicamos qué es y por qué se utiliza en la creación de direcciones públicas Bitcoin con más detalle.

4 – Añadir el byte de versión delante del hash que ha creado RIPEMD-160 hash (0x00 para la Main Network del protocolo Bitcoin): 00010966776006953D5567439E5E39F86A0D273BEE

Este byte permite distinguir una dirección de Bitcoin de otras criptomonedas que utilicen el mismo protocolo. Por ejemplo, Namecoin, cuyas direcciones empiezan por “N” o “M” y la red de pruebas de Bitcoin llamada Testnet, cuyas direcciones empiezan por “n” o “m”.

5 – Hacer un hash SHA-256 sobre el resultado extendido de RIPEMD-160: 445C7A8007A93D8733188288BB320A8FE2DEBD2AE1B47F0F50BC10BAE845C094

Explicamos en más detalle en nuestro artículo sobre RIPEMD-160 porque se aplica SHA-256.

6 – Hacer un hash SHA-256 sobre el hash anterior SHA-256: D61967F63C7DD183914A4AE452C9F6AD5D462CE3D277798075B107615C1A8A30

Con este paso se crean los dígitos de control de una dirección, permitiendo fácilmente identificar su validez.

7 – Seleccionar los primeros 4 bytes del último hash SHA-256 hash. Ese es el identificativo checksum de la dirección pública: D61967F6

Con los dígitos de control se puede identificar direcciones erróneas de forma automática.

8 – Añadir los 4 bytes del checksum del punto anterior al hash extendido RIPEMD-160 del punto 4. Esto es una dirección Bitcoin de 25 bytes binaria: 00010966776006953D5567439E5E39F86A0D273BEED61967F6

Las direcciones públicas Bitcoin tienen dígitos de control como las cuentas corrientes; por eso en general no es posible equivocarse al teclear una dirección pública. Pero si por cualquier razón se creara una dirección con el formato correcto, pero la dirección no tiene propietario o el propietario del fichero wallet.dat (el fichero de un monedero donde se almacenan las claves) del monedero Bitcoin ha perdido su clave privada entonces el dinero estaría perdido para siempre.

9 – Convertir el resultado de la cadena de bytes (string en inglés) a una cadena con base58 utilizando el codificado Base58Check. Y con eso obtenemos finalmente nuestra dirección pública Bitcoin con este formato: 16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM

Las direcciones públicas en Bitcoin pueden empezar con un 1 o 3. Lo más común es ver direcciones con 1. Las direcciones con 3 al principio son de pagos multi-firma. Un pago multi-firma tiene dos o más claves privadas y todas deben firmar el pago que se quiera hacer para liberar el saldo de una clave pública.

Las direcciones públicas Bitcoin que utilizan la versión byte 0x00 (00 es el código para el protocolo Bitcoin, 6f por ejemplo es el código de la red de prueba, 34 para Namecoin) empiezan por el digito ‘1’. Las direcciones publicas Bitcoin que utilizan la versión byte 0x05 empiezan por el digito ‘3’.

Las direcciones públicas pueden tener de 27-33 caracteres de longitud.

Una clave privada empieza por 5 aunque normalmente no veremos muchas, por razones obvias de seguridad, aparte de las que tenemos nosotros mismos.

Cada dirección pública pesa más o menos 500 bytes.

¿Qué es Base58Check en Bitcoin?

El codificado Base58Check es específico del protocolo Bitcoin y no se parece a otros codificados Base58.

El valor Hash y el checksum se convierten a una cada alfanumérica utilizando Base58Check. El código fuente del protocolo Bitcoin explica porque se utiliza Base58Check en vez de Base64 en las direcciones públicas:

// – Evitar caracteres como 0OIl que son muy similares en algunas tipografías y podrían ser usados para crear direcciones públicas que son visualmente idénticas.

// – Una cadena de números no alfanuméricos se acepta con menos facilidad como cuenta.

// – No habrá saltos de página en los emails al no haber puntuación.

// – Al hacer doble clic sobre la cadena alfanumérica se selecciona toda la cadena como una palabra.

Esta presentación en Slideshare.com de Ash Moran explica de una forma muy clara todo el proceso de creación de una clave pública incluyendo una explicación para Base58:

En nuestro próximo artículo explicaremos los tipos de monederos o wallets que existen para realizar pagos y gestionar las claves privadas.

© OroyFinanzas.com

loading...

© OroyFinanzas.com

Sobre el autor

Alex Preukschat
Autor de BitcoinComic.org - Estudioso del dinero en todos sus formatos con énfasis en el oro y Bitcoin. Twitter @AlexPreukschat

1 Comentario en "¿Cómo se crea una dirección o clave pública en Bitcoin? (X)"

  1. Marcela Bahamón Laverde | 3 febrero 2014 at 23:38 pm |

    ¿Existe alguna reglamentación para el uso de Bitcoins en Colombia?, ¿por qué su uso no se ha disparado como en otros países?

    Gracias.

Comments are closed.

mencionado en: