Message Authentication Code

I flussi di messaggi vengono utilizzati per configurare il cambio audio. Vedi Messaggi di cambio audio. Per queste importanti configurazioni, il fornitore deve assicurarsi che il messaggio venga inviato da GMSCore (modulo Accoppiamento rapido) e non da altre app sul dispositivo di ricerca.

Generare il MAC (message authentication code)

FP Seeker aggiunge un codice di autenticazione del messaggio 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 viene generato da concat(chiave account, 48 byte di ZERI).
  2. message sono i dati aggiuntivi dello stream di messaggi.
  3. nonce viene generato da concat(session_nonce, message_nonce); session nonce e message nonce sono definiti nella sezione seguente.
  4. opad è un riempimento esterno di 64 byte, costituito da byte ripetuti con valore 0x5C.
  5. ipad è un padding interno di 64 byte, costituito da byte ripetuti con valore 0x36.

Nonce di sessione e nonce del messaggio

Per impedire un attacco di tipo replay, il fornitore deve assicurarsi che un nonce non venga ripetuto. Poiché mantenere la sincronizzazione dell'orologio o del contatore sia sul fornitore che sul richiedente non è semplice, il fornitore 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), che viene generato in modo casuale per ogni messaggio. Il nonce per la generazione del MAC di ogni messaggio è la combinazione di nonce di sessione e nonce del messaggio, ovvero concat(session_nonce, message_nonce).

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

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

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

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

Per inviare un messaggio quando è richiesto un MAC, il richiedente invia un nonce del messaggio e il MAC insieme al messaggio.

Ottetto Tipo di dati Descrizione Valore
0 uint8 Gruppo di messaggi varia
1 uint8 Codice messaggio varia
2 - 3 uint16 Lunghezza dati aggiuntivi(lunghezza dati aggiuntivi + 16) varia
4 - n Dati aggiuntivi varia
n + 1 - n + 8 Nonce del messaggio varia
n + 9 - n + 16 Message authentication code varia

Verifica del MAC (message authentication code)

Al ricevimento di un messaggio con il codice di autenticazione del messaggio, il fornitore lo verifica utilizzando la stessa funzione di generazione. Ovvero, il MAC ricevuto deve essere uguale ai primi 8 byte di

 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 memorizzate per verificare il MAC.
  2. message sono i dati aggiuntivi (esclusi il nonce del messaggio e il MAC) dello stream di messaggi.

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