¿Quién manda en una red blockchain?

Si estás empezando a sumergirte en el mundo de Blockchain, muy probablemente te hayas preguntado ¿quién decide qué se escribe en la blockchain? ¿quién valida las transacciones en una red de blockchain?

Pues bien, la respuesta más correcta, es “depende”. Cada red de blockchain decide cómo va a decidir cuáles son las transacciones, utilizando lo que se denomina algoritmo de consenso.

¿Qué es un algoritmo de consenso?

El consenso en la red de blockchain se refiere al proceso de lograr un acuerdo entre los distintos participantes de la red sobre las transacciones que van a escribirse en la cadena.

Dicho de otra manera, el consenso es el responsable de que todos los nodos de la blockchain tengan los mismos datos, evitando a su vez su manipulación.

La forma de implementar esto en la red es lo que se conoce como “algoritmo o mecanismo de consenso” y forma parte del core de la misma, aunque hay algunas implementaciones de redes que permiten seleccionar el algoritmo entre varios disponibles.

A continuación veremos los principales mecanismos de consenso que existen a día de hoy.

Prueba de Trabajo (Proof of Work, PoW)

El algoritmo de Prueba de Trabajo fue el primero de los mecanismos utilizados en Blockchain. Sus orígenes se remontan a hace 20 años, cuando apareció Hashcash, que fue el primer sistema PoW.

La base del mismo es que, para establecer relaciones entre dos desconocidos que van a intervenir en un sistema, es necesario que ambos prueben de alguna manera su interés, y la forma de garantizar este interés es demostrar que han dedicado cierta cantidad de recursos (prueba de trabajo).

Sin embargo, no es válida cualquier prueba de trabajo, ya que para que dicha prueba sea viable, debe ser fácil de probar.

Un ejemplo de una prueba de trabajo podría ser el siguiente:

Encontrar una página de un libro en la que la cuarta letra sea una “a”, y la penúltima sea una “m”.

Para encontrarlo, necesito ir comprobando las páginas una a una para ver si se cumple la condición.

Puedo empezar por el principio, por el final, por el medio… No hay ninguna estrategia más allá que ir comprobando páginas, lo que sin duda requeriría un trabajo por parte de aquel que quiera aportar dicha prueba.

Además, sería bastante fácil de comprobar, ya que cuando el interesado comunique la página, sólo tendría que comprobar si es cierto con tan solo acudir a la página indicada.

La idea detrás de la prueba de trabajo sobre un conjunto de datos es aplicar una función a los datos, y comprobar si se cumple una condición pactada previamente.

El algoritmo de Prueba de Trabajo más famoso es el de Bitcoin. En él se crea un bloque con cierta información entre la que se encuentra:

  • Dirección del bloque anterior.
  • Las transacciones a incluir en el bloque.
  • Nonce. Aquí reside la clave de la prueba de trabajo. En este campo se introduce un valor aleatorio de forma que con cada valor distinto, el bloque cambia pese a tener las mismas transacciones.

Sobre este “bloque” (que es una sucesión de bytes) se aplica una función Hash SHA-256 obteniendo siempre un conjunto de 64 dígitos hexadecimales. Es importante resaltar que una función es Hash es determinista, lo que significa que aplicada sobre una entrada concreta siempre nos dará el mismo resultado.

Una vez obtenido el resultado, se comprueba si es número obtenido es menor a un número dado, comprobando si el resultado comienza con un número de ceros (0) determinado, en cuyo caso se da por válido el bloque y se dejan de buscar nuevos valores “nonce”.

En las redes de Bitcoin y Ethereum, y en general en las redes PoW, el primer nodo que encuentra un bloque válido es recompensado por el trabajo completado, por lo que los miembros del sistema compiten.

Pros de PoW

  • La prueba de trabajo no se puede anticipar, ya que depende de los propios datos y de la dirección del bloque anterior.
  • El reparto de la recompensa a los nodos por su participación es automática y depende exclusivamente de su tasa de hash del minero.
  • Estimulación de buen comportamiento. Como el costo en recursos (materiales, tiempo y electricidad) es muy elevado, los comportamientos maliciosos son castigados con la pérdida de ganancias.
  • Es resistente a ataques de tipo Sybil donde un agente crea crea nodos falsos para suprimir usuarios honestos reales.
  • La prueba no puede obtenerse con anticipación, ya que la aparición de cada nuevo bloque requiere el lanzamiento de una nueva ronda de cálculo (cada nuevo bloque contiene un enlace al anterior).
  • El sistema es bastante claro y fácil de entender.

Contras de PoW

  • Desperdicio de energía. El gasto energético de la red de bitcoin es enorme y, a medida que se van generando nuevos bloques, es necesario aumentar la dificultad, por lo que este gasto tiende a ser cada vez más grande.
  • Es vulnerable a un ataque del 51%. Para poder modificar fraudulentamente la cadena es necesario tener un 51% de los nodos.

En principio esto no era un riesgo debido a la gran distribución de los nodos; sin embargo, el minado de bitcoin se va haciendo más especializado con grupos de usuarios invirtiendo en complejos sistemas de minado.

Esto conlleva un riesgo de centralización en torno a un grupo reducido de usuarios que, potencialmente, podrían llevar a cabo un ataque a la cadena de forma que solo se aceptasen aquellos bloques que este grupo quisiera.

  • Debido al propio mecanismo de prueba de trabajo, la velocidad de validación de bloques es relativamente baja, por lo que ciertos casos de uso no son compatibles con este sistema.

Prueba de Participación (Proof of Stake, PoS)

El algoritmo de Proof of Stake (PoS) busca acabar con las ineficiencias asociadas al PoW. En este mecanismo hay dos tipos de nodos: nodos regulares, que almacenan una copia de la cadena y a los que se pueden hacer consultas, y nodos validadores (no mineros).

La probabilidad que tiene un participante de ser elegido para validar un bloque, ganando una recompensa por ello, se decide en relación a la la cantidad de fondos (criptomonedas o tokens asignados mediante algún sistema particular) que apueste.

Dichos fondos pasan ser una garantía de la buena fe del validador. En caso de que la transacción se detecte como ilegítima, el validador perderá sus fondos y, en caso contrario, recibirá una recompensa por la validación del nodo.

La idea detrás de este algoritmo es bastante aceptada, existiendo distintas variaciones para buscar optimizar los resultados, evitando, por ejemplo, que unos pocos nodos con muchos fondos se conviertan en los únicos nodos con capacidad de decisión.

Sin embargo, la necesidad de conocer los nodos validadores y el gran poder que tienen frente al resto de nodos hace que sea un protocolo poco adecuado para redes de tipo público.

Pros de PoS

  • Consumo de energía reducido. Al no existir prueba de trabajo, el único trabajo es la construcción del bloque y el entendimiento entre varios nodos.
  • Velocidad de bloque muy alta, lo que permite el uso de redes blockchain en casos de uso en los que es necesaria una respuesta rápida.
  • Toma de decisiones más rápida. Dado que los jugadores principales reciben votos adicionales, lleva menos tiempo llegar a un consenso, lo que hace que las transacciones sean más rápidas.

Contras de PoS

  • Tendencia a la centralización de la red, sobre todo en redes no muy grandes en los que es fácil que un nodo acabe teniendo un peso muy grande en la toma de decisiones.
  • Susceptible de sufrir un ataque del 51%, aunque esto es algo complejo ya que los nodos con más poder son aquellos que tienen precisamente más interés en el buen funcionamiento de la cadena. Al ser los mayores propietarios de fondos, una devaluación de los mismos sería algo contraproducente.
  • Exponer el wallet en Internet puede suponer un riesgo de seguridad.
  • Posibilidad de la existencia de un fork, debido a la posibilidad de que dos nodos cumplen las condiciones para validar un bloque en el mismo momento. Esto se intenta mitigar con una validación posterior del resto de nodos, pero potencialmente podría darse el caso de que ambas ramas acaben igualmente validadas.

Variaciones de PoS

Algunas de las variaciones más importantes del mecanismo de Proof of Authority son:

  • Delegated Proof of Stake (DPoS) para evitar el riesgo que supone exponer el wallet en la red, se ha implementado este mecanismo en el que los nodos propietarios de los fondos delegan su capacidad de validación a un tipo de nodos conocidos como representantes, evitando exponer directamente sus fondos.
  • Proof of Importance (Prueba de Importancia, PoI), en el que la reputación del nodo viene marcada por su participación en el mismo.
  • Proof of Authority (Prueba de Autoridad, PoA) que veremos a continuación.

Prueba de Autoridad (Proof of Stake, PoA)

El mecanismo de prueba de autoridad puede entenderse como una variación del PoS. En PoA las validaciones se efectúan de igual modo por nodos validadores. La diferencia reside en que la capacidad de validar no viene marcada por la cantidad de fondos que tiene la cuenta, sino en la propia “Identidad” o legitimidad de la misma.

El mecanismo de obtención de estatus “validador” debe ser conocido de antemano y claro, ya que de él depende la mantenibilidad de la red.

Pese a que algunos tachan este algoritmo de ser poco descentralizado (lo cual es cierto), de alguna forma tiene un encaje perfecto en redes de consorcio, ya sean privadas o semipúblicas.

En este tipo de redes, la identidad de los nodos viene avalada por su posición en el consorcio o en la sociedad, de forma que la reputación del responsable del nodo desincentiva totalmente la tentación de actuar fraudulentamente.

Pros de PoA

  • La fiabilidad de la red como un rango bastante específico de usuarios es responsable de la toma de decisiones y disuade a los usuarios malintencionados.
  • Sin minería y, por lo tanto, costos de mantenimiento de red reducidos.
  • Alta velocidad de transacción debido al hecho de que el consenso se alcanza extremadamente rápido.

Contras de PoA

  • La centralización de la capacidad de validar transacciones es muy alta.

Tolerancia a Fallos Bizantinos (Byzantine Fault Tolerance, BFT)

El mecanismo BFT (Bizantinum Fault Tolerance) está inspirado en el conocido problema de los generales bizantinos.

En este problema, un número de generales debe tomar una decisión de tipo booleano (sí o no, atacar o no) a la vez para que la estrategia tenga éxito.

El problema viene cuando se introduce la posibilidad de que uno o más de los generales sea un traidor, y proporcione una información errónea que aboque el ataque a un fracaso.

La idea detrás del mismo es poder identificar si uno de los nodos está diciendo la verdad o no a la hora de transmitir un mensaje.

En el caso de una red blockchain con BFT, todos los nodos deben ser conocidos, por lo que deben ser redes que no necesiten cambiar frecuentemente. Éstos nodos intercambian información que, potencialmente, puede ser correcta o incorrecta.

El algoritmo se basa en la honestidad de la mayoría de los validadores, de forma que en caso de que alguno de los nodos no lo fuera, el resto descartaría el intento de fraude.

BFT tiene sentido cuando todos los participantes en el proceso se conoce entre ellos y son no son propensos a cambiar. Un buen ejemplo es la votación de los compañeros de piso sobre el tema de las reparaciones.

La implementación más relevante de este tipo de mecanismos es Instambul Byzantine Fault Tolerance (IBFT).

Pros de BFT

  • Alto rendimiento de la red, por defecto 1 segundo/bloque.
  • El coste asociado a las transacciones es muy bajo.
  • Sólo hay un bloque posible en cada momento dado, lo que elimina el riesgo de un fork de la cadena.
  • Los nodos pueden quitar el poder a los nodos malintencionados.
  • Requiere que una gran mayoría (aproximadamente un 66%) de los nodos validen las transacciones, por lo que minimiza el riesgo.

Contras de BFT

  • Como en todos los sistemas basados en la autoridad, existe una tendencia a la centralización, que debe ser combatida con modificaciones que exijan variaciones en las validaciones.
  • Es válido sólo en redes de tamaño reducido.

Conclusión

Si has llegado hasta aquí, ahora sabes un poco más sobre los distintos algoritmos de consenso y también cómo ésto afecta a las características de una red de blockchain.

Como ocurre frecuentemente cuando comparamos tecnologías, no parece muy correcto pensar en términos de correcto o incorrecto: hay muchas aproximaciones distintas y debemos valorar bien todas ellas para elegir aquella que más cuadre con nuestro objetivo, asumiendo las restricciones y mitigando los riesgos.

Además, la mayoría de implementaciones de blockchain son open source, por lo que siempre están abiertas de aceptar la colaboración de la comunidad. Y tú, ¿te animas?

Ingeniero Superior en Informática por la UCM. Apasionado por la tecnología y, sobre todo, por ponerla al servicio de las personas. He trabajado en proyectos J2EE / SOA e Integración en numerosos clientes. Actualmente trabajo como Arquitecto IT y Preventa en Paradigma Digital. Intento mantenerme al día de las novedades y aprovecharlas para construir soluciones cada vez más ágiles, robustas y eficientes.

Ver toda la actividad de Borja Gómez

Comentarios

  1. Adriana dice:

    Cómo funciona una blockchain que dice tener Pow/pos cómo algoritmos de consenso?

Escribe un comentario