Codice di autenticazione del messaggio

Gli stream di messaggi vengono utilizzati per configurare la funzionalità Cambio Audio. Consulta la sezione Messaggi relativi al cambio di dispositivo. Per queste importanti configurazioni, il provider deve assicurarsi che il messaggio venga inviato da GMSCore (modulo ad accoppiamento rapido) e non da qualsiasi altra app in Seeker.

Genera MAC (codice di autenticazione dei messaggi)

FP Seeker aggiunge un codice di autenticazione per i messaggi di configurazione del dispositivo utilizzando HMAC-SHA256. Il MAC del messaggio è costituito dai primi 8 byte di:

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

dove

  1. K è generato da concat(chiave dell'account, zeri di 48 byte).
  2. message è i dati aggiuntivi dello stream di messaggi.
  3. nonce è generato da concat(session_nonce, message_nonce); il nonce della sessione e il nonce del messaggio sono definiti nella sezione seguente.
  4. opad è una spaziatura interna di 64 byte esterna, composta da byte ripetuti con valore 0x5C.
  5. ipad ha 64 byte di spaziatura interna interna, composta da byte ripetuti con valore 0x36.

Nonce della sessione e nonce dei messaggi

Per evitare un attacco di ripetizione, il provider deve garantire che un nonce non venga ripetuto. Poiché mantenere la sincronizzazione dell'orologio o del contatore sia sul provider sia su Seeker non è immediato, il provider genera il nonce di sessione (per connessione), che viene condiviso con tutti i messaggi durante la connessione, mentre il richiedente genera il nonce del messaggio (per messaggio), generato in modo casuale per ciascun messaggio. Il nonce per la generazione del MAC di ogni messaggio è la combinazione di nonce di sessione e nonce del messaggio, ad esempio concat(session_nonce, message_nonce).

Aggiungiamo un nonce di sessione al gruppo di eventi Informazioni sul dispositivo:

Nome gruppo di messaggi Valore
Evento informazioni del dispositivo 0x03
Nome codice messaggio Valore
Nonce della sessione 0x0A

Il nonce della sessione deve essere generato e inviato al richiedente quando RFCOMM si connette:

Ottobre Tipo di dati Descrizione Valore
0 uint8 Evento informazioni del dispositivo 0x03
1 uint8 Nonce della sessione 0x0A
2 - 3 uint16 Lunghezza dei dati aggiuntivi 0x0008
4 - 11 nonce di sessione varia

Per inviare un messaggio quando è richiesto un MAC, la persona cercatrice invia un nonce e l'indirizzo MAC insieme al messaggio.

Ottobre Tipo di dati Descrizione Valore
0 uint8 Gruppo di messaggi varia
1 uint8 Codice messaggio varia
2 - 3 uint16 Lunghezza dei dati aggiuntiva(la lunghezza dei dati aggiuntiva + 16) varia
4 - n Dati aggiuntivi varia
N + 1 - N + 8 Nonce del messaggio varia
N + 9 - N + 16 Codice di autenticazione del messaggio varia

Verifica l'indirizzo MAC (Message Authentication Code)

Quando riceve un messaggio con il codice di autenticazione del messaggio, il provider lo verifica utilizzando la stessa funzione della funzione di generazione. Vale a dire che il MAC ricevuto deve essere uguale ai primi 8 byte

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

dove:

  1. K viene generato da concat(account key, 48-byte ZEROs) e il Fornitore deve attraversare tutte le chiavi dell'account archiviate per verificare il MAC.
  2. message è i dati aggiuntivi (esclusi il nonce e l'MAC dei messaggi) del flusso di messaggi.

Se il MAC è corretto, il Fornitore dovrà seguire le istruzioni del messaggio. In caso contrario, il Fornitore invierà una NAK con il motivo dell'errore, 0x3 - non consentito a causa di un codice di autenticazione del messaggio errato.