Pbft

pBFT (Practical Byzantine Fault Tolerance) es un algoritmo de consenso utilizado en sistemas distribuidos para garantizar la tolerancia a fallas bizantinas. Fue propuesto por primera vez por Miguel Castro y Barbara Liskov en 1999.

El objetivo principal de pBFT es permitir que un conjunto de nodos (también conocidos como réplicas) llegue a un acuerdo sobre el orden de las operaciones propuestas en un entorno donde algunos nodos pueden comportarse de manera maliciosa o presentar fallas. Estas fallas pueden incluir nodos que envían mensajes incorrectos, se comportan de manera impredecible o dejan de funcionar por completo.

pBFT se basa en el modelo de faltas bizantinas, que asume que los nodos pueden ser maliciosos o defectuosos, pero no ambos al mismo tiempo. El algoritmo requiere que al menos dos tercios de los nodos en el sistema estén operativos y sean honestos para garantizar la seguridad y el progreso del sistema.

Funcionamiento 
El funcionamiento básico de pBFT se puede resumir en los siguientes pasos:

 Propuesta: Un cliente envía una solicitud de operación a todos los nodos del sistema.
 Preparación: Cada nodo envía un mensaje de preparación a todos los demás nodos una vez que ha recibido la solicitud. Estos mensajes contienen un resumen de la operación propuesta.
 Commit (Compromiso): Después de recibir mensajes de preparación de dos tercios de los nodos, cada nodo envía un mensaje de compromiso a los demás nodos.
 Ejecución: Una vez que un nodo ha recibido mensajes de compromiso de dos tercios de los nodos, ejecuta la operación propuesta y envía la respuesta al cliente.
 Confirmación: El cliente espera recibir respuestas de al menos dos tercios de los nodos confirmando que han ejecutado la operación. Una vez que se ha alcanzado este umbral, la operación se considera confirmada.

pBFT proporciona seguridad y consistencia en el consenso a través de la utilización de técnicas criptográficas, firmas digitales y acuerdos de múltiples fases. Sin embargo, también tiene limitaciones, como un mayor tiempo de latencia debido a la necesidad de intercambiar mensajes entre los nodos y una escalabilidad limitada debido a la comunicación punto a punto requerida entre todos los nodos.

Variantes 
A lo largo de los años, se han propuesto variantes y mejoras de pBFT para abordar algunas de sus limitaciones y adaptarlo a diferentes entornos y aplicaciones.

Algunas de las variantes son las siguientes:

 Simplified pBFT: Esta variante simplifica el algoritmo pBFT original reduciendo el número de rondas de mensajes necesarios para alcanzar el consenso. Logra esto eliminando la fase de "vista" del algoritmo original y permitiendo que los nodos envíen sus votos directamente en una única ronda.
 ByzCoin: Es una variante de pBFT que se utiliza en la plataforma de criptomoneda de código abierto llamada "Dedicated Byzantine Architecture". ByzCoin utiliza un conjunto de rondas de mensajes predefinidas para alcanzar el consenso y garantizar la seguridad en un entorno con nodos maliciosos.
 Tendermint: Tendermint es una plataforma de consenso desarrollada como una variante de pBFT. Utiliza un enfoque de selección de líderes rotativos y utiliza un algoritmo de votación para alcanzar un consenso entre los nodos. Tendermint también proporciona una capa de aplicaciones para el desarrollo de aplicaciones descentralizadas (DApps).
 HoneyBadgerBFT: Es una variante de pBFT que utiliza un protocolo llamado "HoneyBadger" para alcanzar el consenso en un entorno tolerante a faltas bizantinas. HoneyBadgerBFT permite la tolerancia a faltas bizantinas adaptativa, lo que significa que puede ajustar su tolerancia a medida que el número de nodos maliciosos cambia dinámicamente.
 HotStuff: HotStuff es una variante de pBFT que mejora la escalabilidad del algoritmo original mediante la introducción de una estructura de árbol de votación. Los nodos emiten votos sobre los bloques propuestos y utilizan la estructura del árbol para reducir la cantidad de mensajes necesarios para alcanzar el consenso.

Ventajas 
pBFT (Practical Byzantine Fault Tolerance) ofrece varias ventajas en comparación con otros algoritmos de consenso utilizados en sistemas distribuidos. Aquí hay algunas de las ventajas clave de pBFT:

 Tolerancia a fallas bizantinas: pBFT es diseñado específicamente para tolerar nodos maliciosos o con fallas bizantinas en el sistema. Puede resistir hasta un tercio de los nodos que se comportan de manera maliciosa o presentan fallas, lo que lo hace adecuado para entornos donde la confiabilidad y seguridad son esenciales.
 Seguridad: pBFT utiliza técnicas criptográficas y firmas digitales para garantizar la integridad y autenticidad de los mensajes intercambiados entre los nodos. Además, su diseño permite detectar y descartar mensajes falsos o manipulados, lo que proporciona un alto nivel de seguridad en el consenso.
 Finalidad rápida: Una vez que pBFT alcanza un consenso, se garantiza la finalidad rápida de las operaciones confirmadas. No hay necesidad de esperar confirmaciones adicionales o esperar a que los bloques se agreguen a una cadena de bloques, lo que permite una ejecución más rápida de las transacciones.
 Flexibilidad y modularidad: pBFT es un algoritmo modular, lo que significa que se puede implementar en diferentes sistemas y aplicaciones distribuidas. Puede ser adaptado para funcionar con diferentes protocolos de red y tolerar diferentes tipos de fallas según los requisitos específicos del sistema.
 Rendimiento escalable: Aunque pBFT implica un mayor número de mensajes y una mayor latencia en comparación con algunos otros algoritmos de consenso, sigue siendo escalable en términos de rendimiento. A medida que se aumenta el número de nodos, pBFT mantiene una alta tasa de transacciones por segundo debido a su enfoque asincrónico y paralelo en el procesamiento de solicitudes.

Limitaciones 
El modelo de consenso pBFT funciona de manera eficiente solo cuando la cantidad de nodos en la red distribuida es pequeña debido a la alta sobrecarga de comunicación que aumenta exponencialmente con cada nodo adicional en la red.

 Ataques Sybil: Los mecanismos pBFT son susceptibles a los Ataque Sybil, donde una entidad (parte) controla muchas identidades. A medida que aumenta el número de nodos en la red, los ataques de Sybil se vuelven cada vez más difíciles de llevar a cabo. Pero como los mecanismos pBFT también tienen problemas de escalabilidad, el mecanismo pBFT se usa en combinación con otro(s) mecanismo(s).
 Escalado: pBFT no escala bien debido a su sobrecarga de comunicación (con todos los demás nodos en cada paso). A medida que aumenta el número de nodos en la red (aumenta como O(n^k), donde n son los mensajes y k es el número de nodos), también aumenta el tiempo necesario para responder a la solicitud.
 Comunicación punto a punto: pBFT requiere una comunicación directa entre todos los nodos del sistema. A medida que el número de nodos aumenta, el número de mensajes necesarios para alcanzar un consenso también aumenta, lo que puede resultar en una mayor latencia y carga en la red.
 Tolerancia limitada: pBFT está diseñado para tolerar hasta un tercio de los nodos con fallas bizantinas. Si el número de nodos defectuosos o maliciosos supera ese límite, la capacidad del algoritmo para garantizar la seguridad y el progreso puede verse comprometida.
 Requisito de nodos honestos: Para garantizar la seguridad y el progreso del sistema, pBFT requiere que al menos dos tercios de los nodos en el sistema sean honestos. Si un número mayor de nodos maliciosos o defectuosos supera ese umbral, puede afectar la capacidad del algoritmo para alcanzar un consenso confiable.
 Dependencia de la identidad digital: pBFT utiliza técnicas criptográficas y firmas digitales para garantizar la seguridad y la integridad de los mensajes. Sin embargo, esto también implica una dependencia de una infraestructura de identidad digital confiable y segura para garantizar la autenticidad de los nodos y los mensajes.
 Costo computacional: pBFT implica un mayor costo computacional en comparación con algunos otros algoritmos de consenso más simples. Esto se debe a la necesidad de realizar cálculos criptográficos y verificar firmas digitales en cada paso del algoritmo.

Es importante considerar estas limitaciones y problemas al seleccionar y diseñar un sistema distribuido que utilice pBFT como algoritmo de consenso. Cada sistema y aplicación requerirá una evaluación cuidadosa de estos factores para determinar si pBFT es la elección adecuada.

Enlaces externos 
 "Practical Byzantine Fault Tolerance" por Miguel Castro y Barbara Liskov.
 "The Byzantine Generals Problem" por Leslie Lamport, Robert Shostak y Marshall Pease.
 "Blockchain Basics: A Non-Technical Introduction in 25 Steps" por Daniel Drescher.
 "" por Rodrigo Santamaria, Universidad de Salamanca.
 "" por Rodrigo Santamaria, Universidad de Salamanca.