Blockchain es un tipo de sistema que se compone de dos principios basicos:
- red p2p
- almacenamiento gestionado por concenso
blockchain se compone de un conjunto de nodos de tal manera que cada uno de ellos puede comportarse a la vez como cliente o servidor, usualmente con propiedades de descubrimiento de nodos, por lo cual cada miembro de la red puede ser conocido por los demas, aumentando la capacidad de la red para estar disponible a peticiones.
en blockchain cada nodo completo posee una copia completa de la informacion del sistema. para asegurar que cada copia es integra, la manera de gestionar la informacion en la misma es a traves de un algoritmo de concenso.
estos algoritmos de concenso se basan usualmente en una competencia matematica entre los diferentes nodos para organizar la informacion en paquetes llamados bloques, los cuales dependen matematicamente unos de otros, haciendo que cada bloque tenga a su vez la informacion suficiente para validar los datos anteriores, lo cual hace que un atacante que quiera modificar un bloque determinado, tenga que modificar una cantidad n de bloques que va aumentando conforme pasa el tiempo, lo que aumenta la dificultad de calculo de manera exponencial.
el uso de sistemas blockchain se realiza cuando se presentan los siguientes supuestos:
- no es posible tener el control del resto de participantes del sistema o confiar en que el resto de participantes de un sistema no van a intentar falsificar o corromper la informacion (zero trust systems)
- se necesita alta disponibilidad, redundancia y tolerancia a fallos
- puede permitirse altos tiempos de respuesta no-deterministicos y uso excesivo de almacenamiento y recursos, asi como de ancho de banda
- los interesados del sistema se benefician de tener copias locales del sistema
- la verificacion de eventos en el tiempo es un requisito critico
- necesitas monetizar completamente su uso
- sistemas altamente ineficientes
- susceptibles a deserializacion insegura y a ataques con la metadata
- si un componente del sistema consigue el 51% del poder de computo, el sistema es inseguro
- poco escalable
- posibilidad de ramas secundarias (forks)
- buscar diferentes algoritmos de concenso
Se han elaborado distintos protocolos o algoritmos que solucionan este tipo de problemas (https://es.wikipedia.org/wiki/Problema_del_consenso). Cada uno se aplica para cierto tipo de entornos y tienen sus propias caracteristicas. Veamos algunos ejemplos:
- Commit de dos fases
- Commit de tres fases
- Raft
- Paxos y Multipaxos
- Prueba de trabajo
- Prueba de participacion tanto en su version original como en la version prueba de participacion delegada.
- Prueba de quemadura
- Algoritmo de consenso Protocolo Ripple. Es el usado en Ripple y Stellar
- Zookeeper Atomic Broadcast
- Viewstamped replication