Professional Documents
Culture Documents
La tecnología blockchain, también conocida como “contabilidad distribuida” (o con sus siglas
inglesas DLT) o en castellano “cadenas de bloques”, es un protocolo de operaciones de intercambio entre
pares que se producen, gestionan y comprueban de forma descentralizada, automatizada, compartida y
segura. Pero en la base para que la tecnología blockchain sea fiable está el consenso.
¿Qué es eso del consenso? Pues que todos los integrantes de una red están de acuerdo en que
una transacción X ha ocurrido entre dos miembros de la red en un momento temporal
determinado. Simplemente. Para ponerse de acuerdo, evitando engaños y minimizando errores, es
cuando se pone en práctica la solución al problema de los generales bizantinos.
El problema de los generales bizantinos es un viejo juego de lógica: en un asedio hay un número
indeterminado de generales que debe coordinarse para la conquista. Sólo uno cursa la orden (que es
binaria, atacar o retirarse), el comandante, el resto son tenientes. Puede haber uno o más traidores
(comandante incluido), con el objetivo de que no se cumpla la orden.
LESLIE LAMPORT, ROBERT SHOSTAK, and MARSHALL PEASE. The Byzantine Generals Problem. ACM
Transactions on Programming Languages and Systems, Vol. 4, No. 3, July 1982, pp 382-401.
Problema de los generales bizantinos
El problema de los generales bizantinos es un experimento mental para plantear, de una forma
metafórica, el problema que se da entre un conjunto de sistemas informáticos que tienen un objetivo
común. Deben encontrar un plan de acción común a partir de una estructura jerárquica, donde uno de los
sistemas que tiene mayor rango proporciona una orden a partir de la cual el resto de sistemas tiene que
operar (fijar su decisión). Además es posible que alguno de ellos no sea fiable y provea información falsa
de forma intencionada.12
Donde el valor de es la orden mandada desde los distintos generales al general al que
estamos evaluando su decisión.
Veamos el esquema si el comandante es leal y un teniente es traidor:
Donde el valor de es la orden mandada desde los distintos generales al general al que
estamos evaluando su decisión.
Mensajes firmados y todos se pueden comunicar con todos
En este escenario los mensajes van firmados (se trata de mensajes escritos). Al ir firmados no son
modificables y por tanto los traidores no pueden modificarlos y decir que provienen del comandante. En
esta situación es posible resolver el problema con sólo tres generales y uno de ellos traidor. El algoritmo
de este tipo de problemas se llama SM(m) (donde SM viene del inglés Signed Messages) y es el siguiente:
Primero el comandante envía una orden firmada a todos los tenientes. Cada vez que un
teniente recibe un mensaje firmado lo guarda, hace una copia, la firma y la reenvía a todos los
tenientes que no venían en la firma del documento. Según este algoritmo los generales no
recibirán más mensajes cuando tengan todas las posibles combinaciones. Una vez recibidas, cada
nodo toma la decisión basándose en la orden transmitida por la mayoría.
En este escenario los comandantes traidores son descubiertos inmediatamente ya que han firmado
órdenes contradictorias.
No todos se pueden comunicar con todos
Si falta alguno de los caminos de comunicación las cosas se complican. Veamos los requerimientos
tanto cuando hay mensajes orales como mensajes firmados.
Con mensaje orales el algoritmo OM(m) solo funciona bajo la condición de que el grafo
de caminos posibles entre generales sea 3m-regular (cada nodo tiene al menos 3m vecinos), lo
que implica 3m+1 nodos (generales). A esta versión del algoritmo se le llama OM(m,p), donde p
es el número de vecinos.
Para mensajes firmados la única condición es que todos los generales leales estén
conectados, para que así los traidores no puedan bloquearle y evitar que le pasen o pase la orden
firmada.
Consideraciones
El problema de los dos generales bizantinos es el mismo que se tiene cuando se realiza
una transmisión de dinero sin un intermediario confiable.1 Bitcoin ofreció la primera solución
práctica a este problema.
En el mundo real las líneas fallan de forma no deliberada. Para detectarlas se pueden usar
códigos de detección de errores. En un escenario con mensajes orales, una línea que falla puede
considerarse como un nodo traidor. Si se utilizan mensajes firmados entonces un fallo en una
línea se detectaría de forma irrefutable.
Para reconocer al emisor de un mensaje empleando mensajes orales, se deberían tener
líneas fijas y no redes de comunicaciones. Con mensajes firmados no hay problema para
reconocer al emisor.
La ausencia de mensajes se suele detectar usando time-out (límites de tiempo).
En el mundo real nunca está garantizado que un error aleatorio no pueda falsear una firma.
Sin embargo esto tiene una probabilidad muy baja con métodos de firma adecuados.
Evitar fraudes deliberados se convierte en un problema criptográfico. Por tanto, es
importante elegir algoritmos de firma seguros.
Se debe detectar si un mensaje se envía dos veces, mediante la comprobación de su firma.
De tal modo que una firma no puede ser generada si el proceso ya ha visto esa misma firma en
otro instante.
Referencias
Bitcoins y el problema de los generales bizantinos. Cristina Pérez-Solà y Jordi Herrera-
Joancomart. Universitat Autònoma de Barcelona. 2014
Tarea 2. Sistemas Distribuidos. Marcelo Valdivia Lagos. 04/04/2013
The Byzantine Generals Problem. Manuela Lütolf
The Byzantine Generals Problem. Leslie Lamport, Robert Shostak y Marshall Pease.SRI
International 1982
La prueba de trabajo es la única solución al problema de los
generales bizantinos
Imagina que estás sentado en un bunker. No tienes ni idea de la gente que hay fuera ni de cuáles
son sus intenciones. Tú sólo recibes mensajes entrantes de desconocidos que pueden contener cualquier
cosa. Pueden ser basura aleatoria o ser mensajes preparados para confundirte. No puedes saberlo ni
puedes confiar en nadie.
El problema del dinero o de cualquier otro “contrato social” es que todo el mundo debe ser capaz
de saber lo que la mayoría acuerda sin necesidad de confiar en un intermediario (o de otra forma estos
podrían abusar de su posición ventajosa). Si todo el mundo vota por “X”, entonces tú sentado en tu
bunker debes llegar a saber de alguna forma que la gente fuera ha votado “X” y no “Y” o “Z”. Pero
recuerda: no puedes confiar en los mensajes de nadie, y mensajes es lo único que recibes del mundo
exterior.
Cuando dos propuestas llegan a tu bunker, “X” e “Y”, no tienes referencia válida para saber cuál
de las dos es la mayoritariamente votada. Sólo tienes los datos mismos que te llegan para juzgar cuál de
las opciones elegir. Para hacer las cosas más sencillas, no estamos intentando aplicar un juicio subjetivo
a cada una de las opciones, sino hacer que todo el mundo converja en elegir una de ellas. En el caso del
Bitcoin es una asunción razonable pensar que cada uno es propietario de su dinero, y que por lo tanto a
nadie le importa mucho cuál es la versión de la historia siempre y cuando su propio balance sea
respetado.
Así pues ¿cómo de diferente debería ser “¿X” de “¿Y” para saber que nadie accidentalmente podría
escoger “¿Y”, “Z” o “W”? Primera propiedad: estos datos deben ser recientes. De esa forma sabemos
que no estamos sentados sobre algún viejo acuerdo mientras todo el mundo se ha mudado a otro más
reciente. Segunda propiedad: cualquiera alternativa “reciente” debe ser imposible de producir. Si es
posible que sea producida, siempre existe la posibilidad de que un determinado número de personas
hubiera optado por ella como alternativa. Y no tienes forma de saber cuántas alternativas existen y
cuántas personas las han adoptado (porque sigues sentado en un bunker y no puedes confiar en los
mensajes entrantes ni saber qué otros mensajes te estás perdiendo).
Problema de los generales bizantinos
¿Como definimos imposible? Significa dos cosas: o es lógicamente imposible, o es prácticamente
(económicamente) imposible. Si es lógicamente imposible, entonces podemos conocer todos los futuros
acuerdos de forma anticipada (como una secuencia determinada de números), simplemente usando la
inducción. Pero esto no funciona así porque tendríamos que haber llegado a alguna clase de acuerdo
sobre un punto de partida en primer lugar. Así que terminamos con la imposibilidad práctica. En otras
palabras, lo que necesitamos es lo siguiente:
El mensaje “X” debe ser reciente de forma probada y las alternativas han de ser
prácticamente imposibles de producir.
La imposibilidad práctica puede ser redefinida en términos de “coste de oportunidad”: hay un
número limitado de recursos físicos y si estos han sido asignados mayormente a X antes que a Y
deberíamos podemos ver que X ha chupado para sí mismo todos los recursos de todas las demás
alternativas. Porque de lo contrario, habría una gran incertidumbre en cuanto al uso de los recursos
remanentes: ¿pueden haber ido a parar a Y? ¿Es posible que X no chupara todos los recursos y que aún
así las alternativas no resulten posibles? Eso implicaría que X se sigue lógicamente de cualquiera sea el
estado previo en el sistema y que por lo tanto no es necesario un proceso de votación.
Por lo tanto: el mensaje X debe ser reciente de forma probada y debe haber gastado –de forma
probada también– una gran cantidad de recursos, suficientemente grande como para que no haya
recursos para producir otras alternativas en un periodo corto de tiempo. Además, el mensaje X
debe ser siempre reciente y debe siempre superar cualquier alternativa. Porque no podemos fiarnos de
los mensajes recibidos anteriormente: ¿y si “Y” es un mensaje antiguo que ha llegado ahora o que ha
sido producido tras X cuando hubo recursos disponibles?
Esto lógicamente nos lleva a lo siguiente: debemos aceptar sólo los mensajes con la mayor prueba-
de-trabajo asociada a ellos, y esa prueba-de-trabajo debe ser tan grande como sea posible, de manera que
no haya posibilidad de que una alternativa pudiera ser producida en ese corto lapso de tiempo. Y esa
prueba-de-trabajo debe ser constantemente reforzada o el valor del consenso previo empezará a
desvanecerse rápidamente según crece la oportunidad para otras alternativas.
Las granjas caras y altamente especializadas son la forma más fiable de llegar a un consenso.
Si fuéramos a usar recursos no especializados, sería complicado que valorásemos si la mayoría de ellos
están siendo en realidad usados para prueba-de-trabajo. Mediante la observación de esa enorme cantidad
de trabajo aplicada a una parte muy específica y fácil de observar de la economía, podemos estimar cuán
caro es producir un mensaje alternativo con el mismo grado de dificultad asociado. En el caso de las
granjas de minado de Bitcoin, una alternativa requeriría una cadena de producción muy cara y compleja
como para superar a otras firmas que producen chips, o bien se vería forzada a construir data-centers de
uso único en los lugares con mejor ratio de costo/efectividad del planeta (con la electricidad más barata,
el clima más frío, baja latencia en la conexión, etc.).
Conclusión
Si alcanzar un consenso de una forma que no implique la confianza es posible en la práctica, sólo
lo es con un esquema de prueba-de-trabajo y cadenas de producción caras y altamente especializadas.
Además, el consenso es solamente válido durante un corto periodo de tiempo, así que debe ser
constantemente reforzado.