Criptomonedas, Bitcoin y redes P2P

Criptomonedas, Bitcoin y redes P2P

La red P2P se popularizó en gran medida gracias a Napster, allá por el año 2000, con su servicio de distribución de archivos de música. Actualmente, aunque los clientes para compartir ficheros, como BitTorrent o eMule, siguen siendo los sistemas P2P más populares, estamos viendo cómo se aplica esta tecnología a gran escala para otros fines, como las redes anónimas tipo DarkNet, de dudosa reputación, la computación distribuida, alcanzando en algunos casos más de 15PFLOPS de media, o las famosas criptomonedas.

Se suele decir que el Bitcoin es una criptomoneda descentralizada, sin un control central. No requiere de un banco, gobierno o ninguna otra entidad central para almacenar datos o administrar el sistema. Todo se gestiona de forma distribuida, por cualquiera con un ordenador conectado a internet que desee colaborar. Pero, ¿cómo es posible técnicamente distribuir y gestionar los datos del conjunto? La respuesta es mediante una red P2P “peer-to-peer”. En las redes de tipo P2P, cada nodo actúa simultáneamente como cliente y como servidor, y permiten el intercambio directo de información entre cualquiera de los ordenadores (peer) conectados. La información intercambiada puede estar almacenada hasta en el nodo más insignificante, y terminar propagándose por toda la red. De esta forma, ningún nodo es esencial. Un nodo que se quiera conectar a la red P2P requiere que exista solamente un nodo activo en la red. En esencia, una red P2P es una red virtual por encima de la topología de red física existente. Esta arquitectura presenta varias ventajas, pero plantea un problema esencial: ¿Cómo se encuentran unos “peer” con otros en una red P2P? En este tipo de redes, cada cliente construye una base de datos de direcciones de peers, ya que la red no es uniforme, sino que los peer entran y salen continuamente de la red. Para construir esta base de datos de peers, un nodo podría buscar otros peer enviando mensajes de broadcast por la red o incluso realizando escaneos por rangos de IP, pero esto sería lento, un abuso del ancho de banda de la red, e incluso ilegal en algunos países.

El cliente Bitcoin, hasta la versión 0.8.2 (29 May 2013) utilizaba por defecto canales IRC para almacenar las direcciones IP de los “peers” conectados a la red Bitcoin. Concretamente, cada peer conectado a la red entraba a un canal de IRC con un “nick” de usuario resultado de codificar su IP pública. Los canales utilizados tenían nombres tipo “#bitcoin00” o “bitcoin99” y uno de los servidores IRC era “irc.lfnet.org”.

El cliente Bitcoin entraba, de forma transparente al usuario, a los canales IRC y así construía una base de datos de direcciones IP de peers. Este proceso se conoce como “bootstrapping”, donde un cliente P2P recaba la información inicial para comunicarse en la red. Otra técnica de bootstrapping es el uso de nodos conocidos “bootstrapping nodes”. También llamados “seed nodes”, suelen tener IPs estáticas o, al menos, nombres de dominio propios como “seed.bitcoin.sipa.be”. Los métodos de bootstrapping de Bitcoin son:

  • DNS/IP seeding. El cliente tiene una lista de DNS e IPs hardcoded.
  • Address seeding. El cliente, que quizás se conectó a la red hace un tiempo y conserva la base de datos temporal de direcciones, puede preguntar a esos peer, y con suerte habrá alguno que esté online, que conteste con una lista actualizada de peers.
  • IRC seeding. El cliente consulta información de IPs usando una técnica aprovechando un servicio de chat IRC.

Este modelo P2P permite el almacenado y la gestión descentralizada, pero no es inmune a ataques informáticos. Dos de estos ataques son:

  • Distributed Denial-of-Service (DDoS): Uno o varios atacantes envían mensajes o comandos por el propio protocolo P2P utilizado a todos los “peer”, sobrecargando la red y dejando inoperables algunas partes de la red.
  • Envenenamiento de la red: Un atacante comparte información falsa y esta se propaga por la red P2P. El cliente Bitcoin comparte el “blockchain” de transferencias a través de su red P2P, y, en este sentido, para evitar que un atacante pueda envenenar los datos, emplea la técnica del “Proof of Work”.
David

Acerca de David

Ingeniero de telecomunicaciones de Zaragoza.

Zaragoza, Spain

Comments