Pagine

venerdì 10 aprile 2020

Come funziona la nuova versione di DP-3T, la proposta di tracciamento dei contatti per il COVID-19

di Enrico Nardelli

(per favore consultare anche gli aggiornamenti alla fine del post - english version here)

Il gruppo di ricercatori che ha elaborato il protocollo DP-3T per il tracciamento dei contatti in modo decentralizzato di cui ho recentemente scritto ha rilasciato un aggiornamento della loro documentazione.

Adesso il protocollo viene presentato in due versioni.

La versione 1 (definita "decentralizzata a basso costo", low-cost decentralized) è sostanzialmente equivalente a quanto ho descritto nel post precedente, cui rimando per esigenze di brevità. Elenco solo i cambiamenti di una qualche significatività:
  • la chiave casuale SK0 e quelle SKt generate in ogni giorno successivo vengono memorizzate sul dispositivo insieme al giorno, per avere un riferimento temporale assoluto;
  • il codice di autorizzazione per l'invio dei dati di contatto al server centrale avvisare il server centrale di essere infetta viene comunque consegnato, inattivo, alla persona al momento del test. Solo se il risultato del test è positivo l'autorità sanitaria lo attiva ed avvisa il paziente del risultato e della possibilità di inviare i dati;
  • l'app invia al server tutte le coppie [SKt; giorno] nella finestra di possibile contagiosità;
  • si afferma (a pag.8 del "white paper") che tale finestra di possibile contagiosità arriva al massimo a 3 giorni prima di quello di rilevamento dei sintomi ma poi (a pag.14) si parla di finestra di possibile contagiosità di larghezza media di 5 giorni;
  • il server distribuisce a tutte le app tutte le coppie [SKt; giorno] dei dispositivi delle persone infette per tutti i giorni della finestra di possibile contagiosità;
Dal momento che il server continua a distribuire a tutte le app direttamente le chiavi che permettono di ricostruire gli EphIDs, un dispositivo può "rimettere insieme" gli EphIDs di una stessa persona infetta (che sarebbero altrimenti non collegabili) e derivare il profilo temporale degli incontri con questa persona.

Come osservavo nel mio post precedente, questo potrebbe consentire, nel caso di persone che si incontrano con una qualche regolarità, di identificare di chi si tratta. Non c'è bisogno che il possessore del dispositivo sia un hacker, perché sono sicuro che se questa fosse la soluzione utilizzata, comincerebbero a circolare a costi abbordabilissimi app in grado di offrire questo "aiuto" per capire chi, di quelli che in qualche modo si conosce, è infetto.
     Bisogna sempre tener presente che la natura umana è rimasta sempre la stessa, nonostante gli avanzamenti della tecnologia digitale.

La versione 2 (definita "decentralizzata non collegabile", unlinkable decentralized) mantiene l'impianto generale cambiando significativamente alcuni elementi, che sono i soli che descrivo nel seguito, rimandando al precedente post per una comprensione dell'impianto generale:
  • NON viene più generata, all'atto dell'installazione, una chiave iniziale SK0
  • la chiave SKt+1 del giorno successivo NON viene più calcolata mediante una funzione hash H predefinita dalla chiave del giorno precedente SKt
  • ogni giorno viene invece generata una chiave totalmente nuova SKt, che è un numero casuale di 32 byte
  • SKt viene usata per derivare, usando H con argomento SKt, un unico EphIDt da usare in quel giorno t durante lo scambio delle informazioni di contatto con altri dispositivi incontrati
  • gli EphIDt dei dispositivi incontrati in un certo giorno t vengono memorizzati localmente in forma crittografata KEt, usando sempre H con argomento EphIDt e t: in tal modo si evita di registrare direttamente gli EphIDt e si evita anche che un EphID generato in un giorno diverso ma accidentalmente coincidente con quello del giorno t conduca ad un "falso positivo"
  • il paziente infetto che ha deciso di inviare al server centrale la storia dei suoi contatti le sue coppie [SKt; t] durante la finestra di contagiosità può scegliere per quali giorni/periodi vuole inviare i dati: questo assicura alla persona un maggior controllo sulla sua privacy
  • il server centrale NON distribuisce più a tutte le app tutte le coppie [SKt; t] dei dispositivi delle persone infette per tutti i giorni della finestra di possibile contagiosità
  • il server centrale invece calcola con le coppie [SKt; t] ricevute dai dispositivi degli infetti i valori crittografati KEt
  • tutti questi KEt dello stesso giorno sono inseriti in un insieme chiamato "Cuckoo filter" (CF, letteralmente "filtro del cuculo") che viene distribuito a tutte le app
  • il CF ha la proprietà di occupare pochissimo spazio e permettere di verificare con elevata efficienza se uno dei KEt che un dispositivo ha memorizzato nella sua storia locale dei contatti appartiene o meno al CF stesso, cioè corrisponde ad un infetto o meno
  • quando un dispositivo riceve il CF controlla, per ognuno dei KEt che ha incontrato, se è incluso in CF. Se no, la risposta è definitiva, se sì potrebbe esserci un errore, la cui probabilità può però essere abbassata a piacere mediante una regolazione a priori di un apposito parametro
La soluzione descritta in questa versione 2 diminuisce la probabilità di identificazione di un infetto, ma non la elimina, dal momento che se un dispositivo X incontra un altro dispositivo Y più volte al giorno il KEt di Y compare altrettante volte nella storia locale di X dei suoi incontri giornalieri (e viceversa).

Inoltre, immaginate di aver scoperto che siete stati in contatto con un infetto per la prima volta 3 giorni fa. Se quella persona l'avete incontrata anche in tutti i giorni successivi, nella vostra storia locale vi saranno altrettante segnalazioni di persone infette in tutti quei giorni.

La app ufficiale magari non dirà niente di tutto questo, ma solo di rivolgersi ad una struttura sanitaria per un controllo. Si può però facilmente immaginare che possa nascere un mercato di app "derivate" che vi offrono queste informazioni. Un'app "derivata" vi dirà quindi quante volte in un certo giorno avete incontrato un certo infetto e se in uno stesso giorno ne avete incontrato uno solo o più di uno. Per i giorni successivi vi dirà analogamente se e quanti ne avete incontrati. Questa app "derivata" non potrà dirvi se gli incontri dei giorni diversi si riferiscono alle stesse persone ma, considerando lo scenario di ritorno alla normalità, in cui avete una certa regolarità di incontri e ci sono relativamente pochi infetti in giro, queste informazioni combinate con il ricordo di ciò che avete fatto vi permetterebbero di dedurre parecchio.

Considerando che queste soluzioni di tracciamento dei contatti sono pensate appunto più per la fase di ritorno alla vita normale che per l'attuale fase di quarantena collettiva il problema non è secondario. Con il ritorno alla normalità ricominceranno le regolari attività giornaliere nelle quali tendiamo a incontrare con regolarità persone che conosciamo. Ed è proprio in queste situazioni di incontri regolari/ripetuti che l'approccio di registrare i contatti manifesta la sua debolezza rispetto alla privacy.

Concludo con un paio di riflessioni.

La prima è che le assunzioni che ho letto nella documentazione sulla larghezza temporale della finestra di contagiosità non sono supportate da riferimenti a letteratura scientifica. Inoltre, il fatto che siano tra loro inconsistenti non è confortante.

La seconda è che una nota di passaggio mi ha dato molto da pensare. Parlando della probabilità che il "Cuckoo filter" commetta un errore, viene specificato che i parametri possono essere dimensionati per «permettere un uso estensivo del sistema senza errori per diversi anni» (grassetto mio). A pensar male si fa peccato...

Addendum (11 aprile 14:30 CET): quella descritta in questo post è la versione del 7 aprile. Il 10 aprile è stata rilasciata una nuova versione del "white paper" con una sola modifica rilevante rispetto a quanto descritto nella versione del 7, il fatto che nella storia locale dei contatti si registra solo il giorno del contatto e non una grossolana finestra temporale.

NB: nella prima versione pubblicata veniva erroneamente indicato che la persona infetta inviava la storia dei suoi contatti al server centrale.

1 commento:

  1. Aggiungo un'osservazione di Roberto Dolci (che ringrazio).

    Il New England Journal of Medicine ha iniziato il 5 marzo a pubblicare sul tema (https://www.nejm.org/doi/full/10.1056/NEJMc2001468) proseguendo fino a pochi giorni fa (https://www.nejm.org/doi/full/10.1056/NEJMc2001801).

    Un riassunto approssimativo e' che in questo istante si sta valutando la percentuale di asintomatici e subclinici nell'intorno del 45-50% ed una durata nell'ordine dei 7-13gg anche se sembra che anche tra 0 e 7 giorni ci siano contagi attivi.

    RispondiElimina

Sono pubblicati solo i commenti che rispettano le norme di legge, le regole della buona educazione e sono attinenti agli argomenti trattati: siamo aperti alla discussione, non alla polemica.