Una de las creaciones de Satoshi Nakamoto con el fin de hacer realidad a Bitcoin es la codificación Base58, un tipo de función criptográfica especialmente diseñada para Bitcoin cuya función principal es la de transformar los bytes resultantes de la sintetización de datos representados por una serie de bytes, (a la que se le aplica un proceso criptográfico específico para transformar la salida a un formato estandarizado dentro de la red) en algo que fuera fácilmente legible y verificable.
La función no solo puede codificar la información, sino también decodificarla y hacer el checksum (suma de verificación) de la misma. De hecho, todas estas funciones son fácilmente identificables en el código fuente de Bitcoin. En primer lugar, las definiciones de todas estas funciones están disponibles en el header (cabecera de definición de funciones y macros en C/C++), base58.h, disponible en el siguiente enlace.
Mientras que el código de las funciones puede ser revisado y verificado revisando el archivo base58.cpp, disponible en este otro enlace. Son estas dos partes las que hacen posible el funcionamiento de Base58 dentro de Bitcoin.
Una función para facilitar el uso de Bitcoin
Así, básicamente Base58 hace algo que nos facilita el uso de Bitcoin: transformar los datos de origen de una dirección al formato legible que conocemos de las mismas. Por ejemplo, algo tan sencillo como esta función es lo que nos permite poder reducir una gran cantidad de datos, como lo es una clave ECDSA, en algo mucho más manejable y legible, como lo es una dirección de Bitcoin con sus 20 caracteres de largo (en la versión estándar o legacy de estas direcciones y que empiezan por 1 o 3).
Ahora bien ¿Cómo se da todo este proceso? Pues bien, el proceso es bastante sencillo y se puede dividir en los siguientes pasos:
- En primer lugar, se toman los datos de versión/aplicación, junto a los datos correspondientes a la clave pública de nuestras criptomonedas. Estos datos son tratados en bytes.
- Seguidamente se comienza a calcular el hash SHA-256 de todos los datos concatenados. Aquí tenemos nuestro primer SHA-256.
- El resultado anterior se toma como valor para una nueva ronda de SHA-256, y con ello tenemos el hash SHA-256 del hash anterior.
- Con el segundo hash calculado, tomaremos los cuatro primeros bytes resultantes del mismo.
- Ahora concatenamos los datos del segundo hash SHA-256 (paso 3) y lo unimos al conjunto de datos del paso 1.
- La concatenación anterior será tratada como un conjunto de bytes en formato big-endian (un formato de almacenamiento y tratamiento de datos a nivel computacional). En este punto, comienza la conversión de datos a Base58, usando un alfabeto especial (definido en la siguiente imagen). Durante todo este proceso se tiene el cuidado de normalizar el resultado para que no tenga ceros de Base58 al inicio de la cadena (en ese caso se representan con el valor «1»).
- Al final, el proceso termina con una concatenación de todos los «1»resultantes en el paso anterior para con ello obtener el valor de Base58 final.
Usado en direcciones y demás datos criptográficos dentro de Bitcoin y más allá
El uso de Base58 lo podemos ver en distintas partes de Bitcoin. Por ejemplo, se puede ver en la codificación de las direcciones de Bitcoin, ya que las mismas son procesadas por la función Base58 para transformarlas en la direcciones de Bitcoin que conocemos. También se usa en las claves privadas en formato WIF. Pero no solo se usa en Bitcoin, otras criptomonedas también usan esta función. Por ejemplo, derivados de Bitcoin como Litecoin o Dogecoin usan Base58 en su software, otras criptomonedas y monedas digitales como Ripple, Dash, Elixir, e incluso Interplanetary File System (IPFS) también usa Base58 en su software.
Esto deja muy en claro la enorme utilidad de esta función que ha ganado espacios no solo en el mundo de las criptomonedas sino también en distintos espacios dedicados a ofrecer tecnología descentralizadora, y donde la creación de Satoshi Nakamoto es incluida no solo por su extrema funcionalidad, sino también como tributo y recordatorio a todo lo que se ha logrado desde que dio a conocer al mundo su creación.