Desentrañando los algoritmos de consenso y el teorema CAP. Los algoritmos de consenso son una parte esencial a la hora de conocer y analizar los distintos tipos de cadenas de bloques ya que dictan cómo se validan las transacciones y se mantiene la integridad de una red descentralizada. En este artículo, exploraremos cómo estos protocolos no solo diferencian los tipos de cadenas de bloques, sino que también reflejan una variedad de filosofías y enfoques sobre seguridad, eficiencia y descentralización. Desde el conocido Proof of Work hasta el innovador Proof of Stake y más allá, cada algoritmo tiene su historia, sus beneficios y sus desafíos. Acompáñanos en este viaje de descubrimiento para comprender verdaderamente la columna vertebral de la blockchain y su impacto revolucionario en el mundo digital.
Último artículo de esta serie de tres en la que hemos intentado desgranar cada una de las claves de la tecnología de cadena de bloques. A continuación incluimos el listado para que no te pierdas ninguno de ellos:
- Arquitectura blockchain, elementos más importantes y funcionamiento
- Tipos de blockchain. Ventajas e inconvenientes de usar la tecnología de cadena de bloques
- Algoritmos de consenso y el teorema CAP
¿Qué son los algoritmos de consenso y para qué sirven?
Visto ya cómo se estructura, descritas sus partes, tipos y funcionamiento básicos, es hora de centrarnos en una parte esencial de las cadenas de bloques como son los algoritmos de consenso.
Su importancia transciende a sus condicionamientos técnico-teóricos y ha llegado a convertirse en parte de un debate social y medio-ambiental. Los algoritmos Proof-of-work han demostrado sobradamente su eficacia a la hora de proveer de seguridad en la escritura de cadenas de bloques públicas, pero ha mostrado también sus carencias cuando se analizan desde el punto de eficiencia energética y de coste del hardware que requiere para su funcionamiento.
El consenso es el pilar fundamental de una blockchain, ya que permite la descentralización del control mediante un proceso opcional conocido como minería. La elección del algoritmo de consenso a utilizar está determinada por el tipo de blockchain, es decir, no todos los mecanismos de consenso son adecuados para todos los tipos de blockchain.
Por ejemplo, en blockchains públicas y sin permiso de acceso tiene mucho sentido utilizar PoW. En cambio, en el caso de cadenas de bloques con permiso, algoritmos del estilo de Prueba de Autoridad (PoA) o mecanismos de consenso tradicionales tolerantes a fallas bizantinas (PBFT) pueden ser más que suficientes para asegurar la descentralización. Por lo tanto, es esencial elegir un algoritmo de consenso adecuado para cada tipo de proyecto de blockchain.
¿Qué es un mecanismos de consenso?
Un mecanismo de consenso no es más que el conjunto de pasos que deben tomar los nodos en una cadena de bloques para ponerse de acuerdo en un estado o valor propuesto. Durante más de tres décadas, este concepto ha sido investigado por científicos de la computación en la industria y academia. Recomendamos la lectura de nuestro artículo Blockchain: Una historia que no ha hecho más que empezar.
Con la aparición Bitcoin los mecanismos de consenso han vuelto a estar en el centro de atención y han ganado considerable popularidad. Hay varios requisitos para un mecanismo de consenso.
Requisitos de un mecanismo de consenso
- Acuerdo: Todas las nodos honestos deciden sobre el mismo valor.
- Integridad: Este es un requisito que evita que existan nodos que puedan tomar la decisión más de una vez en un solo ciclo de consenso.
- Validez: El valor acordado por todos las nodos honestos debe ser el mismo que el valor inicial propuesto por al menos un nodo honesto.
- Tolerancia a fallas: El algoritmo de consenso debe poder ejecutarse correctamente en presencia de nodos defectuosos o maliciosos (nodos bizantinos).
- Terminación: Todas las nodos honestos finalizan la ejecución del proceso de consenso y eventualmente llegan a una decisión.
Tipos de algoritmos de consenso
Los algoritmos de consenso tienen como finalidad paliar el efecto de los fallos y ayudar a que los sistemas distribuidos alcancen un estado final de acuerdo. Los algoritmos de consenso pueden subdividirse básicamente en dos categorías.
Dos tipologías de algoritmos de consenso
- Mecanismos de consenso Proof-based: Esta categoría requiere que los nodos compitan para la elección de un nodo que se encargará de proponer el valor final. El algoritmo funciona sobre el principio de proporcionar una evidencia de un trabajo realizado, la posesión de alguna autoridad o de cierto número de tokens para ganar el derecho de proponer el siguiente bloque. Por ejemplo, el mecanismo de PoW utilizado en Bitcoin pertenece a esta categoría, donde el minero que resuelve el rompecabezas computacional gana el derecho de agregar el siguiente bloque a la cadena de bloques y tener así una recompensa por el esfuerzo computacional realizado.
- Basados en tolerancia a fallos: Estos algoritmos de consenso, también llamados de tipo consorcio o con permiso, se basan en rondas de votación y funcionan mejor cuando existe un número limitado de nodos en la red. Aunque estos mecanismos no escalan tan eficientemente como los mecanismos de consenso basados en prueba, ofrecen un enfoque más tradicional y estructurado para lograr el consenso en una red.
¿Que entendemos por fallos en un sistema distribuido?
Si quieres adentrarte en los sistemas distribuidos no dudes en consultar nuestro artículo ¿Qué es un sistema distribuido?. Podemos clasificar los fallos en dos categorías:
- Fallos de detención (Fail-Stop): Este tipo de fallo ocurre cuando un nodo simplemente se ha bloqueado. Los fallos de detención son los más fáciles de gestionar pues el nodo cesa en su ejecución. Paxos o el protocolo RAFT, se utilizan normalmente para tratar con este tipo de fallo.
- Fallos bizantinos: Son aquellos en los que el nodo defectuoso tiene un comportamiento malicioso o inconsistente de forma arbitraria. Este tipo es difícil de tratar ya que puede crear confusión debido a la información engañosa que provee. Esto puede ser resultado de un ataque, un error de software o la corrupción de datos. Los protocolos SMR (State Machine Replication) tales como la Tolerancia a Fallos Bizantinos Práctica (PBFT) se desarrollaron para abordar este segundo tipo de fallos.
Paxos
Se han propuesto muchas implementaciones de protocolos de consenso en sistemas distribuidos tradicionales. Paxos es el más famoso de estos protocolos y fue introducido por Leslie Lamport en 1989. Con Paxos, se asignan varios roles a los nodos, como Proposer, Aceptor y Learner (aprendiz). Los nodos o procesos se llaman réplicas y el consenso en presencia de nodos defectuosos se logra mediante un acuerdo entre la mayoría de los nodos.
RAFT
Funciona asignando a cada nodo uno de estos estados: Follower, Candidate o Leader. A continuación se elige como candidato al nodo que recibe suficientes votos para ello. A partir de ese momento todos los cambios tienen que pasar por el líder. El Líder confirma los cambios propuestos una vez que se completa la replicación en la mayoría de los nodos seguidores.
Mecanismos de consenso en Blockchain: Entendiendo sus categorías y aplicaciones
Entender los mecanismos de consenso en las cadenas de bloques es fundamental para comprender cómo funcionan las redes distribuidas y cómo se logra el acuerdo en estas plataformas. El consenso es un componente esencial en la tecnología blockchain, ya que permite a los nodos de una red distribuida acordar una única versión de la verdad. Veamos cómo estos mecanismos impactan en la escalabilidad y el rendimiento de las redes blockchain.
TBFT vs Proof-based
Los mecanismos basados en TBFT ofrecen un buen rendimiento cuando la red tiene un número limitado de nodos, pero enfrentan desafíos de escalabilidad. Por otro lado, los mecanismos de consenso Proof-based pese a que escalan muy bien pero funcionan más lentamente.
Listado de algoritmos de consenso empleados en blockchain
Proof-of-Work
Este tipo de mecanismo de consenso se basa en evidenciar que se han invertido suficientes recursos computacionales antes de proponer un valor para su aceptación en la red. Este esquema se utiliza en Bitcoin, Litecoin y otras blockchains de criptomonedas. Actualmente, es el único algoritmo que ha demostrado ser suficientemente exitoso contra el ataque Sybil (ataques de colusión).
Ataque Sybil
Los ataques Sybil son aquellos que se dan cuando un usuario o un grupo de usuarios fingen ser muchos usuarios. La resistencia a este tipo de ataques es esencial para una cadena de bloques descentralizada y permite a los mineros y validadores recibir una recompensa equitativa según los recursos que hayan invertido. La prueba de trabajo y la prueba de participación se protegen frente a esto haciendo que los usuarios tengan que gastar una gran cantidad de energía o entregar varias garantías. Estas protecciones son un elemento económico disuasorio frente a los ataques Sybil.
Proof of Stake
Este algoritmo se basa en la idea de que el nodo ha invertido y bloqueado (impidiendo su gasto) las suficientes criptomonedas en el sistema para que cualquier intento malicioso de atacar la red por su parte tenga más desventajas que beneficios. Esta idea fue introducida por primera vez por Peercoin.
Otro concepto importante en PoS es la edad de la criptomoneda. Ésta se determina por la cantidad de moneda que ha sido bloqueada en el stake multiplicada por el tiempo de bloqueo. En este modelo, las posibilidades de proponer y firmar el siguiente bloque aumentan con la edad de la moneda.
Prueba de participación delegada (DPoS)
Esta es una innovación sobre el PoS estándar, en la que cada nodo que tiene una participación en el sistema puede delegar la validación de una transacción a otros nodos mediante la votación. Se utiliza en la blockchain de BitShares.
Prueba de tiempo transcurrido (PoET)
Introducido por Intel en 2016 dentro del proyecto Intel Sawtooth Lake, PoET utiliza un entorno de ejecución de confianza (TEE) para proporcionar aleatoriedad y seguridad en el proceso de elección del líder a través de un tiempo de espera garantizado. Requiere el procesador Intel SGX (Software Guard Extensions) para que sea seguro.
Prueba de depósito (PoD)
Los nodos que deseen participar en la red deben realizar un depósito de seguridad antes de poder minar y proponer bloques. Este mecanismo se utiliza en la blockchain Tendermint.
Prueba de importancia (PoI)
PoI, al igual que PoS se basa en la participación que el nodo tiene en el sistema. La diferencia se encuentra que que también supervisa el uso y movimiento de tokens por parte del usuario para establecer un nivel de confianza e importancia. Se utiliza en la blockchain de la moneda NEM. Puede encontrar más información sobre esta moneda en el sitio web de NEM.
Consenso federado o consenso bizantino federado
Este mecanismo se utiliza en el protocolo de consenso Stellar. Los nodos en este protocolo mantienen un grupo de pares de confianza pública y solo propagan aquellas transacciones que han sido validadas por la mayoría de los nodos de confianza.
Mecanismos basados en reputación
El líder es elegido por la reputación que ha construido a lo largo del tiempo en la red y se basa el obtener la mayoría de los votos de los nodos miembros.
Tolerancia práctica a fallas bizantinas (PBFT)
Este mecanismo logra la Replicación del estado (SMR) proporcionando así tolerancia contra nodos bizantinos (nodos defectuosos que tienen un comportamiento malicioso o inconsistente). Existen varios protocolos: PBFT, PAXOS, RAFT y Acuerdo bizantino federado (FBA).
Prueba de actividad (PoA)
Se trata de una combinación de PoS y PoW; por lo que mejora la eficiencia energética de PoW preservando un buen nivel de seguridad. Utiliza PoW solo en la primera etapa del protocolo para cambiar luego a PoS.
Prueba de capacidad (PoC)
Este esquema utiliza espacio en disco duro como recurso para minar los bloques (también conocido como Hard Drive Mining). Esto es diferente de PoW, donde se utilizan recursos de CPU / GPU. Este concepto se introdujo por primera vez en la criptomoneda BurstCoin.
Prueba de almacenamiento
Este algoritmo permite la externalización de la capacidad de almacenamiento. Se basa en el concepto de que un nodo probablemente almacena un fragmento de datos específico, lo que sirve como medio para participar en el mecanismo de consenso. Se han propuesto varias variaciones de este esquema, como Prueba de replicación, Prueba de posesión de datos, Prueba de espacio y Prueba de espacio-tiempo.
Prueba de autoridad (PoA)
Utiliza la identidad de los participantes llamados validadores (validators) como una participación en la red. Los validadores son conocidos y tienen la autoridad para proponer nuevos bloques. Los validadores proponen nuevos bloques y los validan según las reglas de la cadena de bloques. Los algoritmos PoA comúnmente utilizados son Clique y Aura.
¿Qué es teorema CAP?
En el mundo de los sistemas distribuidos, el teorema CAP, también conocido como el teorema o conjetura de Brewer, juega un papel crucial en la comprensión de la relación entre la consistencia, la disponibilidad y la tolerancia a particiones.
Consistencia, disponibilidad y tolerancia
La consistencia es una propiedad que garantiza que todos los nodos en un sistema distribuido tengan una copia única, actual e idéntica de los datos.
La disponibilidad significa que los nodos en el sistema están activos, accesibles para su uso, aceptan solicitudes entrantes y responden con datos sin fallos cuando sea necesario.
La tolerancia a particiones garantiza que si un grupo de nodos no puede comunicarse con otros nodos debido a fallos en la red, el sistema distribuido continúa funcionando correctamente. Esto puede ocurrir debido a fallos en la red y en los nodos.
El teorema CAP y sus implicaciones en los sistemas distribuidos
El teorema CAP, introducido por Eric Brewer en 1998 y demostrado como teorema por Seth Gilbert y Nancy Lynch en 2002, establece que cualquier sistema distribuido no puede tener consistencia, disponibilidad y tolerancia a particiones simultáneamente. Es decir, sólo puede lograr dos de estas propiedades al mismo tiempo: AP (disponibilidad y tolerancia a particiones), CA (disponibilidad y consistencia) o CP (consistencia y tolerancia a particiones).
El diagrama anterior muestra como sólo se pueden lograr dos propiedades al mismo tiempo. Ya sea AP, CA o CP. Así:
- Si optamos por CP (consistencia y tolerancia a particiones), sacrificamos la disponibilidad.
- Si optamos por AP (disponibilidad y tolerancia a particiones), sacrificamos la consistencia.
- Si optamos por CA (disponibilidad y consistencia), sacrificamos la tolerancia a particiones.
Por lo general, un fallo de partición de red no puede ser ignorado. Esto significa que se debe elegir entre consistencia o disponibilidad en caso de que se produzca partición de red.
¿Cómo maneja Blockchain el teorema CAP?
En un primer momento podría parecer que la tecnología blockchain, especialmente en su implementación más exitosa, Bitcoin, viola el teorema CAP al lograr las tres propiedades al mismo tiempo. Sin embargo, esto no es del todo cierto. En realidad, las cadenas de bloques sacrifican la consistencia en favor de la disponibilidad y la tolerancia a particiones, pero logran la consistencia con el tiempo, lo que se conoce como consistencia eventual.
La consistencia eventual implica que puede haber un desacuerdo temporal entre los nodos sobre el estado final, pero finalmente se llega a un acuerdo. Por ejemplo, en Bitcoin, se requieren múltiples confirmaciones de transacción para lograr un buen nivel de confianza en que las transacciones no se revertirán en el futuro.
Bibliografía
- Mastering the blockchain ed.3.
- Mecanismos de consenso. Ethereum docs.
- [Imagen] Teorema CAP Wikipedia lincencia creative commons