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
- K viene generato da concat(chiave account, 48 byte di ZERI).
- message sono i dati aggiuntivi dello stream di messaggi.
- nonce viene generato da concat(session_nonce, message_nonce); session nonce e message nonce sono definiti nella sezione seguente.
- opad è un riempimento esterno di 64 byte, costituito da byte ripetuti con valore
0x5C. - 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:
- 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. - 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.