Documentazione/documentazione.md

1.7 KiB

Protocollo TCN

Descrizione del protocollo

Chiavi di autenticazione e verifica

Chiave temporanea di contatto

Numeri temporanei di contatto

Report

Implementazione del protocollo per la JMV

Per poter utilizzare il protocollo all'interno dell'applicazione Android è stato sviluppato un'implementazione di quest'ultimo per la Java Virtual Machine. Come visto nella @sec:rak-rvk il protocollo genera le chiavi di autorizzazione e verifica a partire dalla curva ellittica Ed25519. La nostra implementazione del protocollo per la gestione di questa curva utilizza la libreria NOME_LIBRERIA.

La chiave privata e pubblica prodotte da quest'ultima sono state wrappate all'interno delle classi ReportAuthorizationKey e ReportVerificationKey in questo modo le classi hanno un nome più esplicativo rispetto al contesto di utilizzo e un futuro cambiamento della libreria utilizzata per la crittografia non impatterà l'API della libreria.

A partire dalla ReportAuthorizationKey è possibile ricavare la TemporaryContactKey iniziale1 attraverso la funzione baseTemporaryContactKey() riportata nel @lst:tck-0.

fun baseTemporaryContactKey(): TemporaryContactKey {
  val hmac = MessageDigest.getInstance("SHA-256").apply {
    update(Const.H_TCK_DOMAIN_SEPARATOR)
    update(key.toByteArray())
}

  return TemporaryContactKey.createFromByteArray(
    hmac.digest(),
    0
  )
}

Applicazione

Bluetooth

Trasmissione

Scansione

Stima della distanza

UI

Memorizzazione

Rete


  1. La chiave temporanea iniziale viene ricavata a partire dalla sola rak e da essa non è generato nessun numero temporaneo di contatto. ↩︎