Sinyal Iklan Penyedia

Iklan: Saat dapat ditemukan

Jika perangkat Penyedia dapat ditemukan BR/EDR (yaitu, dalam mode penyambungan), perangkat harus mengiklankan Data ID Model Sambungan Cepat daripada BLE, dan alamat BLE tidak akan diputar.

Interval iklan: Saat dapat ditemukan

Interval antar-iklan tidak boleh lebih dari 100 md (10 Hz). J tingkat yang cepat memungkinkan Pencari untuk menemukan Penyedia dengan cepat, bahkan saat memindai mode daya rendah.

Payload iklan: Data ID Model Sambungan Cepat

Iklan harus berisi jenis data Data Layanan, ibid., § 1.11. Tujuan UUID akan menjadi UUID Layanan Sambungan Cepat 0xFE2C. Data layanan harus berisi hal berikut:

Oktet Jenis data Deskripsi Nilai
0-2 uint24 ID model 24-bit bervariasi

Iklan: Saat tidak dapat ditemukan

Saat tidak dapat ditemukan (yaitu, tidak dalam mode penyambungan), perangkat Penyedia harus mengiklankan Data Akun Sambungan Cepat, menggunakan panduan berikut.

Mengiklankan data akun memungkinkan Pencari Kerja di sekitar mengenali saat penyedia milik akun mereka dan memulai pasangan tanpa harus memaksa penyedia kembali ke mode penyambungan terlebih dahulu, yang merupakan penyebab umum keluhan Anda. Pencari kerja akan memberikan peluang bagi pengguna untuk mengabaikan siaran ini dalam kasus di mana mereka tidak menunggu untuk menyambungkan dengan penyedia siaran tersebut tidak relevan (misalnya, jika sudah dipasangkan). Pencari juga akan otomatis menyaring siaran yang jelas-jelas buruk, seperti saat data akun salah dikonfigurasi.

Interval iklan: Saat tidak dapat ditemukan

Interval antar-iklan maksimal harus 250 md (4 Hz).

Payload iklan: Data Akun Sambungan Cepat

Iklan harus berisi jenis data Data Layanan, Ibid., § 1.11. Tujuan UUID akan menjadi UUID Layanan Sambungan Cepat 0xFE2C. Data layanan harus berisi hal berikut:

Oktet Jenis data Deskripsi Nilai
0 uint8 Versi dan tanda
0bVVVVFFFF
  • V = versi
  • F = penanda
0x00
(dicadangkan untuk penggunaan pada masa mendatang)
1 - bervariasi Data Kunci Akun bervariasi
atau 0x00 jika Daftar Kunci Akun kosong

Data Kunci Akun berisi:

Oktet Jenis data Deskripsi Nilai
0 uint8 Panjang dan jenis kolom
0bLLLLTTTT
  • L = panjang filter kunci akun dalam byte
  • T = jenis
0bLLLL0.000
  • panjang = 0bLLLL = bervariasi
  • type = 0b0000 (tampilkan indikasi UI) atau 0b0010 (sembunyikan indikasi UI), Filter Kunci Akun
1 - dtk Filter Kunci Akun bervariasi
s + 1 uint8 Panjang dan jenis kolom
0bLLLLTTTT
  • L = panjang dalam byte
  • T = jenis
0b00100001
  • panjang = 0b0010 = 2
  • jenis = 0b0001, Salt
s + 2 - s + 3 uint16 Salt bervariasi

Filter Kunci Akun

Filter Kunci Akun yang diiklankan memungkinkan Pencari Kerja untuk memeriksa dengan cepat apakah Penyedia mungkin memiliki kunci akun tertentu (dengan positif palsu rendah probabilitas tertinggi, rata-rata kurang dari 0,5%), sebelum interaksi lebih lanjut. Tujuan Pencari dapat otomatis terhubung dan mencoba memulai prosedur saat melihat filter yang disiarkan dengan tipe 0, yaitu menunjukkan indikasi UI, yang berpotensi berisi salah satu kunci akunnya, untuk mengurangi tingkat informasi positif lebih lanjut. Dalam beberapa situasi, Penyedia mungkin ingin dikenali oleh Pencari Kerja ketika belum siap untuk pemasangan. Salah satu contohnya adalah ketika tunas diletakkan kembali ke kasus, kita ingin berhenti menampilkan notifikasi penyambungan berikutnya karena penyandingan itu dapat ditolak oleh {i>headset<i}.

Filter Kunci Akun memiliki panjang variabel Filter bunga dibuat sebagai berikut ini:

  1. Misalkan n adalah jumlah kunci akun (n >= 1) dalam Daftar Kunci Akun.
  2. Mari s, ukuran filter dalam byte, dipotong (1.2*n + 3). Sebagai misalnya, jika 1 kunci dipertahankan, s = 4 byte.
    uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
  3. Lakukan inisialisasi filter F sebagai array byte s, masing-masing disetel ke 0.
    uint8_t F[s] = {0};
  4. Untuk setiap kunci akun K dalam daftar Kunci Akun yang dipertahankan:
    a. Misalkan V adalah 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. Hash V menggunakan SHA256, untuk memperoleh nilai 32 byte H = {H0, ..., T31}.

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

    c. Bagi H menjadi delapan bilangan bulat tanpa tanda tangan 4 byte di big-endian, X = {X0, ..., X7}, dengan X0 = 0xH0T1T2T3.

         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. Untuk setiap Xi:
    i. Misalkan M menjadi Xi berdasarkan jumlah bit dalam filter, (dtk * 8).
    ii. Dapatkan byte dalam F pada indeks (M / 8), yang dibulatkan ke bawah.
    iii. Dalam byte, tetapkan bit pada indeks (M % 8) ke 1.
    iv. Dengan kata lain:

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

Sertakan filter F sebagai kolom Filter Kunci Akun, pada data iklan. Perhatikan bahwa tidak ada "{i>endianness<i}" ke nilai ini, karena tidak ada lebih banyak atau lebih sedikit byte yang signifikan—jangan mengubah urutan byte.

Ladang garam

Salt adalah nilai acak yang ditambahkan ke kunci akun saat membangun {i>bloom filter<i}. {i>Salt<i} ini harus dibuat ulang setiap kali RPA diperbarui untuk Penyedia untuk menghindari pelacakan di seluruh rotasi alamat.

Untuk membuat Filter Kunci Akun menggunakan salt:

  1. Buat S 2 byte secara acak. Perhatikan bahwa tidak ada "{i>endianness<i}" menjadi , karena tidak ada byte yang lebih atau kurang signifikan — jangan ubah byte pesanan.
  2. Gunakan S 2 byte sebagai Salt.
  3. Dalam Data Akun Sambungan Cepat yang diiklankan, sertakan filter yang dihasilkan dalam kolom Kolom Filter Kunci Akun, dan S pada kolom Salt.