App Immuni – cosa registra
Dopo il precedente articolo l’app Immuni è stata radicalmente orientata verso una nuova architettura. La direzione presa è stata dettata principalmente dal sistema di notifica delle esposizioni sviluppato in accordo tra Apple e Google ( https://www.apple.com/covid19/contacttracing – https://www.google.com/covid19/exposurenotifications/ ).
L’accordo, in breve, permette ai due sistemi operativi, IOS e Android, di registrare sistematicamente alcune informazioni utili per il tracciamento. Queste informazioni, memorizzate esclusivamente sul proprio telefono e non su alcun server, vengono poi messe a disposizione delle app sviluppate successivamente dai vari governi.
Vediamo, senza entrare troppo nei dettagli, cosa fanno i due sistemi operativi IOS e Android e cosa possono fare le app (Immuni) che vi si appoggiano.
Ogni device (smartphone) con installate le ultime versioni dei servizi coinvolti nel tracciamento (Google Play Services per esempio nei sistemi Android) può raccogliere le informazioni su altri device con i quali è venuto in contatto, via Bluetooth.
Ma in che modo gli smarphone vengono messi in contatto e cosa viene memorizzato di ogni contatto?
Le app governative non gestiscono il contatto via Bluetooth
Il servizio di tracciamento utilizzerà due sottoservizi obbligatori: bluetooth e internet. Non saranno obbligatori ma utilizzati, se presenti, i servizi di Geo Localizzazione GPS o derivati (WIFI, 3/4/5G) e quelli per il pairing dei bluetooth.
Ma cosa si scambiano le app che si incontrano?
Prima di tutto ogni giorno ogni device genera una chiave (Temporary Exposure Key – TEK) che rimarrà salvata nel proprio smartphone per 14 giorni dalla data di generazione. Utilizzando questa chiave come “seed” ogni 10-20 minuti viene generato un codice (Rotating Proximity Identifier -RPI). Questo è il “codice di scambio”, poi vedremo come viene gestito.
Il canale Bluetooth viene utilizzato per scansionare altri Bluetooth presenti con i quali scambiarsi il codice RPI. Nel caso ci si dovesse incontrare per un sufficiente periodo continuo (poi vediamo cosa significa) i nostri device si scambierebbero il codice RPI e il livello di segnale della connessione Bluetooth.
Scambio di ID in forma completamente anonima
Fino a qui l’app Immuni non entra ancora in gioco, quindi i dati sono ancora gestiti dal Framework Apple-Google. Erroneamente, secondo noi, nella documentazione presente in GitHub di Immuni sembrerebbe che sia l’app a gestire queste informazioni ma non è proprio così ( https://github.com/immuni-app/immuni-documentation#how-it-works ). L’app esterna, Immuni, si limita a configurare alcuni parametri per informare il sottosistema Apple-Google quando e cosa salvare. Per non parlare della generazione delle varie chiavi.
Apple – Google danno la possibilità di configurare il modello di rischio in modo da parametrizzare secondo alcune regole locali alla nazione che vuole utilizzare i dati raccolti. L’app Immuni utilizza dei parametri salvati all’interno dell’app.
Rischio di esposizione
Questa è la matrice utilizzata per il calcolo: (rif dati Immuni)
In ogni cella è possibile definire un valore da 0 a 8.
Questa espressione produce quindi un valore da 0 a 4096. Questo dato diventerebbe utile per capire il livello di rischio del “contatto” secondo alcune regole. Dal codice dell’app Immuni sappiamo che:
- il valore di rischio di trasmissione è sempre 1: questo è un valore che viene assegnato dalle app, dal grado più basso a quello più alto di rischio del soggetto. Per Immuni il livello di rischio per tutti è sempre 1.
- il valore della durata del rischio è 0 nei primi quattro blocchi e 5 nei successivi: quindi per contatti di durata inferiore o uguale ai 15 minuti non viene tenuta traccia
- per i giorni viene applicato sempre il valore 1
- per i valori di attenuazione ( potenza di trasmissione – RSSI ) del segnale Bluetooth non vengono presi in considerazione valori > 73 dB (rischio molto basso). L’app Immuni imposta a 0 il valore per il primo blocco e a 5 per tutti gli altri.
Per i valori di attenuazione potremmo dire che hanno poco significato. Vari test effettuati su differenti device hanno dato valori molto discordanti se utilizzati alla stessa distanza. Personalmente avrei aperto la registrazione a tutti i livelli.
Se escludiamo qualsiasi contatto della durata inferiore ai 15 minuti e/o con bassissimo rischio (segnale BT bassissimo) il risultato del prodotto sarebbe sempre di 25.
La registrazione del contatto infine viene registrata solo se il valore calcolato risulta maggiore o uguale ad un parametro (minimumRiskScore) inviato al Framework Apple-Google dall’app che lo utilizza. Per Immuni il valore è impostato a 1.
Questo significa che avremo la registrazione di contatti tutti uguali, o meglio, con lo stesso grado di rischio=25. Ci sembra alquanto strano ma stiamo analizzando il codice per capire se sia presente qualche altra parametrizzazione centralizzata.
Nel prossimo capitolo della saga vedremo in che modo il sistema Immuni richieda i dati al Framework Apple-Google. Cercheremo di verificare se esiste un eventuale aggiornamento sia del Framework che dell’app Immuni
App made in Germany
L’app “cugina” tedesca Corona Warn App utilizza i parametri di configurazione in modo dinamico e non annegato nell’applicazione, pescando i dati direttamente dal backend dell’applicazione.
Nello stesso modello si può notare la differenziazione dei valori impostati di default nel backend.