Bitcoin: Wallets & Llaves#
Todo el funcionamiento de la Blockchain de Bitcoin está basado en diferentes tipos de llaves y direcciones. Conceptos que pueden confundirse debido a que, para el ojo de una persona normal, solo se tratan de hashes criptográficos ilegibles y en formato hexadecimal que derivan unos de otro.
Relación entre llaves y criptografía en Bitcoin#
Las wallets que utilizamos para transaccionar con bitcoin están compuestas por dos tipos de llaves: públicas y privadas. Las mismas permiten demostrar propiedad sobre los UTXO o salidas de BTC para poder gastarlos.
Las llaves, tanto públicas como privadas, se encuentran basadas en criptografía para su creación. Podemos entender el concepto de criptografía como “escritura secreta”. Permite demostrar un valor, sin revelar el mismo, a través de hashes. Bitcoin utiliza estos mecanismos para crear llaves y direcciones que son la base de su funcionamiento y el intercambio de valor de forma segura.
La criptografía permite la creación de llaves de forma independiente al protocolo de Bitcoin o de la Blockchain que sea. Se trata de algoritmos súper complejos para la creación de hashes que fácilmente podemos encontrar implementaciones de ellos en cualquier lenguaje de programación y utilizarlos.
Llaves públicas y privadas#
La creación de un nuevo par de llaves públicas y privadas en la Blockchain de Bitcoin se realiza utilizando Criptografía de Curva Elíptica. Poderosos algoritmos asimétricos para la creación de hashes que ejercen de llaves en una billetera.
La llave privada es la primera en crearse a través de un número completamente aleatorio o de una semilla. El algoritmo de curva elíptica creará un hash y, a partir de este, el mismo se vuelve a encriptar para la obtención de la clave pública.
Dichos algoritmos son asimétricos, lo que significa que podemos obtener la llave pública a partir de la privada, pero no podemos obtener la llave privada a partir de la llave pública.
Podemos resumir y diferenciar las características tanto de la llave pública como de la privada:
Llave privada:
- Deben formarse a partir de un número aleatorio, por lo que se utiliza un algoritmo CSPRNG) para generar el mismo.
- Se genera a partir de un algoritmo de curva elíptica.
- Deben ser secretas. Su exposición permitirá que alguien más robe nuestros BTC o acceda a nuestra información.
- Permiten firmar transacciones para demostrar propiedad de los BTC y poder gastarlos.
- Permite generar una nueva clave pública.
Clave pública:
- Se obtiene a partir de la llave privada utilizando algoritmos de curva elíptica Secp256k1.
- No es posible obtener la llave privada a partir de la pública.
- Es pública, por lo tanto, puede compartirse para crear direcciones y recibir fondos en BTC.
Representación de llaves públicas y privadas#
Las llaves públicas y privadas son más que importantes para una wallet. Sobre todo la privada, ya que si perdemos esta, perdemos nuestras cripto. Las mismas pueden representarse en distintos formatos para transportarse y que sea más amena su lectura.
Podremos encontrar diferentes formas de representar las llaves públicas y privadas para que sea más fácil para una persona leer la información o transcribirla.
Formatos de llaves privadas#
Las llaves privadas pueden representarse en cuatro formatos distintos:
- Raw: formato en crudo de 32 bytes poco legible.
- Hex: formato hexadecimal más legible para un usuario.
- WIF (Wallet Import Format): el formato de importación de billeteras codificado en Base58 es el ideal para transportar claves privadas. Incluye un prefijo para identificar la red de la Blockchain y un algunos bytes de comprobación de la clave.
- WIF-compressed: similar a WIF, comprimido y con otro tipo de sufijos para determinar de qué tipo de dirección se trata.
Base58
Tal vez conozcas la codificación Base64. Satoshi Nakamoto propuso Base58 como un subconjunto de Base64 que elimina ambigüedades y lo vuelve más legible para un usuario.
Concretamente, se elimina el número 0
y la letra O
(mayúscula), se elimina la I
(mayúscula) y la L
(minúscula). También se eliminan caracteres especiales para que sea más fácil el copy/paste de una clave y evitar saltos de líneas.
Formatos de llaves públicas#
Las llaves públicas pueden representarse en dos formatos distintos.
Los dos tipos son compatibles, tanto la llave pública comprimida como sin comprimir. Los algoritmos de curva elíptica Secp256k1 por detrás permiten esta compatibilidad. Claramente, la llave comprimida es mucho más amigable para el usuario y más utilizada en wallets.
Billeteras o wallets#
Tal vez siempre creíste que dentro de tu billetera se encuentra tus criptomonedas. Esto no es así. El nombre más apropiado para las billeteras es un “llavero”. Las billeteras guardan las llaves tanto públicas como privadas que permiten demostrar propiedad sobre los bitcoins.
Cuando te conectas a tu wallet, lo que hace esta es escanear toda la red de Bitcoin en búsqueda de salidas (UTXO) que no hayan sido gastados y pertenezcan a las llaves de la billetera para posteriormente visualizar el balance total de la billetera.
Las billeteras, a su vez, contienen direcciones o Bitcoin Addresses, que permiten la obtención de BTC. Las direcciones se generan pasando la llave pública a través de funciones hash SHA256. Con este nuevo hash que también es público, podemos recibir valor en nuestra billetera.
En resumen, la llave privada genera la pública y la pública genera las direcciones. Todo a través de complejos procesos criptográficos y múltiples algoritmos.
Cómo es una wallet#
Las llaves públicas y privadas se crean y se almacenan en billeteras o wallets para su posterior utilización en transacciones. Existen diferentes tipos billeteras, con mayor o menos nivel de seguridad o diversos propósitos.
Las billeteras son el medio que utilizamos para generar nuevas llaves públicas y privadas, firmar transacciones a través de la privada y enviar dinero o recibirlo mediante la llave pública.
Pueden ser software como plugins del navegador o aplicaciones mobile o también existen wallets que son hardware, similares a un pendrive.
Las billeteras realmente no almacenan criptomonedas. El nombre más apropiado para una billetera debería ser “llavero”. Las billeteras guardan las llaves tanto públicas como privadas que permiten demostrar propiedad sobre los bitcoins y gastarlos.
Tipos de billeteras o wallets#
Hablando de hardware o software, podremos encontrar varios tipos de billeteras como las frías o calientes dependiendo si la misma se encuentra conectada a internet o no.
En esta oportunidad, vamos a hacer hincapié en otro tipo de clasificación de billeteras, entre wallets determinísticas y no determinísticas.
Deterministic wallet#
Las billeteras determinísticas son las más comunes y tal vez las que ya conozcas. Generan llaves a partir de una llave maestra. Un conjunto de 12, 18 o 24 palabras que debes guardar minuciosamente para recuperar tus llaves. Una billetera de este tipo puede contener N cantidad de llaves y todas se recuperan con la misma llave maestra.
Nondeterministic wallet#
Las billeteras no determinísticas generan llaves a partir de un número totalmente aleatorio. Este tipo de billeteras se utilizan poco y son más difíciles de mantener para un usuario debido a que las llaves no se relacionan entre sí. Debemos hacer un backup de cada llave de forma independiente.
Metamask es una de las billeteras determinísticas pioneras en el mundo que seguro conoces. Hoy en día, son la mejor opción para comenzar a dar tus primeros pasos y tener una billetera para, al menos, comenzar a jugar con redes de prueba y aprender su funcionamiento.
Ten en cuenta la seguridad que implica tener una o más wallets, o una o más llaves privadas que resguardar. Hay que educarse al respecto para comprender cómo mantener segura nuestra información.
Qué es una llave maestra#
Las billeteras no-determinísticas son poco accesibles e incómodas para los usuarios debido a que deben realizar un backup de cada una de las llaves privadas de forma independiente. Las billeteras determinísticas llegaron posteriormente y solucionan el problema de la portabilidad y que el manejo de múltiples llaves sea más amigable.
La llave maestra de una wallet determinística, también denominada clave de recuperación o seed (semilla), es única y permite generar N cantidad de llaves privadas dentro de una misma billetera.
Esta clave de recuperación de nuestras cuentas en una billetera se compone por una serie de 12, 18 o 24 palabras en inglés que debemos apuntar y guardar de forma muy segura. Su extravió o robo, provocará la perdida de nuestras cuentas y de las llaves que guardan las criptomonedas. Nadie puede ayudarnos a recuperar esta llave maestra si la perdemos.
Estas palabras que componen la llave maestra, denominadas códigos mnemónicos, son completamente legibles para un usuario y amigable su transcripción, exportación e importación. A diferencia de tener que guardar un string hexadecimal.
Generación determinista de llaves#
Si utilizas una wallet como Metamask como plugin en el navegador, con la misma podrás crear todas las cuentas que quieras.
Creación de cuentas en Metamask
Si descargas la aplicación para Android o IOS de Metamask y restauras tu billetera con la llave maestra, ocurre algo curioso. Te encontrarás con que la billetera solo tiene una cuenta y deberás generar las demás nuevamente.
Observarás que las cuentas que genera, son exactamente las mismas que tienes en el navegador. Como su generación es determinista, el orden de creación de las cuentas es siempre el mismo.
Te invito a crear una billetera en Metamask o en tu wallet de preferencia y utilizar la misma en múltiples dispositivos y aprender más sobre la creación de cuentas.
También existe una versión de billeteras determinísticas más avanzada denominadas HD Wallet o Hierarchical Deterministic Wallets. Las mismas permiten generar claves secundarias de forma jerárquica y mantenerlas seguras.
Resguardo de llaves privadas#
Es tu responsabilidad guardar la llave privada o las palabras de recuperación de tu wallet de forma segura tanto para no perder tu dinero como para evitar robos.
No es recomendable guardar esta información en formato digital como un gestor de contraseñas como BitWarden o un simple archivo de texto en Drive.
Lo aconsejable es resguardar esta información fuera de internet, en formato analógico. Para esto puedes investigar servicios o productos como:
- Paper wallets: permiten imprimir en papel tus claves y guardarlas en una caja fuerte o en un lugar seguro que solo tú sepas, como si fuera dinero en efectivo. Servicios como BitAddress o Bitcoin.com.
- Criptosteels: permiten guardar tus palabras de recuperación en productos de acero inoxidable resistentes al fuego, ácido, agua y al paso del tiempo.
Si vas a guardar valor y grandes sumas de dinero en criptomonedas, busca la mejor manera de salvaguardar tus claves privadas. Es tu responsabilidad económica hacerlo y tener asegurado tu dinero. Un banco tradicional podría ayudarnos a recuperar nuestra contraseña. En el mundo descentralizado, nadie nos ayudará y podemos perder nuestros ahorros.
Conclusión#
El estudio de las Blockchain requiere una comprensión profunda de la criptografía, aunque no necesariamente implique programar algoritmos. Es fundamental conocer los estándares y características para su correcta aplicación en proyectos reales. Además, es crucial utilizar herramientas confiables y responsabilizarse por el manejo seguro de las claves privadas, adoptando prácticas seguras y conscientes para proteger nuestros activos.
Post creado en colaboración con el Curso de Bitcoin de Platzi.