「尋找我的裝置」網路配件規格

v1.3

「尋找我的裝置網路」(FMDN) 配件規格定義了端對端加密方法,用於追蹤發送信標的藍牙低功耗 (BLE) 裝置。本頁面說明 FMDN 是 Fast Pair 規格的擴充功能。如果供應商的裝置與 FMDN 相容,且願意為這些裝置啟用位置資訊追蹤功能,就應啟用這個擴充功能。

GATT 規格

應在 Fast Pair 服務中加入額外的通用屬性 (GATT) 特徵,並使用以下語義:

快速配對服務特性 已加密 權限 UUID
信標動作 讀取、寫入及通知 FE2C1238-8366-4814-8EB0-01DE32100BEA

表 1:FMDN 的快速配對服務特性。

驗證

這項擴充功能所需的作業會以寫入作業的形式執行,並透過挑戰/回應機制加以保護。在執行任何作業之前,Seeker 應會根據表格 1 中的特性執行讀取作業,並產生下列格式的緩衝區:

Octet 資料類型 說明
0 uint8 通訊協定主要版本號碼 0x01
1 - 8 位元組陣列 一次性隨機 Nonce 視情況而定

每項讀取作業應產生不同的 Nonce,且單一 Nonce 僅適用於單一作業。即使作業失敗,Nonce 也必須失效。

接著,Seeker 會計算一次性驗證金鑰,用於後續的寫入要求。驗證金鑰的計算方式如表 2 至 5 所述。視所要求的作業而定,Seeker 會證明自己瞭解下列一或多個鍵:

作業

表 2 至 5 列出寫入特徵的資料格式。本節稍後會詳細討論各項作業。

Octet 資料類型 說明
0 uint8 資料 ID
  • 0x00:讀取訊號 beacons 參數
  • 0x01:讀取帳戶管理狀態
  • 0x02:設定暫時身分金鑰
  • 0x03:清除暫時身分金鑰
1 uint8 資料長度 視情況而定
2 - 9 位元組陣列 一次性驗證金鑰 HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data) 的前 8 個位元組
10 - var 位元組陣列 其他資料
  • 0x00:不適用
  • 0x01:無
  • 0x02:32 個位元組,為臨時身分金鑰,使用帳戶金鑰加密的 AES-ECB-128。如果提供者已擁有暫時性身分金鑰組,請一併傳送 SHA256(current ephemeral identity key || the last nonce read from the characteristic) 的前 8 個位元組
  • 0x03:SHA256(ephemeral identity key || the last nonce read from the characteristic) 的前 8 個位元組

表 2:信標佈建要求。

Octet 資料類型 說明
0 uint8 資料 ID 0x04:取得使用者同意聲明,讀取暫時身分金鑰
1 uint8 資料長度 0x08
2 - 9 位元組陣列 一次性驗證金鑰 HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length) 的前 8 個位元組

表 3:Beacon 佈建金鑰復原要求。

Octet 資料類型 說明
0 uint8 資料 ID
  • 0x05:鈴聲
  • 0x06:讀取鈴響狀態
1 uint8 資料長度 視情況而定
2 - 9 位元組陣列 一次性驗證金鑰 HMAC-SHA256(ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data) 的前 8 個位元組
10 - var 位元組陣列 其他資料
  • 0x05:4 個位元組,表示鈴響狀態、鈴響時間和鈴響音量。
  • 0x06:無

表 4:鈴響要求。

Octet 資料類型 說明
0 uint8 資料 ID
  • 0x07:啟用不必要的追蹤保護模式
  • 0x08:停用不明追蹤防護模式
1 uint8 資料長度 視情況而定
2 - 9 位元組陣列 一次性驗證金鑰 HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data) 的前 8 個位元組
10 - var 位元組陣列 其他資料
  • 0x07:1 個位元組的控制旗標 (選用)
  • 0x08:SHA256(ephemeral identity key || the last nonce read from the characteristic) 的前 8 個位元組

表 5:不當追蹤保護要求。

成功寫入會觸發通知,如表 6 所列。

除了 0x05:鈴聲狀態變更以外,如果通知含有資料 ID,則應在觸發通知的寫入交易完成前傳送,也就是在傳送寫入要求的回應 PDU 之前。

Octet 資料類型 說明
0 uint8 資料 ID
  • 0x00:讀取訊號 beacons 參數
  • 0x01:讀取帳戶管理狀態
  • 0x02:設定暫時身分金鑰
  • 0x03:清除暫時身分金鑰
  • 0x04:取得使用者同意聲明,讀取暫時性身分金鑰
  • 0x05:鈴聲狀態變更
  • 0x06:讀取鈴響狀態
  • 0x07:啟用不必要的追蹤保護模式
  • 0x08:停用不明追蹤防護模式
1 uint8 資料長度 視情況而定
2 - 9 位元組陣列 驗證 每項作業的詳細資料
10 - 變數 位元組陣列 其他資料
  • 0x00:8 個位元組,用於指出傳輸功率、時鐘值、加密方法和鈴聲功能,並使用帳戶金鑰進行 AES-ECB-128 加密 (以零填補)
  • 0x01:1 個位元組,表示佈建狀態,後面接著目前的暫時 ID (20 或 32 位元組) (如適用)
  • 0x04:32 個位元組,是使用帳戶金鑰以 AES-ECB-128 加密的暫時身分金鑰
  • 0x05:4 個位元組,表示變更的新狀態和觸發條件
  • 0x06:3 個位元組,指出哪些元件正在響鈴,以及鈴聲剩餘的十分秒數
  • 其他資料 ID 使用空白額外資料

表 6:Beacon 服務回應。

表 7 列出作業可能傳回的 GATT 錯誤代碼。

程式碼 說明 附註
0x80 未經驗證 驗證失敗 (包括使用舊 Nonce 的情況) 時,系統會在回應寫入要求時傳回此值。
0x81 無效值 在提供任何無效值或收到的資料有意外的位元組數時,系統會傳回此值。
0x82 未取得使用者同意 當裝置未處於配對模式時,系統會在回應寫入要求 (含有資料 ID 的 0x04:讀取暫時性身分金鑰,並取得使用者同意聲明) 時傳回此值。

表 7:GATT 錯誤代碼。

讀取信標的參數

尋覓者可以對屬性執行寫入作業,該屬性包含表格 2 中資料 ID 為 0x00 的要求,藉此向供應器查詢訊號 beacons 的參數。供應商會驗證提供的一次性驗證金鑰是否與裝置上儲存的任何帳戶金鑰相符。

如果驗證失敗,供應器會傳回未驗證的錯誤。

如果成功,提供者會傳送表格 6 的回應,資料 ID 為 0x00。供應器會以以下方式建構資料區段:

Octet 資料類型 說明
0 uint8 校正功率 在 0 公尺處收到的校正功率 (值介於 [-100, 20] 之間)。以帶號整數表示,解析度為 1 dBm。
1 到 4 人 uint32 時鐘值 目前的秒數時鐘值 (大端序)。
5 uint8 曲線選取 用於加密的橢圓曲線:
  • 0x00 (預設):SECP160R1
  • 0x01:SECP256R1 (需要擴充廣告)
6 uint8 元件 可響鈴的元件數量:
  • 0x00:表示裝置無法響鈴。
  • 0x01:表示只有單一元件可發出鈴聲。
  • 0x02:表示左右兩個耳機元件可獨立響鈴。
  • 0x03:表示三個元件 (左耳機、右耳機和充電盒) 可獨立響鈴。
7 uint8 鈴響功能 支援的選項如下:
  • 0x00:無法選取鈴聲音量。
  • 0x01:可選用鈴聲音量。如果已設為此值,供應器必須接受並處理 3 個音量等級,如鈴聲操作所示。
8-15 位元組陣列 邊框間距 AES 加密的零填充。

資料應使用 AES-ECB-128 加密,並搭配用於驗證要求的帳戶金鑰。

驗證區段的定義為 HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data after encryption || 0x01) 的前 8 個位元組。

讀取訊號 beacons 的帳戶管理狀態

尋覓者可以對表格 2 中資料 ID 為 0x01 的要求,執行寫入操作,藉此向供應器查詢信標的佈建狀態。供應者會驗證提供的一次性驗證金鑰是否與裝置上儲存的任何帳戶金鑰相符。

如果驗證失敗,供應器會傳回未驗證的錯誤。

如果成功,供應器會傳送表格 6 的回應,其中資料 ID 為 0x01。供應器會以以下方式建構資料區段:

Octet 資料類型 說明
0 uint8 佈建狀態 位元遮罩值如下:
  • 位元 1 (0x01):如果裝置已設定暫時性身分金鑰,則設為 1。
  • 位元 2 (0x02):如果提供的一次性驗證金鑰與擁有者帳戶金鑰相符,則設為 1。
1 至 20 或 32 位元組陣列 目前的暫時 ID 20 或 32 個位元組 (視所使用的加密方法而定),表示信標宣傳的目前暫時 ID (如果裝置已設定此 ID)。

驗證區段的定義為 HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) 的前 8 個位元組。

設定暫時性身分金鑰

如要將未佈建的供應器佈建為 FMDN 信標,或變更已佈建供應器的暫時性識別金鑰,Seeker 會對特性執行寫入作業,該特性包含來自表格 2 的資料要求,資料 ID 為 0x02。供應商會驗證以下事項:

  • 您提供的一次性驗證金鑰與擁有者帳戶金鑰相符。
  • 如果您提供暫時性身分金鑰的雜湊值,雜湊值的暫時性身分金鑰會與目前的暫時性身分金鑰相符。
  • 如果未提供暫時身分金鑰的雜湊,請確認提供者尚未佈建為 FMDN 信標。

如果驗證失敗,供應器會傳回未驗證的錯誤。

成功後,系統會使用相符的帳戶金鑰,透過 AES-ECB-128 解密方式還原暫時身分金鑰。金鑰應保留在裝置上,且提供者應從該點開始宣傳 FMDN 畫面格。新的暫時性身分金鑰會在 BLE 連線終止後立即生效。供應器會使用表 6 中的回應通知,資料 ID 為 0x02。

驗證區段的定義為 HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) 的前 8 個位元組。

清除暫時性身分金鑰

如要取消供應器的訊號 beacons 部分,Seeker 會對特性執行寫入作業,其中包含來自表格 2 的資料 ID 0x03 要求。供應商會驗證以下事項:

  • 您提供的一次性驗證金鑰與擁有者帳戶金鑰相符。
  • 雜湊的暫時身分鍵與目前的暫時身分鍵相符。

如果未將供應者佈建為 FMDN 信標,或是驗證失敗,則會傳回未驗證的錯誤。

成功後,供應器會忘記金鑰,並停止廣告 FMDN 影格。供應者會透過表格 6 中的回應通知,資料 ID 為 0x03。驗證區段的定義為 HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) 的前 8 個位元組。

取得使用者同意聲明,讀取暫時身分金鑰

這個選項僅適用於找回遺失的金鑰,因為金鑰只會由 Seeker 儲存在本機。因此,這項功能僅在裝置處於配對模式時,或在按下裝置實體按鈕後的一段時間內 (這代表使用者同意) 可用。

Seeker 必須將復原金鑰儲存在後端,才能復原明文金鑰,但不會儲存 EIK 本身。

為了讀取 EIK,Seeker 會對特徵執行寫入作業,其中包含來自表格 3 的資料 ID 0x04 要求。供應商會驗證以下事項:

  • 雜湊備援金鑰與預期的備援金鑰相符。
  • 裝置處於 EIK 復原模式。

如果驗證失敗,供應器會傳回未驗證的錯誤。

如果裝置未處於配對模式,供應器會傳回「No User Consent」錯誤。

如果成功,供應器會傳送表格 6 中的回應,資料 ID 為 0x04。

驗證區段的定義為 HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) 的前 8 個位元組。

響鈴操作

尋求者可以對特性執行寫入作業,要求供應者播放音效,這項作業包含表 4 中資料 ID 為 0x05 的要求。供應器會以以下方式建構資料區段:

Octet 資料類型 說明
0 uint8 環形運算 位元遮罩值如下:
  • 位元 1 (0x01):讓右耳機發出鈴聲
  • 位元 2 (0x02):讓左耳機發出鈴聲
  • 位元 3 (0x04):環形外殼
  • 0xFF:響鈴所有元件
  • 0x00:停止響鈴
1 - 2 uint16 逾時 逾時時間 (以十分之一秒為單位)。不得為零,且不得大於 10 分鐘。
供應器會使用這個值,決定在靜音之前應響鈴多久。如果裝置的任何元件已在響鈴,則逾時值會覆寫已生效的逾時值。

如果環狀操作設為 0x00,系統會忽略逾時。
3 uint8 音量
  • 0x00:預設
  • 0x01:低
  • 0x02:中
  • 0x03:高
這些值的確切含義取決於實作方式。

收到要求後,供應商會驗證以下事項:

  • 提供的一次性驗證金鑰與環狀金鑰相符。
  • 要求的狀態與可響鈴的元件相符。

如果未將供應者佈建為 FMDN 信標,或是驗證失敗,則會傳回未驗證的錯誤。不過,如果提供者啟用了不必要的追蹤防護功能,且觸發不必要的追蹤防護要求時已開啟略過響鈴驗證標記,則提供者應略過該項檢查。驗證資料仍應由 Seeker 提供,但可以設為任意值。

當鈴聲開始或結束時,系統會傳送通知,如表 6 所示,資料 ID 為 0x05。通知內容的定義如下:

Octet 資料類型 說明
0 uint8 鈴響狀態
  • 0x00:已啟動
  • 0x01:無法啟動或停止 (所有要求的元件都超出範圍)
  • 0x02:已停止 (逾時)
  • 0x03:已停止 (按下按鈕)
  • 0x04:已停止 (GATT 要求)
1 uint8 鈴聲元件 根據要求中定義的內容,指出哪些元件正在響鈴的位元遮罩。
2 - 3 uint16 逾時 以十分之一秒為單位的剩餘響鈴時間。如果裝置已停止響鈴,應傳回 0x0000。

驗證區段的定義為 HMAC-SHA256(ring key, protocol major version number || the nonce used to initiate the ringing command || data ID || data length || additional data || 0x01) 的前 8 個位元組。

如果裝置在收到鈴響或停止鈴響要求時,已處於要求的鈴響狀態,供應器應分別傳送鈴響狀態或 0x00:已啟動或 0x04:已停止 (GATT 要求) 的通知。這項要求會覆寫現有狀態的參數,以便延長鈴響時間。

如果供應器有實體按鈕 (或啟用觸控感應功能),在鈴聲響起時按下該按鈕,應可停止鈴聲功能。

取得訊號發送器的鈴響狀態

為了取得訊號塔的鈴響狀態,Seeker 會對特性執行寫入作業,其中包含表格 4 中資料 ID 為 0x06 的要求。供應者會驗證所提供的一次性驗證金鑰是否與環狀金鑰相符。

如果未將供應器佈建為 FMDN 信標,或是驗證失敗,供應器會傳回未驗證的錯誤。

如果成功,供應器會傳送表格 6 的回應,資料 ID 為 0x06。供應器會以以下方式建構資料區段:

Octet 資料類型 說明
0 uint8 鈴聲元件 根據鈴響要求所定義,正在響鈴的元件。
1 - 2 uint16 逾時 以十分之一秒為單位的剩餘響鈴時間。請注意,如果裝置未響鈴,應傳回 0x0000。

驗證區段的定義為 HMAC-SHA256 (ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01) 的前 8 個位元組。

不必要的追蹤防護模式

不當追蹤防護模式旨在讓任何用戶端都能在沒有伺服器通訊的情況下,找出濫用裝置。根據預設,供應者應依照「ID 輪替」一節的說明輪替所有 ID。 「尋找我的裝置」服務可透過「尋找我的裝置」網路轉送不必要的追蹤防護模式啟用要求。這樣一來,服務會讓供應器暫時使用固定 MAC 位址,讓用戶端偵測裝置,並警告使用者可能遭到不必要的追蹤。

如要啟用或停用信標的不需要追蹤保護模式,Seeker 會對特性執行寫入作業,其中包含分別具有資料 ID 0x07 或 0x08 的資料表 5 要求。

啟用不明追蹤保護模式時

供應器會以以下方式建構資料區段:

Octet 資料類型 說明
0 uint8 控制標記
  • 0x01:略過響鈴驗證。設定後,系統就不會在不需要的追蹤保護模式下驗證鈴聲要求。
如果未設定任何旗標 (位元組全為零),可以完全省略資料區段並傳送空資料區段。
標記只會在無效的追蹤防護模式啟用前生效。

供應商會驗證提供的一次性驗證金鑰是否與不受歡迎的追蹤保護金鑰相符。如果未將供應者佈建為 FMDN 信標,或是驗證失敗,則會傳回未驗證的錯誤。

啟用不必要的追蹤防護模式後,信標應將 MAC 私人位址輪替頻率降至每 24 小時一次。宣傳的暫時 ID 應照常輪替。影格類型應設為 0x41。狀態也會反映在雜湊旗標部分。

停用不必要的追蹤保護模式時

供應商會驗證以下事項:

  • 您提供的一次性驗證金鑰與不必要的追蹤保護金鑰相符。
  • 雜湊的暫時身分鍵與目前的暫時身分鍵相符。

如果供應器未設為 FMDN 信標,或是驗證失敗,供應器會傳回未驗證的錯誤。

停用不必要的追蹤防護模式後,信標應會再次以正常速度輪替 MAC 位址,並與暫時性 ID 輪替同步。幀型應設回 0x40。狀態也會反映在雜湊旗標部分。

如果成功,供應器會傳送表格 6 中的回應,資料 ID 為 0x07 或 0x08。

驗證區段的定義為 HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01) 的前 8 個位元組。

廣告框

佈建完成後,供應者應至少每 2 秒廣播一次 FMDN 影格。如果宣傳快速配對框架,供應商應在一般快速配對廣告中交錯插入 FMDN 框架。舉例來說,每兩秒,供應者應放送七則 Fast Pair 廣告和一則 FMDN 廣告。

FMDN 廣告的導體藍牙傳輸功率應設為至少 0 dBm。

FMDN 框架會攜帶公開金鑰,用於加密任何參與群眾外包網路的支援用戶端所傳送的位置報告。橢圓曲線金鑰有兩種:160 位元金鑰適用於舊版 BLE 4 影格,256 位元金鑰則需要具備擴充廣告功能的 BLE 5。Provider 的實作方式會決定要使用的曲線。

FMDN 框架的結構如下所示。

Octet 說明
0 0x02 長度
1 0x01 旗標資料類型值
2 0x06 旗標資料
3 0x18 或 0x19 長度
4 0x16 服務資料資料類型值
5 0xAA 16 位元服務 UUID
6 0xFE ...
7 0x40 或 0x41 含有不必要追蹤保護模式指示的 FMDN 框架類型
8..27 20 個位元組的暫時 ID
28 雜湊標記

表 8:支援 160 位元曲線的 FMDN 框架。

表 9 列出 256 位元曲線的位元組偏移量和值。

Octet 說明
0 0x02 長度
1 0x01 旗標資料類型值
2 0x06 旗標資料
3 0x24 或 0x25 長度
4 0x16 服務資料資料類型值
5 0xAA 16 位元服務 UUID
6 0xFE ...
7 0x40 或 0x41 含有不必要追蹤保護模式指示的 FMDN 框架類型
8..39 32 位元組暫時 ID
40 雜湊標記

表 9:支援 256 位元曲線的 FMDN 框架。

暫時 ID (EID) 運算

使用 AES-ECB-256 和暫時性 ID 金鑰加密下列資料結構,即可產生隨機值:

Octet 欄位 說明
0 - 10 邊框間距 值 = 0xFF
11 K 輪替週期指數
12 - 15 TS[0]...TS[3] 以 32 位元 big-endian 格式表示的訊號燈時間計數器。清除 K 最低位元。
16 至 26 歲 邊框間距 值 = 0x00
27 K 輪替週期指數
28 - 31 TS[0]...TS[3] 以 32 位元 big-endian 格式表示的訊號燈時間計數器。清除 K 最低位元。

表 10:建立偽隨機數。

這項運算的結果是 256 位元數字,以 r' 表示。

在其他計算中,SECP160R1SECP256R1 會用於橢圓曲線加密編譯作業。請參閱 SEC 2:建議的橢圓曲線網域參數中的曲線定義,其中定義了接下來會參照的 FpnG

r' 現已透過計算 r = r' mod n 投射至有限欄位 Fp。最後,請計算 R = r * G,這是曲線上的一個點,代表所使用的公用金鑰。信標會宣傳 Rx,這是 Rx 座標,也是其暫時 ID。

雜湊旗標

哈希標記欄位的計算方式如下 (位元是從最高位數到最低位數參照):

  • 位元 0-4:保留 (設為零)。
  • 位元 5-6 會指出裝置的電池電量,如下所示:
    • 00:不支援電池電量指示
    • 01:正常電量
    • 10:電量不足
    • 11:電量即將用盡 (需要盡快更換電池)
  • 如果信標處於不必要追蹤保護模式,則位元 7 會設為 1,否則為 0。

為了產生這個位元組的最終值,系統會將這個位元組與 SHA256(r) 的最低有效位元組做 XOR 運算。

請注意,r 應與曲線的大小一致。如果其表示法短於 160 或 256 位元,則應加入零做為最高有效位元;如果其表示法大於 160 或 256 位元,則應截斷最高有效位元。

如果訊號發送器不支援電池電量指示,且未處於不必要的追蹤保護模式,則可從廣告中完全省略這個位元組。

使用 EID 進行加密

如要加密訊息 m,觀看者 (已從信標讀取 Rx) 會執行下列操作:

  1. Fp 中選擇隨機數字 s,如EID 運算一節所定義。
  2. 計算 S = s * G
  3. 在曲線方程式中進行替換,然後從可能的結果中挑選任意 Ry 值,藉此計算 R = (Rx, Ry)
  4. 計算 256 位元 AES 金鑰 k = HKDF-SHA256((s * R)x),其中 (s * R)x 是曲線相乘結果的 x 座標。未指定 Salt。
  5. URxLRx 分別為 Rx 的上位和下位 80 位元,以大端格式表示。以類似的方式,為 S 定義 USxLSx
  6. 計算 nonce = LRx || LSx
  7. 計算 (m’, tag) = AES-EAX-256-ENC(k, nonce, m)
  8. (URx, Sx, m’, tag) 傳送給擁有者,可能會透過不受信任的遠端服務傳送。

解密使用 EID 加密的值

擁有 EIK 和旋轉週期指數的擁有者用戶端會解密訊息,如下所示:

  1. URx 的情況下,取得 URx 所依據的訊號發送器時間計數器值。這項作業可由擁有者的用戶端計算信標時間計數器值的 Rx 值,以便計算最近過去和近期未來的值。
  2. 根據 URx 所依據的訊號發射器時間計數器值,計算 EID 運算一節中定義的 r 預期值。
  3. 計算 R = r * G,並驗證是否與觀測者提供的 URx 值相符。
  4. 在曲線方程式中進行替換,然後從可能的結果中挑選任意 Sy 值,藉此計算 S = (Sx, Sy)
  5. 計算 k = HKDF-SHA256((r * S)x),其中 (r * S)x 是曲線相乘結果的 x 座標。
  6. 計算 nonce = LRx || LSx
  7. 計算 m = AES-EAX-256-DEC(k, nonce, m’, tag)

ID 輪替

廣告 FMDN 影格時,必須使用可解析 (RPA) 或不可解析 (NRPA) 的 BLE 位址。RPA 是 LE Audio (LEA) 裝置的必要條件,也建議用於其他裝置 (不含不使用配對功能的定位器標記)。

快速配對廣告、FMDN 廣告和對應的 BLE 位址應同時輪替顯示。旋轉作業應平均每 1024 秒執行一次。信標開始宣傳新 ID 的確切時間點必須在時間窗口內隨機產生。

建議您將輪替時間設為下一個預期的輪替時間 (如果未套用隨機化),再加上 1 到 204 秒的正隨機時間因子。

當裝置處於不必要的追蹤保護模式時,FMDN 廣告的 BLE 位址應固定,但 FP 不可偵測廣告 (例如快速配對) 的 RPA 必須持續輪替。您可以為不同的通訊協定使用不同的地址。

斷電後的復原

解析暫時性 ID 與廣告時間的時間值密切相關,因此如果發生電力中斷,供應器必須能夠復原時間值。建議供應器至少每天將目前的計時器值寫入非揮發性記憶體一次,並在啟動時檢查 NVM,查看是否有可用來初始化的值。暫時 ID 的解析器會在足夠的時間範圍內實作解析,以便合理調整時鐘漂移和這類電源中斷復原。

由於解決時間窗口有限,供應商仍應盡力減少時鐘誤差。應實作至少一種額外的時鐘同步方法 (廣告不可偵測的 Fast Pair 影格或實作訊息串流)。

快速配對導入指南

本節將說明在支援 FMDN 的供應商上,Fast Pair 實作方式的特殊層面。

定位追蹤器專屬指南

  • 如果提供者已配對,但未在 5 分鐘內佈建 FMDN (或在裝置配對時已套用 OTA 更新,但未佈建 FMDN),則提供者應還原為原廠設定,並清除儲存的帳戶金鑰。
  • 在提供者配對後,除非已佈建 FMDN,或 5 分鐘已過,否則不應變更 MAC 位址。
  • 如果裝置清除暫時身分金鑰,則裝置應執行恢復原廠設定,並清除儲存的帳戶金鑰。
  • 供應器應拒絕一般藍牙配對嘗試,並只接受快速配對。
  • 供應商必須提供機制,讓使用者在不重設裝置的情況下,暫時停止放送廣告 (例如按下按鈕組合)。
  • 在電力耗盡後,裝置應宣傳無法偵測的快速配對資料幀,直到下次呼叫讀取信標參數為止。這樣一來,即使時鐘發生嚴重誤差,Seeker 也能偵測到裝置並同步時鐘。
  • 宣傳無法偵測到的快速配對畫面時,請勿啟用 UI 指示。
  • 在供應者為 FMDN 配置時,不應宣傳可偵測的快速配對畫面。
  • 供應商不應以未經驗證的方式揭露任何識別資訊 (例如姓名或 ID)。

經典藍牙裝置專屬規範

本節將說明支援 FMDN 的傳統藍牙裝置的特殊層面。

已配對裝置的 FMDN 佈建

供應器與 Seeker 配對時,不一定會為 FMDN 進行佈建,但會在之後進行。在這種情況下,供應器可能沒有建立 GATT 連線所需的最新 BLE MAC 位址。提供者必須支援下列至少一種方式,讓 Seeker 在已配對的情況下取得 BLE 位址:

  • 供應器可定期宣傳 Fast Pair 帳戶資料,讓尋找裝置可透過 BLE 掃描找到自己的 BLE 位址。
    這個方法適合未實作訊息串流的供應者。
  • 供應商可以透過傳統藍牙的快速配對訊息串流提供這項資料。
    這種做法適合供應商在透過藍牙連線至 Seeker 時,不宣傳快速配對影格。

支援這兩種方法可提高使用者為 FMDN 佈建裝置的機會。

快速配對訊息串流

供應者可以實作 快速配對訊息串流,並用於通知尋找者有關裝置資訊。實作訊息串流可啟用本節所述的特定功能。

每當訊息串流 RFCOMM 通道建立時,供應器應傳送一次裝置資訊訊息。

韌體版本 (裝置資訊代碼 0x09) 和追蹤功能

當韌體更新為供應器新增 FMDN 支援功能時,已連線的 Seeker 可以通知使用者,並提供設定資訊。否則,使用者必須手動前往藍牙裝置清單,才能啟動 FMDN 佈建作業。

為此,供應器應使用「韌體版本」屬性 (代碼 0x09) 回報代表韌體版本的字串值。此外,提供者應支援協定,讓 Seeker 瞭解因韌體更新而發生的功能變更

Octet 資料類型 說明
0 uint8 裝置資訊事件 0x03
1 uint8 韌體版本 0x09
2 到 3 uint16 額外資料長度 視情況而定
var 位元組陣列 版本字串 視情況而定

表 11:裝置資訊事件:更新的韌體版本。

收到能力更新要求 (0x0601) 後,如果提供者已啟用 FMDN 追蹤功能,則應回應如表 12 所示。

Octet 資料類型 說明
0 uint8 裝置功能同步處理事件 0x06
1 uint8 固定撥號追蹤 0x03
2 到 3 uint16 額外資料長度 0x0007
4 uint8 FMDN 佈建狀態 如果未佈建,則為 0x00;如果由任何帳戶佈建,則為 0x01
5 - 10 人 位元組陣列 裝置目前的 BLE MAC 位址 視情況而定

表 12:裝置功能同步處理事件:新增追蹤功能。

目前的暫時 ID (裝置資訊代碼 0x0B)

在提供者為 FMDN 配置時,可以使用目前的暫時 ID (代碼 0x0B) 回報目前的 EID 和時鐘值,以便在時鐘偏移 (例如電池沒電) 時同步 Seeker。否則,Seeker 會為此目的啟動較昂貴且較不可靠的連線。

Octet 資料類型 說明
0 uint8 裝置資訊事件 0x03
1 uint8 目前的暫時 ID 0x0B
2 到 3 uint16 額外資料長度 0x0018 或 0x0024
4 到 7 位元組陣列 時鐘值 示例:0x13F9EA80
8 到 19 或 31 位元組陣列 目前的 EID 範例:0x1122334455667788990011223344556677889900

表格 13:裝置資訊事件:時鐘同步處理。

恢復原廠設定

適用於支援恢復原廠設定的裝置:如果執行恢復原廠設定,提供者必須停止發送信標,並清除暫時性身分金鑰和所有儲存的帳戶金鑰,包括擁有者的帳戶金鑰。

在恢復原廠設定 (手動或程式輔助) 後,供應商不應立即開始宣傳快速配對功能,以免在使用者刪除裝置後,配對流程立即開始。

防範不必要的追蹤

經認證的 FMDN 裝置也必須符合跨平台規格實作版本中的規定,以便 偵測不必要的位置追蹤器 (DULT)。

為了符合 DULT 規格,請遵守 FMDN 相關指南:

  • 任何 FMDN 相容裝置都必須在附近裝置控制台中註冊,並啟用「尋找我的裝置」功能。
  • 裝置必須實作 DULT 規格實作版本中定義的配件非擁有者服務和特性,包括配件資訊作業和非擁有者控制項
  • 在 DULT 規格中定義的回溯相容性期間,宣傳的框架不會變更,如本文件所定義。
  • 本文件中定義的「不當追蹤保護模式」會對應至 DULT 規格定義的「分離狀態」。
  • 實作配件資訊 Opcode 的指南:
    • Get_Product_Data 應傳回控制台提供的模型 ID,並以零填補以符合 8 個位元組的需求。舉例來說,模型 ID 0xFFFFFF 會以 0x0000000000FFFFFF 的形式傳回。
    • Get_Manufacturer_Name 和 Get_Model_Name 應與控制台中提供的值相符。
    • 如果沒有其他類別更適合裝置類型,Get_Accessory_Category 可以傳回一般「Location Tracker」值。
    • Get_Accessory_Capabilities 必須指出是否支援鈴聲和 BLE 識別碼查詢。
    • Get_Network_ID 應傳回 Google 的 ID (0x02)。
  • 實作 Get_Identifier 指令集的規範:
    • 使用者啟用「identification」模式後,作業應只在 5 分鐘內傳回有效回應,啟用此模式需要同時按下多個按鈕。您應透過視覺或音訊信號,向使用者指出供應商已進入該模式。如要取得認證,你必須提供啟用該模式的特定型號操作說明,並在操作說明更新或修改前至少提前 10 天,將這些資訊提供給 Google。
    • 回應的結構如下:目前暫時性 ID 的前 10 個位元組,接著是 HMAC-SHA256(recovery key, the truncated current ephemeral identifier) 的前 8 個位元組。
  • 透過 NFC 實作 ID 的指南:
    • 使用 find-my.googleapis.com/lookup 做為網址。
    • 做為 e 參數,請使用與 Get_Identifier 相同的回應,並以十六進位編碼。
    • 做為 pid 參數,請使用與 Get_Product_Data 相同的回應,並以十六進位編碼。
  • 裝置必須包含音效產生器,並支援鈴聲功能。根據 DULT 規格,音效產生器必須發出至少 60 分貝峰值音量,符合 ISO 532-1:2017 的定義。
  • 實作 Sound_Start 操作碼的指引:
    • 這項指令應會在所有可用的元件中觸發鈴聲。
    • 應使用支援的最大音量。
    • 建議的鈴響時間為 12 秒。
  • 定位器代碼必須包含一種機制,讓使用者不必將裝置恢復原廠設定,即可暫時停止放送廣告 (例如按下按鈕組合)。
    • 停用操作說明必須記錄在公開的網址中,並在取得認證前至少 10 天,以符合認證規定的方式提供給 Google,且不得對操作說明進行任何更新或修改。
    • 網址應支援本地化。視用戶端而定,語言會以查詢參數 (「hl=en」) 或「accept-language」HTTP 標頭的形式提供。

可切換通訊協定規範

  • 一次只能使用一種通訊協定。請確認裝置上最多只能同時運作一個網路。這項規定有助於確保不同通訊協定之間不會混用機密使用者資料。
  • 建議在裝置中加入硬重設工作流程,讓使用者能夠透過其他網路重新設定裝置。
  • 將裝置更新至網路的程序應以使用者為優先,且各網路之間的程序應一致。使用者必須能夠選擇要使用的網路,且不偏袒任何一個網路。這項流程需要獲得 Google 團隊的核准。

韌體更新

合作夥伴應使用自己的行動或網頁應用程式工作流程,管理 OTA 更新程序和發布作業。

快速配對功能可向使用者傳送通知,告知可用的 OTA 更新。如要使用這項機制:

  • 請在附近裝置控制台更新最新韌體版本。
  • 您必須在鄰近裝置控制台中設定隨附應用程式。應支援韌體更新意圖
  • 供應商應導入 韌體修訂版本 GATT 特性。

為避免追蹤,應限制對韌體修訂版本特性的存取權。Seeker 會先讀取佈建狀態,並提供驗證金鑰 (如本規格所定義),然後再讀取韌體修訂版本。這項操作會透過相同的連線完成。如果嘗試讀取韌體修訂版本,但供應器未綁定,且透過相同連線成功完成驗證作業,供應器應傳回未驗證的錯誤。

相容性

如要使用「尋找我的裝置」網路,必須開啟定位服務和藍牙。需具備行動數據服務或連上網路。適用於 Android 9 以上版本,某些國家/地區僅限符合年齡條件者使用。

變更記錄

FMDN 版本 日期 註解
v1 初始發布 FMDN 規格,供搶先體驗。
v1.1 2023 年 2 月
  • 新增不必要追蹤保護模式的明文指示。
  • 新增選項,可在不需要的追蹤保護模式中略過鈴聲要求的驗證。
v1.2 2023 年 4 月
  • 更新擁有者的 AK 定義。
  • 新增建議,說明如何在定位器標記中復原電力損失。
  • 新增 MAC 位址隨機產生的說明。
  • 在未預期追蹤防護模式下,新增 MAC 位址輪替功能的說明。
  • 新增了關於如何停用定位器代碼的指南。
v1.3 2023 年 12 月
  • 針對定位器標記公開的識別資訊,新增了說明。
  • 新增實作不必要追蹤防範規格的必要條件。
  • 新增可切換通訊協定裝置的規範。