In Trust we trust
Negli ultimi anni abbiamo assistito ad una proliferazione ed espansione di Network, dove per network si intende una rete che collega insieme "agenti" omogenei(persone, macchine, calcolatori, sedi).
Questo proliferare di network è stato favorito dallo sviluppo di un mezzo comune, accessibile a tutti e semplice da usare: la rete Internet. I network più diffusi appartengono alla categoria dei network sociali, ossia costituiti da persone. Tutti i sistemi di istant-messaging, i forum e lo stesso world wide web possono essere considerati network sociali, in quanto consentono a persone di comunicare e scambiarsi pareri ed informazioni. In alcune applicazioni la natura di social network è più accentuata. Si pensi ad esempio a LinkedIn, che ha l'unico scopo di condividere contatti a fini professionali.
Ma esistono anche altri tipi di network. Un esempio lampante sono le "Griglie di Computazione", nelle quali i nodi della rete sono dei calcolatori che mettono a disposizione la propria potenza di calcolo.
In genere tuttavia si delineano dei problemi nell'utilizzo del network da parte dei suoi attori. Molti problemi nascono dal fatto che in molte reti la "conoscenza" di ogni attore si limita agli eventi che lo coinvolgono direttamente. Prendiamo come esempio il sistema di e-commerce eBay. Un venditore può non inviarmi la merce o inviarmela danneggiata. Per me sarà difficile rendere evidente questo fatto a tutti gli altri nodi della rete. Inoltre in molti contesti il giudizio di un agente in merito ad una interazione è necessariamente soggettivo. Un esempio sono le recensioni di brani musicali o ristoranti.
Per limitare questi problemi i network vengono "rinforzati" con Sistemi di Reputazione. Lo scopo di un sistema di reputazione è di "calcolare l'affidabilità di un agente della rete". Nei contesti nei quali il giudizio sull'operato di un agente non possa essere oggettivo, ci accontentiamo di calcolare "l'affinità" tra due utenti. Il primo caso citato in realtà può essere considerato un sottocaso del secondo.
Gli algoritmi usati per calcolare la "trustwortiness"(affidabilità o affinità) di un agente vengono definiti TrustMetrics. In realtà la definizione di una trust metric incorpora spesso anche la descrizione degli strumenti e delle strutture dati delle quali il sistema e i singoli agenti devono essere equipaggiati. Di solito la trustworthiness di un agente(detto sink) viene calcolata relativamente ad un'altro agente(detto source). In pratica un dato agente Alice può avere una buona reputazione presso un agente Bob ed una pessima rispetto ad un'altro agente Charlie. Grazie a questa definizione la trustworthiness può essere considerata l'affinità di due agenti. Questa definizione permette inoltre di trattare anche sistemi nei quali il potere di osservazione di un agente si limita agli eventi nei quali esso stesso è coinvolto, o alle "raccomandazioni" inviate da altri agenti.
In genere le trust metrics agiscono in due fasi. Nella prima fase viene calcolata l'affinità diretta di un agente con tutti gli altri agenti della rete. I valori di affinità vengono calcolati solo in base alle esperienze dirette degli agenti, e non alle raccomandazioni emesse dagli altri. Nella seconda fase invece viene calcolata l'affinità tra due agenti che non abbiano mai avuto relazioni dirette. In genere questo valore viene calcolato attraverso l'invio di "raccomandazioni" al source da parte di altri agenti, e da queste raccomandazioni viene "inferito" il valore di affinità tra source e sink.
Per chiarire meglio il concetto di trust metric esaminiamo un sistema reale che usa una trust metric. FilmTrust è un servizio di rating e commenti di pellicole cinematografiche. Ogni utente del sistema(agente) ha la possibilità di esprimere un giudizio, che varia da 0.5 a 4 ad intervalli di 0.5, ed un commento su un film. L'utente può inoltre vedere i giudizi che gli altri hanno dato su un film, e calcolare l'affinità con un altro utente.
L'affinità diretta viene calcolata prendendo in considerazione i "co-rated elements", ossia i film dei quali sia l'agente source sia quello sink hanno espresso un giudizio. Se i due utenti hanno molti film in comune ed hanno dato giudizi simili su questi, il grado di affinità sarà alto. Se invece i giudizi sono discordanti, avremo una bassa affinità tra i due utenti. L'affinità indiretta riguarda invece utenti che non hanno film in comune. Viene calcolata mediante un algoritmo denominato TidalTrust, la cui esposizione non è adatta agli scopi di questo articolo.
Altri metodi molto comuni per calcolare l'affinità indiretta sono la media pesata, il massimo ed il minimo. Il grado di affinità tra due agenti A e B viene calcolato applicando l'operatore scelto ai valori riportati da tutti i "vicini"(agenti coi quali esiste un collegamento diretto con A) Indichiamo con d il valore di affinità diretta tra due agenti, e supponiamo che gli unici vicini di A siano A1, A2, A3 con d(A,A1)=0.2, d(A,A2)=0.5, d(A,A3)=0.8. Indichiamo con t il valore della affinità indiretta. Applicando la media pesata per calcolare l'affinità di A con un altro agente B, otterremo il valore t(A,B) = (0.2*t(A1,B) + 0.5*t(A2,B) + 0.8*t(A3,B)) / 3.
In un sistema distribuito, i tre termini t(A1,B), t(A2,B), t(A3,B) devono essere sostituiti con le raccomandazioni che A1, A2 ed A3 comunicano ad A in merito a B. Quindi uno dei vicini potrebbe inviare una raccomandazione non corrispondente alla reale affinità con B. In questo caso siamo di fronte ad un attacco al sistema di reputazione. Un attacco di questo tipo può essere potenziato con l'aiuto di un insieme di altri agenti(consapevoli o meno).
Questo attacco rappreseta solo uno dei possibili attacchi ad un sistema di reputazione.