Wiki de ZooBC
Seguridad y arquitectura

El pin de versión

Una versión de ZooBC puede incluir un pin de versión, también llamado pin de la spine: un pequeño archivo público que nombra un bloque de la cadena spine por su altura y su hash. Al arrancar, un nodo compara su propia spine con el pin y se niega a funcionar sobre una spine que lo contradiga. El pin da a una instalación un ancla de confianza que viene con el propio software, de modo que un historial de la spine falsificado se rechaza antes de que el nodo construya nada sobre él.

Por qué ayuda un pin

La spine es el ancla en la que confía un nodo para dos cosas: qué instantánea del estado de la cadena cargar y qué claves de nodo pertenecen al registro (véase instantáneas y sincronización rápida). Un nodo en funcionamiento que ha seguido la cadena durante meses tiene su propio historial con el que juzgar la spine. Una instalación completamente nueva no tiene ninguno. Tiene que empezar por algún sitio, y un atacante que pudiera darle toda una spine falsificada, por ejemplo una construida con las claves antiguas de nodos que salieron del registro hace mucho, podría llevarla hacia un estado falsificado.

El pin cierra ese hueco. Forma parte de la versión que instala el operador, así que el nodo nuevo conoce al menos un bloque auténtico de la spine antes de hablar con ningún par. Cualquier historial de la spine que no contenga exactamente ese bloque se rechaza.

Qué es el pin

El archivo se llama spine-pin.txt y está junto a la base de datos del nodo. Contiene una línea: una altura de la spine y el hash hexadecimal de 64 caracteres del bloque de la spine en esa altura.

No contiene nada secreto. Es un hash público que cualquiera puede comparar con la spine de su propio nodo. Sin el archivo no hay pin, y las demás defensas de la spine se aplican como siempre.

Qué hace el nodo con él

  • Al arrancar, el nodo compara con el pin su propio bloque de la spine guardado en la altura fijada. Si los hashes difieren, el nodo está en un historial de la spine bifurcado o manipulado y no funciona sobre él. Según las reglas decididas para la versión 0.5.8, entonces se reconstruye a partir de la red.
  • Mientras funciona, un bloque de la spine que contradice el pin se rechaza cuando llega.
  • Cuando compiten varias spines, un nodo nunca revierte su spine por debajo del pin.
Flujo de arranque: leer spine-pin.txt (una línea: altura y hash de 64 caracteres hexadecimales), compararlo con mi propio bloque de la spine en esa altura; si es el mismo: arrancar; si es distinto: rechazar y reconstruir a partir de la red.
Flujo de arranque: leer spine-pin.txt (una línea: altura y hash de 64 caracteres hexadecimales), compararlo con mi propio bloque de la spine en esa altura; si es el mismo: arrancar; si es distinto: rechazar y reconstruir a partir de la red.

Cómo lo usan las versiones

Dos reglas rigen cómo llevan el pin las versiones:

  • El instalador se detiene cuando la versión indica un pin que no puede descargar.
  • Cada versión posterior fija un bloque de la spine reciente, de modo que el ancla avanza con la cadena.

La versión en sí está protegida por separado. La autoridad de versiones registra cada versión en la cadena con el hash de su manifiesto, el instalador comprueba la firma y el hash de manifiesto de la versión contra la cadena, y dos tercios de las plazas pueden vetar una versión (véanse versiones y actualizaciones y comprobar un archivo descargado).

Lo que no es el pin

  • No ata el nodo a un par fijo: el nodo se sincroniza con sus pares como siempre.
  • No congela el software del nodo: las actualizaciones siguen según lo que haya elegido el operador.
  • No contiene ninguna clave, ni privada ni pública: solo una altura de bloque y un hash de bloque.

Su lugar entre las defensas

El pin es una de varias defensas frente a un ataque de largo alcance, un intento de reescribir el historial desde muy atrás en el pasado. A los nodos en funcionamiento los protegen el límite de reversión de 720 bloques y el suelo del punto de control de la spine (véase finalidad y reversión); a los nodos nuevos, las cofirmas de dos tercios en la spine, el propio registro de la spine de qué claves entraron y salieron, y el pin. Véase de qué protege Proof of Participation.

Véase también