fixed tcn

This commit is contained in:
noemi3 2020-07-09 12:25:43 +02:00
parent 98a13ea8a1
commit d4fd16abee

View File

@ -2,49 +2,47 @@
## Descrizione del protocollo ## Descrizione del protocollo
Il protocollo TCN, Temporary Contact Number, è un protocollo di tracciamento dei contatti decentralizzato, sviluppato dalla TCN Coalition. Quest'ultima è una comunità di persone che durante l'emergenza COVID-19 hanno sviluppato questo supporto per lo sviluppo di app per notificare l'esposizione al contagio. Il protocollo TCN, Temporary Contact Number, è un protocollo di tracciamento dei contatti decentralizzato, ideato dalla TCN Coalition. Quest'ultima è una comunità di persone che durante l'emergenza COVID-19 hanno sviluppato questo supporto per lo sviluppo di applicazioni per notificare l'esposizione al contagio.
Il protocollo non richiede, informazioni personali ed è compatibile con autorità sanitarie. Il protocollo non richiede, informazioni personali ed è compatibile con autorità sanitarie.
I dispositivi degli utenti inviano un id(?) agli utenti vicini tramite Bluetooth e successivamente se un utente è risultato positivo al contagio può notificarlo ai suo contatti. I dispositivi degli utenti inviano un identificativo agli utenti vicini tramite Bluetooth e successivamente, se un utente è risultato positivo al contagio, può notificarlo ai suo contatti.
Per aumentare la scalabilità si è scelto di non generare automaticamente di TCN ma di generarli in modo deterministico da alcuni dati seed. Per aumentare la scalabilità la TCN Coalition ha scelto di non generare randomicamente tcn, ma di generarli in modo deterministico da un seed.
In questo modo si riduce la dimensione del report da inviare, in quanto contiene solo dati seed compatti e non l'elenco intero di TCN. In questo modo si riduce la dimensione del report da inviare, in quanto contiene solo le informazione necessarie per calcolare i tcn e non l'elenco intero di tcn.
L'utente può caricare diversi report di dimensioni minori in modo da non caricare l'intera cronologia dei contatti. L'utente può caricare diversi report di dimensioni minori in modo da non caricare l'intera cronologia dei contatti.
Inoltre è necessaria una chiave segreta che possiede l'utente per derivare i TCN.
### Chiavi di autenticazione e verifica ### Chiavi di autenticazione e verifica
L'user agent crea una chiave di autorizzazione *rak* (report authorization key) e una chiave di verifica *rvk* (report verification key), che ruotano periodicamente. L'user agent crea una chiave di autorizzazione *rak* (report authorization key) e una chiave di verifica *rvk* (report verification key).
Si genera una chiave di contatto iniziale *tck_1* in questo modo:
A partire dalla rak è possibile ricavare la chiave di contatto iniziale tck_0.
``` ```
tck_0 ← H_tck(rak) tck_0 ← H_tck(rak)
tck_1 ← H_tck(rvk || tck_0)
``` ```
dove *H_tck* è una funzione di hash con 256 bit di output. dove `H_tck` è una funzione di hash con 256 bit di output.
Ogni report può contenere al massimo 2^(16) chiavi di contatto ### Chiave temporanea di contatto
Partendo una TCN se ne può derivare unìaltra tramite un'operazione di Ratchet: Ogni report può contenere al massimo $2^{16}$ chiavi di contatto.
Partendo un tcn se ne può derivare il prossimo tcn come mostrato di seguito:
``` ```
tck_i ← H_tck(rvk || tck_{i-1}) tck_i ← H_tck(rvk || tck_{i-1})
``` ```
dove || indica una concatenazione. dove `||`indica una concatenazione.
### Numeri temporanei di contatto
Per ogni tck viene generato un numero di contatto temporaneo come mostrato di seguito:
### Chiave temporanea di contatto
Il numero di contatto temporaneo viene generato da una chiave di contatto temporanea, nel seguente modo:
``` ```
tcn_i ← H_tcn(le_u16(i) || tck_i) tcn_i ← H_tcn(le_u16(i) || tck_i)
``` ```
dove *H_tcn* è una funzione di Hash con 128bit di output. dove `H_tcn` è una funzione di Hash con 128 bit di output.
Dalla chiave rak è possibile generare la chiave rvk e la chiave tck_0, dalle quali è possibile generare le successive tck e quindi tutti i successivi tcn. Dalla chiave rak è possibile generare la chiave rvk e la chiave tck_0, dalle quali è possibile generare le successive tck e quindi tutti i successivi tcn.
@ -62,12 +60,10 @@ Dalla chiave rak è possibile generare la chiave rvk e la chiave tck_0, dalle qu
└─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘
``` ```
### Numeri temporanei di contatto
### Report ### Report
## Implementazione del protocollo per la JMV ## Implementazione del protocollo per la JMV
# Applicazione # Applicazione