Immuni: il codice sorgente è disponibile su GitHub
Un altro passo avanti per l’app “Immuni“: il codice sorgente è ora disponibile su GitHub, scaricabile e consultabile da tutti.
Dell’app sapevamo già che utilizza il protocollo ROBERT per la sicurezza e la privacy, e che fa uso del bluetooth e non del WiFi per la comunicazione tra dispositivi. Adesso che il codice è stato rilasciato pubblicamente, possiamo finalmente conoscere i dettagli tecnici dell’app di tracciamento dei contagi.
Il codice di “Immuni”
L’applicazione è stata pubblicata sotto licenza GNU AGPL-3.0 (Affero General Public License). Pubblicata nel 2007, differisce dalla GNU General Public License per una sezione aggiuntiva che richiede che ogni modifica del codice sorgente sia resa pubblica e disponibile a tutti coloro che utilizzano il codice.
“Immuni” è divisa in quattro repository:
- immuni-app-android;
- immuni-app-ios;
- immuni-ci-scheduler, che contiene il codice per il sistema di scheduling della continuous integration;
- immuni-documentation, che contiene tutta la documentazione principale dell’applicazione.
Per quanto riguarda lo sviluppo dell’app iOS, il team ha usato Swift 5.2 e Xcode 11.5, mentre per l’app Android sono stati utilizzati Kotlin 1.3 e Android Studio 3.6. Nel caso di iOS, l’app sarà disponibile per la versione 13.5, mentre per Android servirà la 6.
I servizi di backend, realizzati con un’architettura a microservizi, sono stati implementati in Python 3.8, utilizzando Poetry come dependency manager. Per il DB è stato scelto MongoDB, un database non relazionale molto utilizzato negli ultimi anni. Le performance dei servizi sono monitorate con Prometheus, un software open-source per il monitoraggio e l’analisi delle prestazioni dell’app.
Come funziona “Immuni”
La ricca documentazione dell’app presenta anche un caso d’uso che spiega più nel dettaglio come avviene il tracciamento. Ogni device su cui è installata e attiva l’applicazione avrà una chiave temporanea di identificazione chiamata temporary exposure key (TEK). Questa viene generata in modo randomico e cambia ogni giorno. L’app trasmette un segnale BLE (Bluetooth Low Energy) che contiene un rolling proximity identifier (RPI). Questo identificativo, generato a partire dalla TEK, viene inviato nel payload del Blueetoth, e cambia ogni 15 minuti per evitare il tracking del dispositivo.
Quando due device si “incontrano”, si scambiano i propri RPI e li memorizzano. Se l’utente di uno dei due device viene poi identificato positivo al coronavirus può decidere di inviare le proprie TEK ai server di “Immuni” che deriveranno gli RTI annessi. L’upload delle chiavi al server può essere fatta soltanto in presenza di un operatore sanitario certificato, per evitare che vengano caricati dati errati. Ogni dispositivo controlla periodicamente se sono state aggiunte nuove chiavi sul server, confrontandole con quelle memorizzate in locale. Se viene individuata una corrispondenza, l’applicazione notifica all’utente la presenza del rischio di contagio. Va sottolineato che la notifica indica soltanto che si è a rischio, e non da chi (potenzialmente) proviene. Le informazioni sugli utenti non vengono condivise tra i dispositivi.
Il calcolo del rischio non dipende soltanto dall’incontro tra due persone, ma soprattutto dalla durata dell’esposizione tra i due e la distanza tra i dispositivi. Il calcolo di quest’ultima misura è quello più soggetto a errori, in quanto ci sono fattori come l’orientamento dei device o la presenza di ostacoli che possono alterare la corretta misurazione.
Test e Privacy
“Immuni” è un’applicazione in evoluzione e continuo miglioramento. Da venerdì inizieranno i primi test, partendo da Liguria, Abruzzo e Puglia. L’obiettivo è inserirla a livello nazionale per la metà di giugno.
Ricordiamo che l’app non utilizza dati personali: le informazioni relative al nome, data di nascita, indirizzo, email o numero di telefono non vengono raccolte nei server. “Immuni” non utilizza la geolocalizzazione, perciò gli spostamenti non vengono registrati. Tutti i dati raccolti, inoltre, saranno cancellati quando non saranno più necessari, e in generale non oltre il 31 Dicembre 2020.