供應商廣告信號

廣告:曝光時

當供應商裝置處於 BR/EDR 狀態時 (即處於配對模式),則 必須透過 BLE 宣傳快速配對模型 ID 資料,且 BLE 位址不得 旋轉物件。

廣告間隔:發現曝光時

廣告之間的間隔時間不應超過 100 毫秒 (10Hz)。A 罩杯 快速速率可讓搜尋者快速找到供應商,即使掃描是 低耗電模式

廣告酬載:快速配對模型 ID 資料

廣告必須包含服務資料資料類型 (ibid)。§ 1.11。 UUID 應為 0xFE2C 的快速配對服務 UUID。服務資料 包含下列項目:

八位元 資料類型 說明
0-2 uint24 24 位元模型 ID 各不相同

廣告:不易找到

如果不可供偵測 (也就是未處於配對模式),供應商裝置應 根據下列準則宣傳快速配對帳戶資料。

宣傳帳戶資料後,附近的探索者就能識別供應商 裝置即會啟動配對,無需強制使用 使用者可能會回到配對模式,這是使用者常態的原因 申訴。搜尋者有機會讓使用者忽略 若是無人等候與供應商配對,或未等待 廣播與無關 (例如影片已配對)。 觀看者還會自動過濾掉明顯品質不佳的直播,例如 當帳戶資料設定有誤時。

廣告間隔:不易察覺

廣告間隔時間不得超過 250 毫秒 (4Hz)。

廣告酬載:快速配對帳戶資料

廣告必須包含服務資料資料類型 (Ibid)。§ 1.11。 UUID 應為 0xFE2C 的快速配對服務 UUID。服務資料 包含下列項目:

八位元 資料類型 說明
0 uint8 版本和標記
0bVVVVFFFF
  • V = 版本
  • F = 旗標
0x00
(保留供日後使用)
1 - 不固定 帳戶金鑰資料 變動
0x00 (如果帳戶金鑰清單為空白)

「帳戶金鑰資料」包含:

八位元 資料類型 說明
0 uint8 欄位長度和類型
0bLLTTTT
  • L = 帳戶金鑰篩選器的長度 (以位元組為單位)
  • T = 類型
0bLL0000
  • 長度 = 0bLLLL = 不固定
  • type = 0b0000 (顯示 UI 指示) 或 0b0010 (隱藏 UI 指示)、帳戶金鑰篩選器
1 - 帳戶金鑰篩選器 各不相同
s + 1 鍵 uint8 欄位長度和類型
0bLLTTTT
  • L = 長度 (以位元組為單位)
  • T = 類型
0b00100001
  • 長度 = 0b0010 = 2
  • 類型 = 0b0001,Salt
s + 2 - s + 3 鍵 uint16 Salt 各不相同

帳戶金鑰篩選器

「宣傳帳戶金鑰篩選器」可讓尋找者快速檢查 供應商可能擁有特定帳戶金鑰 (誤判率低) 平均遠低於 0.5%) 之後,再進行其他互動。 探索者可能會自動連線,並在偵測到時開始啟動程序 放送類型為 0 的篩選器,即顯示 UI 指標, 可能含有一個帳戶金鑰,因此為了降低 也會更進一步在某些情況下,我們會希望能夠辨識供應商 嘗試配對時,無法進行配對例如,當耳機被放置時 以免出現後續配對通知 因為耳機可能會拒絕配對

「帳戶金鑰篩選器」長度不定 構建為花卉濾鏡 如下:

  1. n 為持續儲存的帳戶金鑰數量 (n >= 1) 帳戶金鑰清單
  2. 讓我們 s,即篩選器的大小 (以位元組為單位),被截斷 (1.2*n + 3)。適用對象 例如,如果保留 1 個鍵,s = 4 個位元組。
    uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
  3. 將篩選器 F 初始化為 s 個位元組的陣列,每個陣列設為 0。
    uint8_t F[s] = {0};
  4. 針對持續性「帳戶金鑰清單」中的每個帳戶金鑰 K
    a.讓 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. 使用 SHA256 雜湊 V,取得 32 位元組的值 H = {H0, ..., H31}。

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

    c. 將 H 除以大端序的八個 4 位元組無正負號整數。 X = {X0, ..., X7},其中 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. 針對每個 Xi
    i.讓 MXi 篩選器中的位元數。 (s * 8)。
    ii.取得 F 中的位元組,索引 (M / 8),四捨五入。
    iii.在位元組中,將索引的位元 (M % 8) 設為 1。
    iv.換句話說:

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

在廣告資料中加入篩選器 F 做為「帳戶金鑰篩選器」欄位。 請注意,結尾並非「endianness」。 重要的位元組—請勿變更位元組順序。

鹽田

鹽是建立 花卉濾鏡。每當 RPA 更新時 避免跨地址輪流追蹤。

如何使用鹽產生帳戶金鑰篩選器:

  1. 產生隨機 2 位元組 S。請注意,結尾並非「endianness」到此 值,因為沒有較大位元組或更小的位元組,所以請勿變更位元組 順序。
  2. 使用 2 位元組 S 做為鹽。
  3. 在通告的快速配對帳戶資料中,將產生的篩選器加入至 帳戶金鑰篩選器欄位,以及「Salt」欄位中的「S」