¿Qué es una dirección Bitcoin?

Otros tipos de dirección en Bitcoin

Direcciones SegWit

Las direcciones SegWit son distintas a las direcciones iniciales de Bitcoin. Estas direcciones generalmente comienzan con el número 3 o con los caracteres “bc1”. Las que comienzan con 3 son direcciones del del tipo P2SH, mientras que las que empiezan con bc1 son para SegWit nativo. Sin embargo es importante recalcar que toda dirección que empieza con 3 no es necesariamente una dirección SegWit. Esto se debe a que ese mismo prefijo se usa para direcciones de firma múltiple. En cambio, las direcciones que comienzan con “bc1” son específicamente SegWit.

Direcciones testnet

Una dirección testnet es bastante similar a las direcciones iniciales de Bitcoin, salvo que las direcciones testnet comienzan con los prefijos «m» o «2». Del resto, el proceso de generación de las direcciones en la red testnet es idéntico a proceso de generación de direcciones original de Bitcoin.

Direcciones de firma múltiple

Una de las grandes características de Bitcoin es su capacidad de generar monederos con múltiples firmas. Estos monederos generan direcciones especiales en las que se requiere de una combinación de múltiples claves privadas para poder acceder a los fondos que tienen. Debido a que estas direcciones utilizan funciones más nuevas, las direcciones de firmas múltiples comienzan con el prefijo 3. Esto diferencia claramente las direcciones antiguas de Bitcoin con el resto de direcciones de la criptomoneda. Estas direcciones además pueden considerarse como el equivalente de emitir un cheque a dos partes y en la que la firma de ambas personas es necesaria para poder acceder a los fondos.

El requisito real (número de claves privadas necesarias, sus claves públicas correspondientes, etc.) que deben cumplirse para gastar los fondos es decidido de antemano por la persona que genera este tipo de dirección, y una vez que se crea una dirección, el requisito no puede ser cambiado sin generar una nueva dirección.

¿Cómo se crea una dirección de Bitcoin?

El proceso para crear una dirección Bitcoin se inicia con la generación de una clave privada que nos proporcionará el uso exclusivo de los fondos. A partir de ésta, se genera una clave pública, que nos permitirá compartir información con otras personas sin poner en riesgo los nuestros.

La obtención de la clave pública a través de la clave privada se debe gracias a la aplicación del algoritmo ECDSA. Una implementación muy eficiente de la criptografía de curva elíptica, donde se emplea como punto generador a la curva secp256k1 para obtener la clave pública.

Entonces, una vez generadas este par de claves, se da inicio al proceso de generar las direcciones públicas de Bitcoin.

1.- Seleccionar la clave pública obtenida a partir del proceso anterior. Es decir, de la aplicación del algoritmo ECDSA a la clave privada. La cual debe tener una apariencia similar a ésta:

0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352

2.- Aplicar un hashing a la clave pública por medio de la implementación del algoritmo SHA-256. Este algoritmo permite generar outputs (salidas) de extensión fija a partir de inputs (entradas) de extensión variable, que son irreversibles. Por lo que son unidireccionales y no es posible deducir la clave privada a través de la pública.

Luego de aplicar la función hashing obtendremos una secuencia de 256 bits:

0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc194ff83f4f7cc9b1378e98

3.- Hashear de nuevo la salida obtenida anteriormente, aplicando en este caso el algoritmo RIPEMD-160. Con el cual obtendremos una secuencia de 160 bits:

f54a5851e9372b87810a8e60cdd2e7cfd80b6e31

4.- Añadir el byte de versión usado para la red principal de Bitcoin (0x00) delante de la salida obtenida de la aplicación del algoritmo de hashing RIPEMD-160. Con esto obtendremos una dirección Bitcoin en formato hexadecimal, que se verá así:

00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31

Y al añadir este byte también podemos identificar y distinguir las direcciones Bitcoin de otras criptomonedas que también emplean el protocolo.

5.- Realizar el hash con el algoritmo SHA-256 al resultado obtenido del RIPEMD-160. Este paso es necesario como mecanismo de verificación para comprobar que la dirección de Bitcoin está bien escrita.

ad3c854da227c7e99c4abfad4ea41d71311160df2e415e713318c70d67c6b41c

6.- Aplicar el hash con el algoritmo SHA-256 al resultado del hash anterior. Con este paso se concatena la dirección obtenida. Como ya mencionamos, el algoritmo SHA-256 se aplica dos veces como mecanismo de verificación.

c7f18fe8fcbed6396741e58ad259b5cb16b7fd7f041904147ba1dcffabf747fd

7.- Elegir los 4 primeros bytes del último hash SHA-256, que representan el checksum de la dirección Bitcoin. En este ejemplo serían:

c7f18fe8

8.- Agregar los 4 bytes del checksum del punto anterior, al hash extendido RIPEMD-160 del punto 4. Esto es una dirección binaria de Bitcoin de 25 bytes:

00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31c7f18fe8

9.- Convertir el resultado de la cadena de bytes utilizando la codificación Base58Check, utilizada para codificar las direcciones de Bitcoin. Con lo que la cadena de bytes se transformará en una cadena base58.

1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs

Este es el formato más empleado para las direcciones de Bitcoin. Así la codificación Base58Check convierte la cadena de bytes en un conjunto de números y letras mayúsculas y minúsculas, con la finalidad de que sean más fáciles de distinguir. Aunque en conjunto siguen siendo caracteres ilegibles y que a primera vista no son crípticos.

Así se puede crear una dirección bitcoin para que podamos usarla como deseemos. Todo este proceso también se lleva a cabo con las Vanity Address, solo lo que este último caso realizamos una generación por fuerza bruta con el fin de buscar una dirección personalizada.

Puedes aprender más sobre este tipo de direcciones desde nuestro articulo sobre Vanity Addres.