Como funciona una criptomoneda?

Dedicaremos una entrada a explicar, de la manera mas sencilla y completa posible, como funcionan todas las criptomonedas, y, cuando corresponda, la manera en la que abordaremos cada caracteristica en el desarrollo de Paskal.

Una red P2P

La mayor parte de las personas estan familiarizadas con las redes de acceso a servidor; en estas redes, un numero (normalmente elevado) de usuarios, se contecta a un servidor central que es el que recibe y emite toda la informacion. Un ejemplo clasico es la pagina web de un banco: los usuarios (llamdos clientes) se conectan a los servidores del banco (usando sus credenciales unicas, por ejemplo usuario y contraseña) y el servidor del banco es el unico que tiene intercambio de informacion con el computador del usuario. A este modelo de conectividad se le llama cliente-servidor, y es el mas comun en el internet del 2020.
Otro modelo que sirve tambien como red cliente-servidor son aquellas en las que los usuarios se comunican entre si, pero usando al servidor como intermediario. Un ejemplo de esto es Facebook.

Red Cliente-Servidor


Las redes P2P (peer to peer, par a par) eliminan la necesidad del servidor para la comunicacion entre los clientes, por tanto es una conexion cliente-cliente (de alli su nombre peer to peer). Cada cliente esta conectado con otros clientes de la red, actuando todos ellos como clientes y servidores simultaneamente. Asi, si A quiere enviar algo a B, se lo envia a todos los clientes con los que este conectado para asegurarse de que el paquete de informacion le llegue a B.

Red P2P

Imaginemos que en el diagrama el usuario A quiere enviar algo al usuario B. Se lo enviara a todos los usuarios con los que tiene conexion, quienes a su vez, se lo reenviaran a todos los usuarios con los que tienen conexion, etc. Si nos fijamos, hay dos conclusiones logicas de esta red: todos los miembros de la red recibiran la informacion, y la cantidad de usuarios que pueden estar conectados simultaneamente es teoricamente infinita!

Ahora bien, los usuarios deben compartir un 'idioma' comun, de manera que todos sepan lo que significa cada mensaje que llega a la red. A este idioma comun se le denomina "PROTOCOLO", y es el que permite que todos los usuarios puedan entenderse. Por ejemplo, en la red Paskal, si un usuario envia el mensaje 'node 108.142.56.10 1608387809', todos los usuarios de la red sabran que el usuario con el IP 108.142.56.10 estaba recibiendo conexiones entrantes a la hora 1608387809 (esta hora esta en formato UNIX) La capacidad de conectarse a la red, enviar y recibir mensajes a ella y entender lo que significa cada uno lo proporciona el programa, en nuestro caso, MasterPaskal. (en el caso del bitcoin, el Bitcoin Core, etc)

Surge entonces una pregunta: si todos los usuarios de la red pueden ver todos los mensajes, como es posible realizar operaciones de tipo fiduciario sin que exista el riesgo de robo de credenciales, duplicacion de datos, etc? Para ello, las criptomonedas usan la criptografia asimetrica.

Criptografía Asimétrica

La criptografia asimetrica es la pieza clave de todas las criptomonedas. Es un proceso matematico que genera 2 llaves (claves) diferentes para el mismo usuario: una de uso publico y otra de uso privado. Cada clave publica solo se corresponde con su respectiva clave privada. Asi, el usuario puede compartir su clave publica (en las criptomonedas esto es la direccion) libremente. Para enviar un mensaje acreditando que el es el dueño de esa clave publica (direccion) lo unico que debe hacer es "firmarlo" con su clave privada, lo que generara un mensaje totalmente ilegible, y hacerlo publico. La clave publica es la unica manera de "descifrar" el mensaje ilegible y asi constatar que el emisor del mensaje es el autentico dueño de esa clave publica.

Pongamos un ejemplo sencillo: en PaskalWallet creamos una nueva direccion: el programa genera una combinacion de claves publica-privada, y mediante un sencillo proceso criptografico reduce la clave publica a algo corto y legible: P663A3ECCDDC41FC067AA8FFF1BB3EE3417. Esa es la direccion que debemos compartir para que nos envien alli el dinero (paskales). Pero una vez que tenemos algunos paskales alli, como hacemos para gastarlos? Enviaremos un mensaje que, basicamene dice: "La direccion P663A3ECCDDC41FC067AA8FFF1BB3EE3417 queire enviar X paskales a la direccion (otra direccion valida de Paskal)",  lo firmamos con la clave privada de esa direccion (que esta almacenada en el wallet) y enviamos juntas ambas partes, el mensaje sin firmar y el mensaje firmado. Todos los miembros de la red conocern mi clave publica (la direccion) y pueden usarla para descifrar el mensaje cifrado. Si al hacerlo, corresponde EXACTAMENTE con el mensaje sin cifrar, estan verificando que el mensaje es autentico.

Hay otras cosas que es bueno hacer notar aqui:
  • La cantidad de combinaciones de claves publica/privada es sencillamente astronomica, por lo que la posibilidad de que se generen 2 juegos de claves iguales es despreciable. (es billones de veces mas probable que el sol estalle en el mismo segundo que esta leyendo esto)
  • La dificultad de romper la seguridad de la una sola clave privada requeriria el empleo de todo el poder de calculo actual del mundo (2020) durante varios miles de años.
  • Toda la seguridad recae sobre la clave privada, es por esto que es obligacion del usuario mantenerlas seguras sin que nadie pueda acceder a ellas. Pero por otra parte, si la pierde, perdera todo el dinero que exista en esa direccion ya que es totalmente imposible recuperarlas. Es por ello que es fundamental resguardar las claves privadas con el maximo celo.

De donde sale el dinero?

Muy bien, pero a buen seguro mas de uno se estara preguntando como todo esto genera una criptomoneda. Vamos a ello.

Una vez esta establecida la red P2P y todos sus miembros conocen el protocolo a usar, se genera el bloque 0. Todos los usuarios saben el momento en que se generara y lo que contendra (basicamente... nada) pero servira como pistoletazo de salida para la cadena de bloques (blockchain) de la criptomoneda. Aplicando una funcion hash sobre el archivo del bloque 0, se obtendra un problema criptografico que todos los usuarios conectados(que lo deseen) deberan intentar resolver (a esto se le llama minar). El primer usuario que consiga la solucion del problema, compartira la respuesta con toda la red y todos los usuarios proceden a construir el siguiente, el cual contiene la siguiente informacion:
  1. La direccion del minero que resolvio el bloque. A esta direccion se le acreditara el monto correspondiente a la recompensa de dicho bloque.
  2. La solucion como tal del problema.
  3. Todas las transacciones que se realizaron desde la creacion del bloque anterior; obviamente, el bloque 1 es imposible que contenga ninguna transaccion, ya que ninguna direccion poseia balance para poder enviar.
  4. Cualquier otra informacion que sea importante para la red.
El bloque generado se somete a la funcion hash que producira un nuevo problema criptografico... y el proceso continua indefinidamente.

Como se ve, todas las monedas generadas lo son a traves del minado. No hay otra manera de generar nuevas monedas. Asi mismo, el minero de cada bloque, tambien recibe las comisiones de todas las transacciones realizadas en el mismo, es por eso que el minado seguira siendo rentable para los mineros aun cuando la recompensa por bloque disminuya progresivamente.

Pero hay paginas web donde se pueden comprar/vender criptomonedas...

Las paginas web donde se pueden realizar transacciones con criptomonedas son en realidad webs que ofrecen un servicio de intermediario. Ellos realizan las operaciones en la red P2P a nombre del usuario desde sus propias carteras. Es una manera mucho mas sencilla que realizarlas directamente sobre la propia red, y es por eso que casi la totalidad de los usuarios de critpmonedas las usan. Pero eso tiene un enorme riesgo: las criptomonedas en realidad no las posee el usuario, si no la pagina web. El saldo que el usuario ve en la pagina web esta en una cartera que los administradores de la web controlan y, por ende, son los unicos que pueden disponer de ellos. Aunque hay paginas web de mucha solvencia y prestigio, ha habido escandalos que incluso han involucrado a la mayor pagina del mundo en su momento (ver Mt. Gox). 

El problema para el usuario, por ejemplo, del bitcoin, es que acceder directamente a la red P2P del bitcoin requiere que instale el Bitcoin core en un computador, descargue toda la cadena de bloques (actualmente son 320 gigas de informacion, Diciembre 2020, puede consultarlo aqui) y que mantenga actualizado permanentemente la cadena de bloques para poder manejar los fondos de su cartera. Para la mayoria de los usuarios esto es inviable o demasiado engorroso, por eso recurren a un servicio web (intermediario).

Desde luego, Bitcoin ya tiene  mas de una decada de antiguedad, y aunque sigue siendo igual de valido hoy como el dia de su lanzamiento, existen muchas funcionalidades posibles en una criptomoneda que el desarrollador no incluyo, sencillamente por que no se le ocurrieron o no las considero utiles/necesarias en ese momento.
  • Un wallet ligero totalmente operativo sin necesidad de descargar la cadena de bloques.
  • Un servicio de "escrow" incluido en el protocolo que permita la monetizacion directa e inmediata de la criptomoneda.
  • La personalizacion de las direcciones.
Es aqui donde surge nuestra idea de crear Paskal.








Comentarios

Entradas populares de este blog

Funcionamiento interno

Año nuevo, nuevo nombre