Indicatore pubblicità del fornitore
Pubblicità: quando rilevabile
Quando il dispositivo del provider è rilevabile BR/EDR (ovvero in modalità di accoppiamento), annuncia i Dati ID modello ad accoppiamento rapido tramite BLE e l'indirizzo BLE non ruotato.
Intervallo pubblicitario: quando rilevabile
L'intervallo tra gli annunci non deve essere superiore a 100 ms (10 Hz). R la velocità veloce consente al ricercatore di trovare rapidamente il provider, anche durante la scansione modalità a basso consumo.
Payload pubblicità: dati ID modello ad accoppiamento rapido
L'annuncio deve contenere il tipo di dati dei Dati di servizio, ibid., § 1.11. La
L'UUID sarà l'UUID del servizio di accoppiamento rapido di 0xFE2C
. I dati del servizio devono
contengono quanto segue:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0-2 | uint24 |
ID modello a 24 bit | varia |
Pubblicità: quando non è rilevabile
Quando non è rilevabile (ovvero non è in modalità di accoppiamento), il dispositivo del fornitore deve pubblicizzare i dati dell'account con accoppiamento rapido, utilizzando le seguenti linee guida.
La pubblicità dei dati dell'account consente agli utenti nelle vicinanze di riconoscere quando un fornitore appartiene al proprio account e avvia l'accoppiamento senza dover forzare il provider di servizi di telefonia mobile di nuovo in modalità di accoppiamento, una causa comune reclamo. I ricercatori offriranno agli utenti l'opportunità di ignorare questa trasmissione nel caso in cui non si aspettino l'accoppiamento con il provider la trasmissione non è pertinente (ad esempio, se sono già stati accoppiati). Chi cerca i partecipanti filtrerà automaticamente anche le trasmissioni palesemente di scarsa qualità, come quando i dati dell'account non sono configurati correttamente.
Intervallo pubblicitario: quando non rilevabile
L'intervallo tra gli annunci deve essere al massimo di 250 ms (4 Hz).
Payload pubblicità: dati degli account ad accoppiamento rapido
L'annuncio deve contenere il tipo di dati dei dati di servizio: Ibid., § 1.11. La
L'UUID sarà l'UUID del servizio di accoppiamento rapido di 0xFE2C
. I dati del servizio devono
contengono quanto segue:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | uint8 |
Versione e flag 0bVVVVFFFF
|
0x00 (prenotato per uso futuro) |
1 - varia | Dati chiave dell'account | varia o 0x00 se l'elenco delle chiavi dell'account è vuoto |
I dati relativi alla chiave dell'account contengono:
Ottetto | Tipo di dati | Descrizione | Valore |
---|---|---|---|
0 | uint8 |
Lunghezza e tipo di campo 0bLLLLTTTT
|
0bLLLL0000
|
1 - s | Filtro chiave account | varia | |
S + 1 | uint8 |
Lunghezza e tipo di campo 0bLLLLTTTT
|
0b00100001
|
S + 2 - S + 3 | uint16 |
Salt | varia |
Filtro chiave account
Il filtro chiave account pubblicizzato consente a un ricercatore di verificare rapidamente se Il fornitore potrebbe possedere una determinata chiave dell'account (con un basso numero di falsi positivi probabilità, in media molto meno dello 0,5%), prima di ulteriori interazioni. La Il dispositivo di ricerca potrebbe connettersi automaticamente e tentare di avviare la procedura quando vede un filtro che viene trasmesso con tipo 0, ovvero che mostra un'indicazione UI, contiene potenzialmente una delle chiavi del proprio account, in modo da ridurre il tasso di positivi ulteriormente. In alcune situazioni, è possibile che il Fornitore voglia essere riconosciuto dal ricercatore quando non è pronto per l'accoppiamento. Ad esempio, quando vengono posizionati gli auricolari di nuovo, vogliamo interrompere la visualizzazione della successiva notifica di accoppiamento poiché l'accoppiamento potrebbe essere rifiutato dalle cuffie.
Il filtro per chiave dell'account è un filtro a lunghezza variabile Filtro Bloom creato come che segue:
- Sia n il numero di chiavi dell'account (n >= 1) nel Elenco delle chiavi dell'account.
- Sia s, che corrisponde alla dimensione del filtro in byte, troncata (1,2*n + 3). Per
Ad esempio, se una chiave è persistente, s = 4 byte.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
- Inizializza il filtro F come un array di s byte, ciascuno impostato su 0.
uint8_t F[s] = {0};
Per ogni chiave dell'account K nell'elenco delle chiavi dell'account persistente:
a. Sia V concat(K, Salt).// In the sample code, the size of salt is 2 bytes. #define SALT_SIZE 2 uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE]; for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++) { // concat (K, Salt) fastpair_get_account_key_by_index(keyIndex, V); uint8_t randomSalt = (uint8_t)rand(); V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt; ... }
b. Usa l'hash V con SHA256, ottenendo un valore di 32 byte H = {H0, ..., H31}.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);
c. Dividi H in otto numeri interi senza segno a 4 byte in big-endian, X = {X0, ..., X7}, dove X0 = 0xH0H1H2H3.
uint32_t X[8]; for (index = 0; index < 8; index++) { X[index] = (((uint32_t)(H[index * 4])) << 24) | (((uint32_t)(H[index * 4 + 1])) << 16) | (((uint32_t)(H[index * 4 + 2])) << 8) | (((uint32_t)(H[index * 4 + 3])) << 0); }
d. Per ogni Xi:
i. Sia M Xi modulo il numero di bit nel filtro, (S * 8).
ii. Ottieni il byte in F all'indice (M / 8), arrotondato per difetto.
iii. All'interno del byte, imposta il bit nell'indice (M % 8) su 1.
iv. In altre parole:// M = Xi % (s * 8) // F[M/8] = F[M/8] | (1 << (M % 8)) for (index = 0; index < 8; index++) { uint32_t M = X[index] % (s * 8); F[M / 8] = F[M / 8] | (1 << (M % 8)); }
Nei dati pubblicitari, includi il filtro F come campo Filtro chiave account. Non esiste una "endianness" a questo valore, poiché non c'è più o meno byte significativi: non modificare l'ordine dei byte.
Campo di sale
Il sale è un valore casuale che viene aggiunto alle chiavi dell'account durante la creazione filtro Bloom. Questo sale deve essere rigenerato ogni volta che viene aggiornato l'RPA al provider per evitare il tracciamento attraverso la rotazione degli indirizzi.
Per generare il filtro della chiave dell'account utilizzando il sale:
- Genera una classe S casuale a 2 byte. Non esiste una "endianness" a questo dato che non c'è un byte più o meno significativo, non modificare il byte ordine.
- Usa la S da 2 byte come Salt.
- Nei dati dell'account per l'accoppiamento rapido pubblicizzati, includi il filtro generato nel campo Filtro chiave account e S nel campo Salt.