Salta ai contenuti

Fiducia e ammissione

Un nodo non si fida di un altro nodo perché riesce a raggiungerlo. Si fida perché un documento di cui si fida già dice chi è quel nodo.

Il registro è un unico documento firmato che elenca ogni nodo ammesso: il suo dominio, la sua chiave pubblica di firma e l’impronta di quella chiave, le versioni di protocollo che parla, che cosa sa fare, e se è attivo o revocato.

Ogni nodo custodisce una sola chiave — la chiave pubblica radice del registro. Quella chiave è l’unica cosa di cui un nodo si fida incondizionatamente. Tutto il resto discende da essa: il nodo verifica il documento del registro rispetto a quella chiave, poi verifica ogni messaggio in entrata rispetto alla chiave di firma che il registro pubblica per il mittente.

Un nodo senza chiave radice configurata non tira a indovinare. Rifiuta di risolvere qualsiasi peer e lo dichiara.

Il documento è firmato, quindi dove viene servito non ha importanza. Porta una data di emissione e una scadenza, e viene riemesso regolarmente così che la scadenza resti sempre avanti.

L’ammissione è una revisione, non una registrazione.

Quando un nodo viene installato, produce un payload di ammissione. Quel payload contiene solo materiale pubblico: il dominio del nodo, la sua chiave pubblica di firma federata e la sua impronta, l’impronta del suo certificato client, le versioni di protocollo e le funzionalità che dichiara. Non c’è materiale di chiave privata al suo interno, e non ne viene chiesto nessuno.

L’operatore invia il payload. Il nodo firma l’invio con la propria chiave, il che dimostra che possiede la metà privata della chiave che sta rivendicando. È tutto ciò che una firma può dimostrare — non dice nulla su chi possiede il dominio. Quindi l’invio finisce in una coda perché una persona lo esamini, e l’operatore conferma l’impronta della chiave tramite un altro canale. Un essere umano lo approva.

Una volta approvato e ripubblicato il registro, il nodo federa. Inviare di nuovo prima dell’approvazione aggiorna la voce in sospeso invece di crearne una seconda.

Nulla nel payload concede fiducia da solo.

Un nodo viene rimosso segnando la sua voce nel registro come revocata e ripubblicando. Le voci revocate restano nel documento per circa un mese invece di sparire, così resta visibile che il nodo c’era una volta e non c’è più.

Dal momento in cui gli altri nodi recuperano il documento ripubblicato, i messaggi dal nodo revocato vengono rifiutati come da qualsiasi altro mittente sconosciuto.

Prima di scambiarsi qualsiasi altra cosa, due nodi si stringono la mano. Ciascuno invia l’elenco di ciò che sa fare; la risposta è la sovrapposizione. Quella sovrapposizione è ciò che la coppia può usare per il resto dello scambio.

Questo conta perché i nodi non sono sempre alla stessa versione. Un nodo che riceve un messaggio che riconosce ma non ha implementato lo rifiuta in modo pulito e — è importante — non lo segna come consegnato, così il mittente può riprovare una volta che entrambi i lati hanno la funzione.

L’ammissione riguarda l’intera mesh. Un operatore può anche rifiutare un singolo nodo localmente, senza aspettare nulla di centrale: l’app di amministrazione elenca ogni server con cui il nodo ha avuto a che fare e ti permette di escluderne uno. Quella decisione ha effetto solo sul tuo nodo.

Farlo richiede un permesso che il tuo primo amministratore già possiede.