{{{ - 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. }}}