- Ogni nodo, quando fara' l'hook, generera' un coppia di chiavi RSA. Dara' la
sua chiave pubblica a tutti i suoi rnode.
- Quando il qspn traversa dei gonde, deve memorizzare per ogni entry quanti
da quanti nodi attivi e' composto il gnode.
- Gnode contigui:
- Appena un nodo, dopo aver analizzato un qspn_pkt ricevuto, nota che
il suo gnode confina con un gnode non contiguo aspetta il
qspn_pkt del qspn_round corrente o successivo proveniente da quel gnode.
Analizzando il qspn_pkt vede se il gnode confinante ha una quantita'
di nodi maggiore a quella del proprio gnode. Se e' cosi' manda un
challenge al gnode confinante, se il challenge e' perso cambiera'
l'ip.
- Quando il nodo riceve la risposta al challenge manda in
broadcast all'interno del suo gnode un pkt contenente la
risposta. Il pacchetto viene firmato con la chiave privata
dal nodo che la manda. Il nodo che la riceve verifica e
rimuove la firma precedente ed appone la sua.
- Quando un nodo ha ricevuto la risposta e le risposte di
tutti i suoi nodi del suo gnode controlla l'esito del
challenge:
se l'esito e' positivo (ha vinto): non cambiera'
gnode.
al contrario: quando vede che l'rnode che e'
utilizzato nella rotta migliore per raggiungere
il gnode confinante muore e trova un nuovo rnode
che fa parte del nuovo gnode, rifara' l'hook.
- Se i due gnode hanno un ugual numero di nodi, cambiera'
il gnode che ha il gnode_id minore.
- Ecco come funziona il challenge:
Il gnode che ha il numero minore di nodi per verificare che
effettivamente il gnode con cui confina abbia un numero
maggiore di nodi gli manda un problema da risolvere. Questo
problema ha una complessita' proporzionale al numero di nodi
presenti nel gnode piu' piccolo (o presunto tale).
In questo modo se il gnode che riceve il challenge riesce a
risolvere il problema, distribuendo il calcolo tra suoi nodi,
vuol dire che ha una quantita' di nodi maggiore o uguale a
quella del gnode che ha mandato il challenge.
Quando il gnode che ha meno nodi dell'altro riceve le
risposte entro un tot di tempo determinato, cambiera' ip se le
risposte ricevute sono corrette, altrimenti se non riceve le
risposte o se sono errate, bannera' il gnode confinante,
poiche' ha comunicato una quantita' di nodi superiore a quella
effettiva, tentando cosi' di far cambiare l'IP all'altro
gnode.
Per convenienza chiamamo Checker il gnode che mandera' il
problema al gnode Examinated.
- Distribuzione del problema:
Ogni nodo di Checker manda il seguente problema ai bnode di
Checker che poi pensaranno a ridistribuirlo all'interno del
gnode:
f(x) mod k
dove k e' un numero random compreso tra 2^16 < k < 2^32
e f(x) e' una funzione non facilmente calcolabile con il
modulo di k.
Anche il nodo Y che ha mandato il problema cerchera' la
sua soluzione. La complessita' del problema dipende dalla
grandezza di x, e viene scelta in modo proporzionale alla
potenza di calcolo media di un computer.
Y aspettera' per un tempo molto breve la risposta e una
volta ricevuta la confrontera' con la sua soluzione.
- Soglia di errore:
La percentuale di risposte non ricevute che possono essere
ignorate e' il 10%.
- Soglia del challenge:
Il challenge viene mandato solo se i due gnode in questione
hanno al loro interno una quantita' di nodi >= 2^16, quindi
questo vale solo per i gnode di livello >= 2.
I gnode piu' piccoli cambieranno IP senza verificare nulla.