# Prueba de autoridad

Un algoritmo de prueba de autoridad, sistema de 'reputación' o simplemente sistema PoA (del inglés Proof-Of-Authority system) es un algoritmo utilizado en blockchain que permite validar transacciones de manera rápida, a través de un mecanismo de consenso distribuido basado en la identidad y reputación de los nodos elegidos como validadores de bloques, de tal manera que para realizar sus funciones los nodos no tienen que apostar, pero es necesario realizar una verificación de su identidad y fiabilidad.
Los algoritmos PoA se basan en un conjunto de N nodos de confianza llamados validadores o autoridades. Cada validador es identificado por un identificador único y se supone que la mayoría de ellos actúan de forma honesta, es decir, al menos N/2 + 1.
Este algoritmo de consenso tiene una diferencia principal con respecto a los mecanismos de PoW y PoS, esta es que aprovecha la identidad real revelada de forma voluntaria por cada uno de los validadores, como seguro de confianza y muestra de transparencia para que el resto de nodos confien en él y así pueda encargarse de la generación de los nuevos bloques. Al asociar una reputación a la identidad real, se incentiva a los validadores a mantener el proceso de transacción, ya que cualquier acto que atente contra la fiabilidad y transparencia de la red, recae directamente sobre esa persona o institución y puede provocar que su reputación se arruine en todas partes.
El término PoA fue propuesto originalmente en 2017 como parte del ecosistema Ethereum , por su cofundador y ex-CTO, Gavin Wood. Fue orientado a redes privadas y se implementó en los clientes Aura y Clique. Su protagonismo se debe al aumento del rendimiento con respecto a los algoritmos típicos de BFT (Tolerancia a fallos bizantinos).

## Funcionamiento

En primer lugar, se deben elegir de forma aleatoria los nodos confiables que actúan como validadores. Para realizar esta inclusión y elección de nodos se realiza una votación por un conjunto de nodos previamente autorizados, mediante un algoritmo de consenso clásico tipo PBFT (Paxos bizantino). De este modo, se evita que un nodo malicioso pueda hacerse pasar por un nodo validador de confianza y sabotear el funcionamiento de la red en cuestión. Para que se complete dicha elección, es necesario validar las identidades de los candidatos a validadores. Esto significa que quienes quieran participar en la red, debe verificar y hacer públicas sus identidades reales, además debe estar dispuesto a poner su reputación como garantía de confianza y transparencia para el resto de nodos.
Dado que el algoritmo de consenso de PoA se basa en la reputación que tengan los nodos validadores dentro de la red, es muy importante que estos cuiden su identidad, ya que estos nodos validadores en las redes de blockchain que usan dicho algoritmo son siempre los principales responsables en caso de quese produzca un fallo de la red y es por esta razón, que velarán por el buen funcionamiento, la transparencia y confiabilidad de la operación de la misma.
En cuanto al consenso, PoA se basa en un esquema de rotación de la minería, un enfoque ampliamente utilizado para distribuir equitativamente la responsabilidad de la creación de bloques entre los validadores o autoridades. El tiempo se divide en etapas, en cada una de las cuales hay una autoridad como líder minero. Un líder minero solo puede firmar un número máximo de bloques consecutivos durante su etapa.

## Validadores

Son necesarios tres requisitos para poder ser validador. Estos requisitos tienen implicaciones muy importantes en la estructura de incentivos que impulsan las acciones de los validadores hacia un comportamiento honesto.
* Las identidades deben estar formalmente identificadas para poder cruzarlas a través de datos fiables.
* La elegibilidad para ser validador debe ser difícil de obtener para que sea un validador honesto.
* Debe haber completa uniformidad durante el proceso de establecimiento de validadores.
Hay algunas plataformas que varían un poco los requisitos, pero todas se centran en ofrecer un incentivo para que el validador siga formando parte de la red. Otra cosa muy importante para los validadores es la reputación, pues si actúan de manera indebida esto afectará a su reputación y podrían ser eliminados como validadores.

## Ventajas y desventajas
### Ventajas

Los principales beneficios del algoritmo de consenso PoA son que reduce gastos y aumenta la escalabilidad. El coste computacional del mecanismo de consenso es mucho más bajo que en el caso del algoritmo de consenso PoW, ya que no precisa de un esquema de minería como ocurre en Bitcoin. Por dicho motivo, el consumo energético es considerablemente inferior y por tanto se considera este tipo de algoritmo de consenso más eco-friendly, es decir, amigable desde el punto de vista del medio ambiente.
Además, el Proof-Of-Authority requiere un número pequeño de actores o participantes. Esto hace que la red pueda actualizar la blockchain con más frecuencia mientras reduce el tiempo entre cada bloque y procesa más transacciones con unas tasas de tiempo casi cero, lo que lo hace que este algoritmo sea una muy buena alternativa para blockchains privadas donde se busca un alto nivel de seguridad y de escalabilidad en las mismas.

### Desventajas

Como principales limitaciones del algoritmo de consenso PoA destaca que su modelo renuncia al esquema de descentralización. De hecho, el protocolo está pensado para una centralización distribuida, ya que ahora el poder de toma de decisiones va a estar concentrado en unos pocos nodos en concretos en lugar de estar distribuido a todos los nodos de la red como pasa en PoW.
Otra desventaja a considerar sería que las identidades de los nodos validadores de PoA deben de ser públicas. Un aspecto que muchos ven como preocupante, pues deja al descubierto quienes participan en la blockchain y podría dar lugar a manipulaciones por parte de terceros, que quieran aprovecharse de cualquier debilidad de esa persona o empresa que hace de validador para que actuén de forma deshonesta y comprometer el sistema.

## Implementaciones

Las dos principales implementaciones de PoA, son Aura y Clique. Estas funcionan de forma bastante diferente ya que aunque ambas tienen una primera ronda en la que el nuevo bloque es propuesto por el líder minero actual, mediante una propuesta de bloque o block proposal; luego Aura requiere otra ronda de aceptación de bloque o block acceptance, a diferencia de Clique que no la lleva a cabo.

### Aura

Aura es el nombre del algoritmo de consenso Proof-of-Authority (PoA) implementado en Parity. El nombre viene originalmente de Authority Round (y solía denominarse AuRo) . Actualmente se utiliza en la red Kovan que provee Ethereum.
Consideramos que la red es sincrónica y que todas las autoridades se sincronizan dentro del mismo tiempo t UNIX.
Un paso es una parte de la etapa de autoridades. Cada autoridad puede firmar un bloque en cada etapa. El índice s de cada paso se calcula de forma determinista por cada autoridad como s = t/step_duration, donde la duración del paso o step_duration es una constante que determina la duración de un paso. El líder de un paso s es la autoridad identificada por el id l = s mod N. Las autoridades mantienen localmente dos colas, una para las transacciones recibidas, Qa y otra para los bloques pendientes, Qb.
En cada paso, el líder l incluye las transacciones en Qb en un bloque b, y lo transmite a las demás autoridades (ronda de propuesta de bloque). A continuación, cada autoridad envía el bloque recibido a las demás (ronda de aceptación del bloque). Si resulta que todas las autoridades han recibido el mismo bloque b, aceptan b poniéndolo en cola en Qb. Cualquier bloque recibido por una autoridad que no se espera que sea el líder actual es rechazado. Siempre se espera que el líder envíe un bloque, de tal manera que si no hay ninguna transaccion disponible, debe enviarse un bloque vacío.
En caso de que las autoridades no se pongan de acuerdo sobre el bloque propuesto durante la aceptación del bloque, se activa una votación para decidir si el líder actual se encuentra en una posición de liderazgo, es decir, se decide si el líder actual es malicioso y en caso de que así se determine se le expulsa. Una autoridad puede votar al líder actual como malicioso porque no ha propuesto ningún bloque, ha propuesto más bloques de los esperados, o ha propuesto diferentes bloques a diferentes autoridades. El mecanismo de votación que se realiza es a través de un contrato inteligente, y se requiere una mayoría de votos para eliminar al líder actual, l ,del conjunto de autoridades (o validadores) legítimas. Cuando esto ocurre todos los bloques de Qb propuestos por el líder l se descartan. El mal comportamiento del líder puede ser causado por fallos de proceso (por ejemplo, asincronía de la red, fallo del software) o fallos bizantinos (por ejemplo, el líder ha sido manipulado y se comporta maliciosamente a propósito).
Digamos que tenemos cinco autoridades: A, B, C, D y E. Estos serían los pasos, tal y como se definen en la especificación de la cadena:
Paso 1: A firma un bloque
Paso 2: B firma un bloque
Paso 3: C firma un bloque
Paso 4: D firma un bloque
Paso 5: E firma un bloque
Una vez terminada la etapa, se vuelve a empezar.
Si la autoridad C intentara firmar un bloque justo después de la A, entonces este bloque estaría más de un paso por lo tanto dicho bloque sería rechazado. La firma de bloques se basa estrictamente en el orden de paso de los bloques de todas las autoridades. Por otro, lado podría ocurrir que el siguiente líder l no emita, de tal manera que si por ejemploi C se da cuenta de que B no proporciona un bloque en la ventana de tiempo especificada, puede anular este paso con su propio bloque y la etapa continúa. Hay tolerancias en las marcas de tiempo de los bloques para asegurarse de que la red no se atasca.

### Clique

Clique es el nombre del algoritmo de consenso Proof-of-Authority (PoA) implementado en Geth. Actualmente se utiliza para proteger las redes de prueba de Ethereum, Goerli y Rinkeby.
Mientras que Aura se basa en el tiempo de UNIX. Clique calcula el paso actual y el líder relacionado utilizando una fórmula que combina el número de bloque y el número de autoridades. Además del líder actual, se permite que otras autoridades propongan bloques en cada paso. Para evitar que una sola autoridad pueda causar estragos en la red imponiendo un gran número de bloques, cada autoridad sólo puede proponer un bloque cada N/2 + 1 bloques. De este modo, en cualquier momento hay como máximo N - (N/2 + 1) autoridades que pueden proponer un bloque. Al igual que antes, si las autoridades actúan de forma maliciosa pueden ser expulsadas.

## PoA en blockchain privada

La prueba de autoridad se considera más eficiente para las cadenas de bloques privadas. Por ejemplo en el caso de una red de bancos verificables en el que cada uno actuará como validador de sí mismo. Se necesita una mayoría para poder confirmar el estado de la blockchain y se mantendrá una mayor eficacia en la verificación de transacciones y el consenso.

## PoA vs PoW vs PoS

PoA vs PoW vs PoS :
| Protocolo | Ventajas | Desventajas | Seguridad | Aplicaciones |
| Prueba de Autoridad | Aumenta la velocidad de validación de transacciones y funciona como una plataforma para el desarrollo y mantenimiento de aplicaciones descentralizadas. | No se considera la descentralización; las especificaciones de los validadores son accesibles para cualquier persona y la amenaza de dañar la reputación en realidad no protege a una persona de participar en actividades perjudiciales. | Seguro contra ataques de denegación de servicio y ataques del 51 % hasta cierto punto. | Aura, Clique. |
| Prueba de Trabajo | Llega a un consenso rápidamente, descarta la posibilidad de spam y se prueba más en el mismo tiempo. | Mucha energía consumida y desperdiciada en el proceso de minería, la dependencia del hardware puede llevar a la centralización de la minería. | PoW está abierto al ataque del 51% junto con la minería selfifh y el ataque eclipse. | Bitcoin, Ethereum. |
| Prueba de Participación | Es ventajoso sobre otros protocolos debido a la reducción del consumo de energía, la facilidad de replanteo y su respeto por el medio ambiente. | Una desventaja básica es que los stakeholders dominan la red. | A pesar de ser seguro contra un ataque del 51 %, es vulnerable a ataques de largo alcance. | Ethereum 2.0, Peercoin. |

## Seguridad de PoA frente a ataques
### Ataques

El consenso del PoA pretende ser significativamente más insensible a los ataques que el consenso del PoW. Esto se debe a que el sistema no puede ser socavado por un cliente que descubra cómo obtener el 51% de la fuerza computacional. En el consenso de PoA, el ataque del 51 % requiere que un agresor se ocupe del 51 % de los nodos del sistema. Por lo general, esto no es lo mismo que el ataque del 51 % para los tipos de consenso de PoW, donde un atacante debe adquirir el 51 % de la fuerza computacional del sistema. Obtener el control de los centros en una red blockchain que ha dado su consentimiento es mucho más difícil que obtener fuerza computacional. Aunque en una red de tipo consenso PoW, un atacante puede aumentar la potencia de cálculo (rendimiento) para el segmento de red controlado, se aumenta el porcentaje controlado. Para el consenso de PoA, esto no tiene sentido porque las decisiones de la red blockchain no se ven afectadas por el poder computacional del nodo. Tratar con el 51% de las autoridades que no están asociadas legítimamente es mucho más difícil que eso. Los nodos son previamente verificados, y en caso de que uno de ellos sea inaccesible, la red puede prohibirlo en el procedimiento de aprobación. Un atacante envía una gran cantidad de intercambios y bloques a un nodo de red enfocado con el objetivo final de alterar su actividad y hacerlo inaccesible.

### Ataques DoS

El mecanismo PoA hace posible defenderse contra este ataque: dado que los nodos de la red están verificados, los derechos de creación de bloques se otorgan regularmente de forma exclusiva a los nodos que resistirán los ataques DoS. En caso de que un nodo sea inaccesible durante un período específico, con frecuencia se prohíbe del resumen de nodos de aprobación.

## Notas y referencias

* ↑ «Public versus Private Blockchains».
* ↑ «Proof of Authority».
* ↑ «PBFT vs Proof-of-Authority: Applying the CAP Theorem to Permissioned Blockchain».
* ↑ «Clique PoA protocol».
* ↑ «Table 1. A Research Survey on Applications of Consensus Protocols in Blockchain».
* ↑ «A Research Survey on Applications of Consensus Protocols in Blockchain».