Indicador de publicidad del proveedor
Publicidad: Cuando es detectable
Cuando el dispositivo del proveedor es detectable en BR/EDR (es decir, en modo de vinculación), deberá anunciar datos de ID de modelo de par rápida a través de BLE, y la dirección BLE no debe rotó.
Intervalo de publicidad: Cuando es detectable
El intervalo entre anuncios no debe superar los 100 ms (10 Hz). R La velocidad rápida le permite al Buscador encontrar rápidamente al proveedor, incluso cuando busca en modo de bajo consumo.
Carga útil de publicidad: Datos de ID de modelo de vinculación rápida
El anuncio deberá contener el tipo de datos de Datos de servicio, ibid. § 1.11. El
El UUID debe ser el UUID del servicio de vinculación rápida de 0xFE2C
. Los datos del servicio deben
contienen los siguientes elementos:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0-2 | uint24 |
ID del modelo de 24 bits | varía |
Publicidad: Cuando no es detectable
Cuando no sea detectable (es decir, no en modo de vinculación), el dispositivo del Proveedor deberá anunciar datos de Vinculación rápida de la cuenta siguiendo los lineamientos que se indican a continuación.
Anunciar los datos de la cuenta permite que los buscadores cercanos reconozcan cuando un proveedor pertenece a su cuenta e iniciar la vinculación sin tener que forzar la de nuevo al modo de vinculación, lo que es una causa común queja. Los buscadores les brindarán a los usuarios la oportunidad de ignorar esta transmisión en caso de que no espere para vincularse con el proveedor o la transmisión no es relevante (por ejemplo, si ya se sincronizaron). Además, estas opciones también filtrarán automáticamente las transmisiones obviamente malas, como las siguientes: cuando los datos de la cuenta están mal configurados.
Intervalo de publicidad: cuando no es detectable
El intervalo entre anuncios debe ser, como máximo, de 250 ms (4 Hz).
Carga útil de publicidad: Datos de cuenta de Vinculación rápida
El anuncio deberá contener el tipo de datos de Datos de servicio, Ibid. § 1.11. El
El UUID debe ser el UUID del servicio de vinculación rápida de 0xFE2C
. Los datos del servicio deben
contienen los siguientes elementos:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 |
Versión y marcas 0bVVVVFFFF
|
0x00 (reservado para uso futuro) |
1 - varía | Datos clave de la cuenta | varía o 0x00 si la lista de claves de la cuenta está vacía |
Los datos clave de la cuenta contienen:
Octeto | Tipo de datos | Descripción | Valor |
---|---|---|---|
0 | uint8 |
Longitud y tipo de campo 0bLLTTTT
|
0bLLLL0000
|
1: s | Filtro de clave de cuenta | varía | |
s + 1 | uint8 |
Longitud y tipo de campo 0bLLTTTT
|
0b00100001
|
s + 2 - s + 3 | uint16 |
Salt | varía |
Filtro de clave de cuenta
El filtro de claves de cuenta anunciado permite que el usuario compruebe rápidamente si Es posible que el proveedor posea una clave de cuenta determinada (con un falso positivo bajo de probabilidad, en promedio mucho menor que 0.5%), antes de más interacciones. El Seeker puede conectarse automáticamente e intentar iniciar el procedimiento cuando detecte un filtro que se transmite con el tipo 0, es decir, que muestra una indicación de IU, que contiene potencialmente una de las claves de cuenta, para reducir la tasa de falsos los aspectos positivos. En algunas situaciones, es posible que el Proveedor quiera que se le reconozca por el Buscador cuando no está listo para la vinculación. Por ejemplo, cuando se ponen los auriculares volver a este caso, queremos dejar de mostrar la notificación de vinculación posterior ya que los auriculares podrían rechazar esa vinculación.
El filtro de claves de la cuenta tiene una longitud variable El filtro Bloom está construido como sigue:
- Supongamos que n es el número de claves de cuenta (n >= 1) en la Lista de claves de la cuenta.
- Hagamos que s, el tamaño del filtro en bytes, se trunque (1.2*n + 3). Para
Por ejemplo, si 1 clave persiste, s = 4 bytes.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
- Inicializa el filtro F como un array de s bytes, cada uno establecido en 0.
uint8_t F[s] = {0};
Por cada clave de la cuenta K que aparece en la lista de claves de la cuenta persistente:
a. Deja que V sea 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. Genera un hash V con SHA256 y obtén un valor de 32 bytes H = {H0, ..., H31}.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);
c. Dividir H en ocho números enteros sin firma de 4 bytes en big-endian, X = {X0, ..., X7}, donde 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. Para cada Xi:
I. Deja que M sea el módulo de la cantidad de bits en el filtro Xi. (s * 8).
II. Obtén el byte de F en el índice (M / 8), redondeado hacia abajo.
iii. Dentro del byte, establece el bit en el índice (M % 8) en 1.
iv. En otras palabras:// 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)); }
En los datos de publicidad, incluye el filtro F como el campo Filtro de clave de cuenta. Ten en cuenta que no hay “endianness” a este valor, ya que no hay más ni menos byte importante, no alteres el orden de bytes.
Campo de sal
La sal es un valor aleatorio que se agrega a las claves de cuenta cuando se compila la filtro de flor. Esta sal se debe regenerar cada vez que se actualice la RPA de el proveedor para evitar el seguimiento en la rotación de direcciones.
Para generar el filtro de claves de la cuenta usando la sal, haz lo siguiente:
- Genera una S aleatoria de 2 bytes. Ten en cuenta que no hay “endianness” a este valor, ya que no hay un byte más ni menos importante, no lo modifiques en el orden personalizado.
- Usa la S de 2 bytes como la sal.
- En los datos de cuentas de Vinculación rápida anunciados, incluye el filtro generado en el Account Key Filter y S en el campo Sal.