Wiki di ZooBC
Sicurezza e architettura

Il pin della release

Una release di ZooBC può includere un pin della release, detto anche pin della spine: un piccolo file pubblico che indica un blocco della catena spine con la sua altezza e il suo hash. All'avvio un nodo confronta la propria spine con il pin e si rifiuta di funzionare su una spine che lo contraddice. Il pin dà a un'installazione un'ancora fidata che arriva con il software stesso, così una cronologia della spine falsificata viene rifiutata prima che il nodo vi costruisca sopra qualcosa.

Perché un pin aiuta

La spine è l'ancora di cui un nodo si fida per due cose: quale snapshot dello stato della catena caricare e quali chiavi dei nodi appartengono al registro (vedi snapshot e fast sync). Un nodo in funzione che segue la catena da mesi ha la propria cronologia con cui giudicare la spine. Un'installazione nuova di zecca non ne ha. Deve partire da qualche parte, e un attaccante che riuscisse a fornirle un'intera spine falsificata, per esempio costruita con le vecchie chiavi di nodi usciti dal registro molto tempo prima, potrebbe indirizzarla verso uno stato falsificato.

Il pin chiude questa falla. Fa parte della release che l'operatore installa, quindi il nuovo nodo conosce almeno un blocco spine autentico prima di parlare con qualsiasi peer. Qualsiasi cronologia della spine che non contenga esattamente quel blocco viene rifiutata.

Che cos'è il pin

Il file si chiama spine-pin.txt e si trova accanto al database del nodo. Contiene una riga: un'altezza della spine e l'hash esadecimale di 64 caratteri del blocco spine a quell'altezza.

Non contiene nulla di segreto. È un hash pubblico che chiunque può confrontare con la spine del proprio nodo. Senza il file non c'è alcun pin, e le altre difese della spine si applicano come di consueto.

Che cosa ne fa il nodo

  • All'avvio, il nodo confronta il blocco spine che ha memorizzato all'altezza del pin con il pin stesso. Se gli hash differiscono, il nodo si trova su una cronologia della spine biforcata o manomessa e non vi funziona. Secondo le regole decise per la versione 0.5.8, si ricostruisce allora dalla rete.
  • Durante il funzionamento, un blocco spine che contraddice il pin viene rifiutato quando arriva.
  • Quando più spine sono in concorrenza, un nodo non fa mai rollback della propria spine sotto il pin.
Il flusso all'avvio: leggere spine-pin.txt (una riga: altezza e hash di 64 caratteri esadecimali), confrontarlo con il proprio blocco spine a quell'altezza; uguale: avvio; diverso: rifiuto e ricostruzione dalla rete.
Il flusso all'avvio: leggere spine-pin.txt (una riga: altezza e hash di 64 caratteri esadecimali), confrontarlo con il proprio blocco spine a quell'altezza; uguale: avvio; diverso: rifiuto e ricostruzione dalla rete.

Come lo usano le release

Due regole governano il modo in cui le release portano il pin:

  • L'installer si ferma quando la release elenca un pin che non riesce a scaricare.
  • Ogni release successiva fissa un blocco spine recente, così l'ancora avanza insieme alla catena.

La release stessa è protetta separatamente. L'autorità di release registra ogni release sulla catena con l'hash del suo manifest, l'installer verifica la firma e l'hash del manifest della release rispetto alla catena, e due terzi dei seggi possono porre il veto a una release (vedi release e aggiornamenti e verificare un file scaricato).

Che cosa non è il pin

  • Non lega il nodo a un peer fisso: il nodo si sincronizza dai suoi peer come di consueto.
  • Non congela il software del nodo: gli aggiornamenti continuano come l'operatore ha scelto.
  • Non contiene alcuna chiave, né privata né pubblica: solo un'altezza di blocco e un hash di blocco.

Il suo posto tra le difese

Il pin è una delle varie difese contro un attacco long-range, un tentativo di riscrivere la cronologia partendo da molto indietro nel passato. I nodi in funzione sono protetti dal limite di rollback di 720 blocchi e dalla soglia dei checkpoint della spine (vedi finalità e rollback); i nuovi nodi dalle co-firme dei due terzi sulla spine, dalla registrazione, nella spine stessa, delle chiavi entrate e uscite, e dal pin. Vedi da cosa si difende il Proof of Participation.

Vedi anche