Codice di autenticazione del messaggio
Gli stream di messaggi vengono utilizzati per configurare Cambio Audio. Consulta: Messaggi relativi al cambio audio. Per queste importanti configurazioni, il provider deve per assicurare che il messaggio venga inviato da GMSCore (modulo di accoppiamento rapido) e non da altra app sul dispositivo di ricerca.
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
- K viene generato da concat(chiave account, zeri a 48 byte).
- message sono i dati aggiuntivi dello stream di messaggi.
- nonce viene generato da concat(session_nonce, message_nonce); sessione il nonce e il nonce del messaggio sono definiti nella sezione seguente.
- opad è 64 byte di spaziatura interna esterna, composta da byte ripetuti valutati
0x5C
. - ipad è 64 byte di spaziatura interna interna, composta da byte ripetuti valutati
0x36
.
Nonce della sessione e nonce del messaggio
Per prevenire un attacco di ripetizione, il provider deve assicurarsi che un nonce non sia ripetuto. Dal mantenimento della sincronizzazione dell'orologio o del contatore su entrambi i provider e la funzionalità di ricerca non è immediata, il provider genera il nonce di sessione (per connessione), che viene condiviso con tutti i messaggi durante la connessione. mentre il ricercatore genera il nonce del messaggio (per messaggio), che viene generate per ogni messaggio. Il nonce per generare il MAC di ciascun 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 del dispositivo:
Nome del gruppo di messaggi | Valore |
---|---|
Evento Informazioni dispositivo | 0x03 |
Nome codice messaggio | Valore |
---|---|
Nonce sessione | 0x0A |
Il nonce della sessione deve essere generato e inviato al cercatore quando RFCOMM connette:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | uint8 | Evento Informazioni dispositivo | 0x03 |
1 | uint8 | Nonce sessione | 0x0A |
2 - 3 | uint16 | Dati aggiuntivi | 0x0008 |
4 - 11 | nonce di sessione | varia |
Per inviare un messaggio quando è richiesto un MAC, il ricercatore invierà un messaggio nonce e 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 dei dati aggiuntivi + 16) | varia |
4 - n | Dati aggiuntivi | varia | |
N + 1 - n + 8 | Nonce messaggio | varia | |
N + 9 - n + 16 | Codice di autenticazione del messaggio | varia |
Verifica MAC (codice di autenticazione dei messaggi)
Dopo aver ricevuto un messaggio con il codice di autenticazione del messaggio, il provider deve verificarlo utilizzando la stessa funzione della funzione di generazione. Vale a dire che l'indirizzo 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 provider attraversa tutte le chiavi di account memorizzate per verificare il MAC. - message sono i dati aggiuntivi (esclusi nonce e MAC dei messaggi) di il flusso di messaggi.
Se il MAC è corretto, il fornitore dovrà seguire le istruzioni del . Altrimenti, il provider invierà un NAK con il motivo dell'errore, 0x3 - non consentito a causa di un codice di autenticazione del messaggio errato.