Sygnał reklamowy dostawcy

Reklamy: gdy można je znaleźć

Gdy urządzenie dostawcy jest wykrywalne (BR/EDR), tj. w trybie parowania, będzie reklamować Dane identyfikatora modelu Szybkiego parowania nad BLE, a adres BLE nie będzie być obrócony.

Interwał reklamowy: gdy wykrywalny

Odstęp między reklamami nie powinien przekraczać 100 ms (10 Hz). O szybka szybkość pozwala Poszukiwaczowi szybko znaleźć dostawcę, nawet podczas skanowania w trybie oszczędzania energii.

Ładunek reklamowy: dane identyfikatora modelu Szybkie parowanie

Reklama będzie zawierać typ danych Usługi (ibid)., § 1.11. Identyfikator UUID jest identyfikatorem UUID usługi Szybkie parowanie w 0xFE2C. Dane usługi powinny zawierają następujące elementy:

Oktet Typ danych Opis Wartość
0-2 uint24 24-bitowy identyfikator modelu różni się

Reklamy: gdy nie można znaleźć

Jeśli urządzenie Dostawcy jest niedostępne (tzn. nie znajduje się w trybie parowania), reklamować dane konta Szybkiego parowania, korzystając z poniższych wskazówek.

Reklamowanie danych konta pozwala Szukacom w pobliżu rozpoznać, że dostawca należy do jego konta i inicjuje parowanie bez konieczności wymuszania dostawcy z powrotem do trybu parowania, co jest częstą przyczyną skargi. Osoby poszukujące treści dają użytkownikom możliwość zignorowania jej tę transmisję w przypadku, gdy nie czekają na sparowanie z dostawcą lub transmisja nie ma związku (np. jeśli została już sparowana). Poszukiwacze automatycznie odfiltrowują też ewidentnie niewłaściwe komunikaty, na przykład: gdy dane na koncie są nieprawidłowe.

Interwał reklamowy: gdy nie można go wykryć

Odstęp między reklamami powinien wynosić maksymalnie 250 ms (4 Hz).

Ładunek reklamowy: dane konta Szybkie parowanie

Reklama będzie zawierać typ danych Usługi (Ibid)., § 1.11. Identyfikator UUID jest identyfikatorem UUID usługi Szybkie parowanie w 0xFE2C. Dane usługi powinny zawierają następujące elementy:

Oktet Typ danych Opis Wartość
0 uint8 Wersja i flagi
0bVVVVFFFF
  • V = wersja
  • F = flagi
0x00
(zarezerwowana do użytku w przyszłości)
1 – różni się Dane klucza konta różni się
lub 0x00, jeśli lista kluczy konta jest pusta

Dane klucza konta obejmują:

Oktet Typ danych Opis Wartość
0 uint8 Długość i typ pola
0bLLTTTT
  • L = długość filtra klucza konta w bajtach
  • T = typ
0 MLBLL0000
  • długość = 0bLLLL = różne
  • type = 0b0000 (pokaż wskaźnik interfejsu) lub 0b0010 (ukryj wskaźnik interfejsu), filtr klucza konta
1–s Filtr klucza konta różni się
S + 1 uint8 Długość i typ pola
0bLLTTTT
  • L = długość w bajtach
  • T = typ
0b00100001
  • długość = 0b0010 = 2
  • typ = 0b0001, sól
S + 2 – S + 3 uint16 Salt różni się

Filtr klucza konta

Reklamowany filtr klucza konta pozwala szukającym szybko sprawdzić, czy Dostawca może mieć określony klucz konta (o niskiej wartości fałszywie dodatniej). (średnio poniżej 0,5%) przed dalszymi interakcjami. Szukający może automatycznie nawiązać połączenie i spróbować rozpocząć procedurę, gdy ją zobaczy transmitowany filtr typu 0, tj. wskaźnik UI, potencjalnie zawiera jeden z kluczy konta, aby zmniejszyć odsetek fałszywych dalej pozytywnych wyników. Może się zdarzyć, że Dostawca będzie chciał być rozpoznany nie jest gotowy do sparowania. Jednym z przykładów jest to, że kiedy ktoś wkłada słuchawki douszne, z powrotem do etui, chcemy przestać pokazywać kolejne powiadomienia o parowaniu. bo parowanie może zostać odrzucone przez zestaw słuchawkowy.

Filtr klucza konta ma zmienną długości Filtr rozkwicie utworzony jako następujące:

  1. Niech n będzie liczbą kluczy konta (n >= 1) w trwałym Lista kluczy konta.
  2. Nastąpi skrócenie s, czyli rozmiaru filtra w bajtach (1, 2*n + 3). Dla: Jeśli na przykład 1 klucz jest utrwalony, s = 4 bajty.
    uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
  3. Zainicjuj filtr F jako tablicę o s bajtach, z których każdy ma wartość 0.
    uint8_t F[s] = {0};
  4. Dla każdego klucza konta K z trwałej listy kluczy konta:
    1: Niech V będzie concat(K, Sól).

    // 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. Zaszyfruj V za pomocą SHA256, uzyskując wartość 32-bajtową H = {H0, ..., H31}.

    uint8_t H[32] = {0};
    SHA256_hash_function(V, H);
    

    c. Podziel H na 8 4-bajtowych liczb całkowitych bez znaku w big-endian, X = {X0, ..., X7}, gdzie 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. Dla każdego Xi:
    I. Niech M to Xi modulo liczby bitów w filtrze, (s * 8).
    ii. Uzyskaj bajt w F w indeksie (M / 8) z zaokrągleniem w dół.
    iii. W bajcie ustaw bit w indeksie (M % 8) na 1.
    iv. Innymi słowy:

        // 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));
        }
    

Dodaj filtr F w polu „Filtr klucza konta” w danych reklamowych. Zwróć uwagę, że nie ma tu miejsca „endianness”, ponieważ nie ma tu wartości znaczący bajt – nie zmieniaj kolejności bajtów.

Pole soli

Ciąg zaburzający to losowa wartość, która jest dodawana do kluczy konta podczas tworzenia filtr kwitnienia kwiatu. Tę sól należy generować ponownie przy każdej aktualizacji RPA w celu uniknięcia śledzenia rotacji adresów.

Aby wygenerować filtr klucza konta przy użyciu ciągu zaburzającego:

  1. Wygeneruj losowy 2-bajtowy S. Zwróć uwagę, że nie ma tu miejsca „endianness”, do tego ponieważ nie ma większego ani mniej istotnego bajtu, nie zmieniaj bajtów zamówienie.
  2. Jako sól użyj 2-bajtowego S.
  3. W reklamowanych danych konta Szybkie parowanie umieść wygenerowany filtr w sekcji Filtr klucza konta i S w polu Sól.