Introducción
En este articulo vamos a ver como funcionan las billeteras en Ethereum yendo a los conceptos base para entender la interacción de estas con la blockchain pero primero veamos un concepto mas general.
Las billeteras en Ethereum son una aplicación en donde vamos a “guardar” nuestras cryptomonedas o tokens y ademas nos van a servir para realizar transferencias de Ether, tokens, NFT’s y en general cualquier interacción con la blockchain, en principio pueden ser de dos tipos, hot wallets y cold wallets. Las hot wallet son billeteras físicas que no se encuentran conectadas a internet y en donde la clave privada se guarda en un aparato usb con forma de pendrive, entre las mas conocidas podemos encontrar marcas como Trezor o Ledger entre otras. Las hot wallets por otro lado suelen ser aplicaciones para PC o Smartphone, generalmente las podemos encontrar como extensiones para navegadores web pero su característica principal es que estas aplicaciones son quienes guardan la clave privada y suelen estar conectadas a internet para facilitar cualquier interacción que uno quiera realizar, algunos ejemplos pueden ser Metamask, Trustwallet entre otras muchas mas.
No vamos a entrar en detalle de como funcionan las aplicaciones que nombramos arriba ni de como van a poder realizar una transacción sino de los conceptos informáticos y matemáticos de una billetera para entender que es lo que se guarda en ella y que tan seguras pueden llegar a estar nuestras cryptomonedas
Nondeterministic wallet
Como vimos podíamos encontrar dos tipos de aplicaciones para las billeteras (hot wallet y cold wallet) ahora indiferentemente de la aplicación, hablando propiamente de la arquitectura de las billeteras podemos encontrar dos tipos: nondeterministic wallet y deterministic wallet nosotros nos vamos a enfocar en la mas básica que es la nondeterministic para entender mejor los conceptos, luego en un próximo articulo abordaremos las deterministic wallet las cuales son las mas conocidas ya que hacen una de una semilla para generar las claves que en muchas billeteras se las conoce como “frase semilla” una frase de 12 o 24 palabras aleatorias.
Las billetera de tipo nondeterministic se basa en una clave privada y una clave publica, un algoritmo por el cual se relacionan ambas claves y una dirección que deriva de la clave publica, veamos un ejemplo real de una billetera de ethereum, desde ya no deben usar esta dirección para hacer transacciones por estar la clave privada revelada en este mismo articulo, solo la usaremos de manera didáctica:
clave privada: 0x8b641711470f5def1c3723ce67753e54e2a103d5cd0c38325c1f16a31b54b51d
Clave publica: 0x047ba08bc0933cb643db943cffa05c0eed657feba568937de366de46309b9a 3de5413976045415bb728d5aa8f1ede236a7c7ccebbb8c26e9cf1d650dbaa986 0bf8
Dirección: 0x7c976adaa628ecdf2c03ba060ec9a1345d2005bb
En el ejemplo estamos viendo un montón de números y letras que están relacionados solo porque están escritos juntos a continuación vamos a ver que es cada numero y que relaciones tiene entre si.
Clave privada
Debemos comenzar por la clave privada ya que va a ser la generadora del resto de claves y direcciones que vemos en el ejemplo. ¿Entonces que es la clave privada? No es mas que un numero aleatorio que va de 1 a 1157920892373161954235709850086879078528375642790749043826051 63141518161494337 en concreto el numero de la clave privada de nuestra billetera es: 6304832986552043023809316049940127537189158008730688967007723 1591542681285917 como ven este numero se encuentra entre los rangos definidos arriba lo que lo hace totalmente balido para generar una billetera para Ethereum. Ahora habrán notado que el numero que acabo de escribir es totalmente diferente al del ejemplo sin embargo dije que son el mismo numero eso es porque uno esta en notación decimal y el del ejemplo se encuentra en hexadecimal, no solamente la clave privada la tenemos en hexadecimal sino también la clave publica y la dirección ¿Como nos podemos dar cuenta de esto? Primero porque vemos letras que van de la “a” a la “f” entre los números y segundo porque cuando se escribe en hexadecimal se suele empezar con el sufijo “0x” que nos avisa que lo que sigue es un numero en hexadecimal de ahora en mas trabajaremos con los números en hexadecimal por comodidad y estándares.
secp256k1
Bueno ya elegimos nuestra clave privada valida ahora debemos generar nuestra clave publica para lo cual utilizaremos un algoritmo de criptografía asimétrica por curvas elípticas ECDSA dejo el link para los que quieran mas detalles de como funciona este tipo de algoritmo. Vamos a usar un tipo particular de curva elíptica denominado secp256k1 que fue el elegido por Ethereum para genere su par de claves publico/privada, este algoritmo es una particularidad derivado del algoritmo general de curvas elípticas donde algunas de sus variables se toman como constantes por ejemplo el parámetro G {x = 55066263022277343669578718895168534326250603453777594175500187360389116729240, y = 32670510020758816978083085130507043184471273380659243275938904335757337482424}
Ingresando la clave privada (hexadecimal): 0x8b641711470f5def1c3723ce67753e54e2a103d5cd0c38325c1f16a31b54b51d en el algoritmo secp256k1 obtenemos la clave publica, en este caso va a ser: 0x047ba08bc0933cb643db943cffa05c0eed657feba568937de366de46309b9a 3de5413976045415bb728d5aa8f1ede236a7c7ccebbb8c26e9cf1d650dbaa986 0bf8. Este numero obtenido nos va a servir para derivar la dirección de nuestra wallet por la cual nos vamos a poder identificar en la blockchain, que este numero sea publico no es un problema ya que se puede usar para verificar todo lo que firmemos con nuestra clave privada.
Dirección de nuestra billetera
La dirección de nuestra billetera va a derivar del numero de nuestra clave publica de la siguiente manera, debemos pasar la clave publica por una funciona de hash (Keccak256) y quedarnos con los últimos 20 bytes del hash obtenido, acá lo vamos a ver en un ejemplo.
Para nuestra clave publica: 0x047ba08bc0933cb643db943cffa05c0eed657feba568937de366de46309b9a 3de5413976045415bb728d5aa8f1ede236a7c7ccebbb8c26e9cf1d650dbaa986 0bf8
Obtenemos nuestro hash(Keccak256): f94651e66d2d62d6e00cae0e7c976adaa628ecdf2c03ba060ec9a1345d2005bb
Resaltamos los últimos 20 bytes de nuestro hash los cuales de ahora en adelante van a ser la dirección de nuestra billetera, como este hash deriva de la clave publica es virtualmente imposible que sea igual a otra dirección lo que hace que nuestra dirección sea única.
Conclusion
En conclusión, en este artículo hemos explorado el funcionamiento de las billeteras en Ethereum, centrándonos en las billeteras no deterministas. Estas billeteras se basan en una clave privada y una clave pública, y utilizan un algoritmo de criptografía de curva elíptica llamado secp256k1 para generar la clave pública a partir de la clave privada. La dirección de la billetera se deriva de la clave pública mediante una función de hash, lo que garantiza su unicidad.
Es importante comprender los conceptos informáticos y matemáticos detrás de una billetera para entender qué se guarda en ella y cuán seguras pueden ser nuestras criptomonedas. La clave privada es un número aleatorio válido dentro de un rango específico, mientras que la clave pública se genera a partir de ella utilizando el algoritmo secp256k1. A partir de la clave pública, se obtiene la dirección de la billetera mediante una función de hash, lo que garantiza su unicidad en la red Ethereum.
Es fundamental tener precauciones de seguridad al utilizar billeteras en Ethereum, como proteger adecuadamente la clave privada y utilizar métodos de respaldo para evitar la pérdida de acceso a los fondos. Comprender el funcionamiento de las billeteras y los conceptos subyacentes nos ayuda a tomar decisiones informadas y a mantener nuestros activos digitales seguros en el entorno descentralizado de Ethereum.