Las direcciones bitcoin o bitcoin address son una cadena única de números y letras que nos permiten enviar y recibir nuestras monedas de forma segura en la red Bitcoin.
¿Cómo se genera una dirección bitcoin? ¿Cuál es su secreto? Te lo contamos todo sobre este proceso.
Antes de comenzar, es indispensable mencionar que este artículo está dirigido a aquellos usuarios que poseen ciertos conocimientos sobre Bitcoin y el mundo criptográfico. Así que te recomendamos que repases ciertos temas propios de este mundo con el fin de que los comprendas. Con esto, tendrás bien claro la relación que existe entre Bitcoin y la creación de direcciones.
¿Por dónde tendrías que comenzar? Nosotros te recomendamos que leas: criptografía asimétrica, función hash, algoritmos SHA-256, ECDSA y ¿Qué es una dirección Bitcoin?
Bien, en el mundo de las criptomonedas, una dirección es un identificador, el lugar al que se asocia y destina una determinada cantidad de criptomonedas. Por lo que, cualquier persona que desee enviar o recibir criptomonedas necesitará disponer siempre de una dirección. Por ejemplo, en Bitcoin las direcciones públicas tienen generalmente esta apariencia: 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa. Como podemos ver, son un conjunto de letras y números alternados cuya longitud varía entre 26 y 32 caracteres.
Para crear una dirección, hacen falta un total de 9 pasos que explicaremos detalladamente a continuación.
Proceso para crear una dirección 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.
Características de las direcciones Bitcoin
- Cada dirección pública de Bitcoin pesa aproximadamente unos 25 bytes.
- Tienen una longitud de entre 26 y 32 caracteres.
- Pueden comenzar con el número 1, para direcciones estándar (P2PKH) o el número 3, para las direcciones multifirmas (P2SH). Asimismo, las direcciones SegWit empiezan con bc1 (bech32). Por otro lado, las direcciones testnet de Bitcoin comienzan por m o 2.
- La implementación de Base58Check entre sus muchas funciones, impide el uso de caracteres como O, I (en mayúsculas), y l (en minúscula) a fin de evitar que estos se confundan con el número 0 ó el número 1.