v1.3
「尋找我的裝置」網路 (FMDN) 配件規格定義了用於追蹤藍牙低功耗 (BLE) 裝置的端對端加密方法。本頁說明 FMDN 是快速配對規格的擴充功能。如果供應商的裝置與 FMDN 相容,且願意為這些裝置啟用位置資訊追蹤功能,就應啟用這個擴充功能。
GATT 規格
其他一般屬性 (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 會證明自己瞭解下列一或多個鍵:
帳戶金鑰:16 位元組快速配對帳戶金鑰,如「快速配對」規格所定義。
擁有者帳戶金鑰:當 Seeker 首次存取 Beacon 動作特性時,提供者會選擇其中一個現有帳戶金鑰做為擁有者帳戶金鑰。您必須先將供應器重設為原廠設定,才能變更所選的擁有者帳戶金鑰。當供應商的免費帳戶金鑰插槽用盡時,不得移除擁有者帳戶金鑰。
如果供應商在首次配對時已支援 FMDN,或在首次配對後支援 FMDN,請選擇第一個帳戶金鑰,因為在配對期間讀取佈建狀態時,這是唯一不同的帳戶金鑰。
在配對後 (例如透過韌體更新) 獲得 FMDN 支援的供應商,可以選擇任何現有的帳戶金鑰。假設執行更新的使用者是供應者的目前擁有者,建議您在韌體更新後,選擇用於讀取信標動作屬性中佈建狀態的第一個帳戶金鑰。
暫時身分金鑰 (EIK):執行 FMDN 佈建程序時,Seeker 隨機選取的 32 位元金鑰。這個金鑰用於產生用於端對端加密位置報告的加密金鑰。Seeker 絕不會向後端揭露這項資訊。
復原金鑰:定義為
SHA256(ephemeral identity key || 0x01)
,截斷至前 8 個位元組。金鑰會儲存在後端,如果使用者透過裝置上的按鈕表示同意,Seeker 就能使用這組金鑰 復原 EIK。環狀金鑰:定義為
SHA256(ephemeral identity key || 0x02)
,截斷至前 8 個位元組。這組金鑰會儲存在後端,Seeker 只能用來鈴響裝置。不明追蹤保護金鑰:定義為
SHA256(ephemeral identity key || 0x03)
,截斷至前 8 個位元組。這組金鑰會儲存在後端,Seeker 只能用來啟用不必要的追蹤防護模式。
作業
表 2 至 5 列出寫入特徵的資料格式。本節稍後會詳細討論各項作業。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID |
|
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 | 位元組陣列 | 其他資料 |
|
表 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 |
|
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 | 位元組陣列 | 其他資料 |
|
表 4:響鈴要求。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID |
|
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 | 位元組陣列 | 其他資料 |
|
表 5:不必要的追蹤保護要求。
成功寫入會觸發通知,如表 6 所列。
除了 0x05:鈴聲狀態變更以外,如果通知含有資料 ID,則應在觸發通知的寫入交易完成前傳送,也就是在傳送寫入要求的回應 PDU 之前。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID |
|
1 | uint8 | 資料長度 | 各不相同 |
2 - 9 | 位元組陣列 | 驗證 | 各項作業的詳細說明 |
10 - 變數 | 位元組陣列 | 其他資料 |
|
表 6:Beacon 服務回應。
表 7 列出作業傳回的 GATT 錯誤代碼。
程式碼 | 說明 | 附註 |
---|---|---|
0x80 | 未經驗證 | 驗證失敗 (包括使用舊 Nonce 的情況) 時,系統會在回應寫入要求時傳回此值。 |
0x81 | 無效值 | 如果提供任何無效值,或接收的資料包含非預期的位元組數,系統就會傳回這個錯誤。 |
0x82 | 未取得使用者同意 | 當裝置未處於配對模式時,系統會在回應寫入要求 (含有資料 ID 的 0x04:讀取暫時性身分金鑰,並取得使用者同意聲明) 時傳回此值。 |
表 7:GATT 錯誤代碼。
讀取信標的參數
尋覓者可以對屬性執行寫入作業,該屬性包含表格 2 中資料 ID 為 0x00 的要求,藉此向供應器查詢信標參數。「供應商」會驗證提供的一次性驗證金鑰是否與裝置儲存的任何帳戶金鑰相符。
如果驗證失敗,供應器會傳回未驗證的錯誤。
成功後,提供者會收到資料表 6 的回應 (資料 ID 為 0x00)。供應器會以以下方式建構資料區段:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 校準功率 | 在 0 公尺處收到的校正功率 (值介於 [-100, 20] 之間)。以帶正負號的整數表示,解析度為 1 dBm。 |
1 到 4 人 | uint32 | 時鐘值 | 目前的時鐘值 (以秒為單位) (大端序)。 |
5 | uint8 | 選取曲線 | 用於加密的橢圓曲線:
|
6 | uint8 | 元件 | 可響鈴的元件數量:
|
7 | uint8 | 鈴聲功能 | 支援的選項如下:
|
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 個位元組。
讀取信標的佈建狀態
尋覓者可以對屬性執行寫入作業,藉此向提供者查詢信標的佈建狀態,該屬性包含來自表格 2 的資料 ID 0x01 要求。供應者會驗證提供的一次性驗證金鑰是否與裝置上儲存的任何帳戶金鑰相符。
如果驗證失敗,供應器會傳回未驗證的錯誤。
如果成功,供應器會傳送表格 6 的回應,其中資料 ID 為 0x01。供應器會以以下方式建構資料區段:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 佈建狀態 | 位元遮罩值如下:
|
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 信標,或是變更已佈建提供者的臨時身分識別金鑰,尋找工具會對內含資料表 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 個位元組。
清除暫時身分金鑰
為了取消佈建提供者的信標部分,尋找工具會執行特徵的寫入作業,由表 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 必須將復原金鑰儲存在後端,才能復原明文金鑰,但它不會儲存 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 - 2 | uint16 | 逾時 | 逾時時間 (以十分之一秒為單位)。不得為零,且不得大於 10 分鐘。 提供者會使用這個值確定在將自身設為靜音之前,應響鈴多久。如果裝置的任何元件已在響鈴,則逾時值會覆寫已生效的逾時值。 如果環狀操作設為 0x00,系統會忽略逾時。 |
3 | uint8 | 音量 |
|
收到要求後,供應商會驗證以下事項:
- 提供的一次性驗證金鑰與環形金鑰相符。
- 要求的狀態與可響鈴的元件相符。
如果未將供應者佈建為 FMDN 信標,或是驗證失敗,則會傳回未驗證的錯誤。但是,如果提供者已啟用不必要的追蹤保護,而觸發不想要的追蹤保護要求已開啟略過環形驗證標記,則供應商應略過該檢查。驗證資料仍應由 Seeker 提供,但可以設為任意值。
當鈴聲開始或結束時,系統會傳送通知,如表 6 所示,資料 ID 為 0x05。通知內容的定義如下:
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 鈴響狀態 |
|
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: Started 或 0x04: Stopped (GATT 要求) 的通知。這項要求會覆寫現有狀態的參數,以便延長鈴響時間。
如果供應器有實體按鈕 (或觸控感已啟用),則在發出鈴響時按下該按鈕後,該按鈕應停止響鈴功能。
取得訊號發送器的鈴響狀態
為了取得信標的環形狀態,尋找工具會對特性執行寫入作業,由表 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 | 控制標記 |
標記只會在非必要的追蹤防護模式停用前有效。 |
供應商會驗證提供的一次性驗證金鑰是否與不必要的追蹤保護金鑰相符。如果未將供應者佈建為 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 框架。例如,供應商每兩秒就應宣傳七則快速配對廣告和一則 FMDN 廣告。
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 | 0 倍 | ... |
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 | 0 倍 | ... |
7 | 0x40 或 0x41 | 含有不必要追蹤保護模式指示的 FMDN 框架類型 |
8..39 | 32 位元組暫時 ID | |
40 | 雜湊標記 |
表 9:支援 256 位元曲線的 FMDN 框架。
暫時 ID (EID) 運算
AES-ECB-256 會產生隨機身分金鑰,用於加密下列資料結構:
Octet | 欄位 | 說明 |
---|---|---|
0 至 10 項 | 邊框間距 | 值 = 0xFF |
11 | K | 輪替週期指數 |
12 至 15 | TS[0]...TS[3] | 信標時間計數器,採用 32 位元大端序格式。清除 K 最低位元。 |
16 - 26 歲 | 邊框間距 | 值 = 0x00 |
27 | K | 輪替週期指數 |
28 - 31 | TS[0]...TS[3] | 信標時間計數器,採用 32 位元大端序格式。系統會清除 K 最低位元。 |
表 10:虛擬隨機號碼的結構。
這項運算的結果是 256 位元數字,以 r'
表示。
在其他計算中,SECP160R1
或 SECP256R1
會用於橢圓曲線加密編譯作業。請參閱
「SEC 2:建議的橢圓曲線網域參數」中的曲線定義,這定義了接下來參考的 Fp
、n
和 G
。
系統會計算 r = r' mod n
,藉此將 r'
預測至有限欄位 Fp
。最後,請計算 R = r * G
,這是曲線上的一個點,代表所使用的公用金鑰。信標會宣傳 Rx
,這是 R
的 x
座標,也是其暫時 ID。
雜湊標記
哈希標記欄位的計算方式如下 (位元是從最高位數到最低位數參照):
- 位元 0-4:保留 (設為零)。
- 位元 5-6 會指出裝置的電池電量,如下所示:
- 00:不支援電池電量指示
- 01:正常電量
- 10:電量不足
- 11:電量即將用盡 (需要盡快更換電池)
- 如果信標處於不必要的追蹤保護模式,Bit 7 會設為 1,否則位元 7 會設為 0。
為了產生這個位元組的最終值,會以 SHA256(r)
的最低有效位元組進行 xor 處理。
請注意,r 應與曲線的大小一致。如果其表示法短於 160 或 256 位元,則應加入零做為最高有效位元;如果其表示法大於 160 或 256 位元,則應截斷最高有效位元。
如果訊號發送器不支援電池電量指示,且未處於不必要的追蹤保護模式,則可從廣告中完全省略這個位元組。
使用 EID 進行加密
如要加密訊息 m
,探測器 (已從信標讀取 Rx
) 會執行下列操作:
- 在
Fp
中選擇隨機數字s
,如 EID 運算一節所定義。 - 計算
S = s * G
。 - 在曲線方程式中進行替換,然後從可能的結果中挑選任意
Ry
值,藉此計算R = (Rx, Ry)
。 - 計算 256 位元 AES 金鑰
k = HKDF-SHA256((s * R)x)
,其中(s * R)x
是曲線相乘結果的x
座標。未指定 Salt。 - 讓
URx
和LRx
分別為Rx
的上位和下位 80 位元,以大端格式表示。以類似的方式,為S
定義USx
和LSx
。 - 運算量:
nonce = LRx || LSx
。 - 計算
(m’, tag) = AES-EAX-256-ENC(k, nonce, m)
。 - 將
(URx, Sx, m’, tag)
傳送給擁有者,可能會透過不受信任的遠端服務傳送。
解密使用 EID 加密的值
擁有者的用戶端在 EIK 中擁有 EIK 和輪替週期指數時,會將訊息解密,如下所示:
- 提供
URx
的信標時間計數器值,後者是以URx
為基礎。這項作業可由擁有者的用戶端計算信標時間計數器值的Rx
值,以便計算最近過去和近期未來的值。 - 根據
URx
所依據的訊號發射器時間計數器值,計算 EID 運算一節中定義的r
預期值。 - 計算
R = r * G
,並驗證是否與觀測者提供的URx
值相符。 - 透過替換曲線方程式來計算
S = (Sx, Sy)
,並從可能的結果中選出任意Sy
值。 - 計算
k = HKDF-SHA256((r * S)x)
,其中(r * S)x
是曲線相乘結果的x
座標。 - 計算
nonce = LRx || LSx
。 - 運算量:
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 的解析器會在足夠的時間間隔內實作解析,以便合理調整時鐘漂移和這類電源中斷復原。
由於解決時間窗口有限,供應商仍應盡力減少時鐘誤差。至少應實作一個額外的時鐘同步處理方法 (廣告無法偵測的快速配對頁框或實作訊息串流)。
快速配對導入指南
本節說明在支援 FMDN 的供應商上,快速配對實作的特殊層面。
搜尋器標記相關規定
- 如果提供者已配對,但 FMDN 未在 5 分鐘內佈建 (或在裝置配對但尚未佈建 FMDN 的情況下套用 OTA 更新),供應商應還原至原廠設定並清除已儲存的帳戶金鑰。
- 與提供者配對後,在佈建 FMDN 或通過 5 分鐘之後,提供者不應變更其 MAC 位址。
- 如果裝置清除暫時身分金鑰,則裝置應執行恢復原廠設定,並清除儲存的帳戶金鑰。
- 供應器應拒絕一般藍牙配對嘗試,並只接受 Fast Pair 配對。
- 提供者必須提供能夠在裝置恢復原廠設定的情況下暫時停止廣告的機制 (例如按下組合按鈕)。
- 在電力耗盡後,裝置應宣傳無法偵測的快速配對資料幀,直到下次呼叫讀取信標參數為止。這樣一來,即使時鐘發生大幅偏移,Seeker 也能偵測到裝置並同步時鐘。
- 宣傳不供偵測的快速配對影格時,不應啟用 UI 標示。
- 為 FMDN 佈建供應商時,不應宣傳可偵測的快速配對影格。
- 供應商不應以未經驗證的方式揭露任何識別資訊 (例如姓名或 ID)。
傳統藍牙裝置專屬指南
本節將說明支援 FMDN 的傳統藍牙裝置的特殊層面。
已配對裝置的 FMDN 佈建
供應器與 Seeker 配對時,不一定會為 FMDN 進行佈建,但會在之後進行。在這種情況下,供應器可能沒有建立 GATT 連線所需的最新 BLE MAC 位址。提供者必須支援下列至少一種方式,讓 Seeker 在已配對的情況下取得 BLE 位址:
- 供應器可定期宣傳快速配對帳戶資料,讓尋找裝置可透過 BLE 掃描找到自己的 BLE 位址。
這個方法適合未實作訊息串流的供應者。 - 供應商可透過快速配對訊息串流透過傳統藍牙提供這項資料。
這個方法適合透過藍牙連線至尋求裝置時,未通告快速配對影格的供應商。
支援這兩種方法可提高使用者為 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 和時鐘值,以便在時鐘偏移 (例如因為電池耗盡) 時同步處理搜尋器。否則,尋找者會為此目的啟動更昂貴且較不穩定的連線。
Octet | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 裝置資訊事件 | 0x03 |
1 | uint8 | 目前的暫時 ID | 0x0B |
2 到 3 | uint16 | 額外資料長度 | 0x0018 或 0x0024 |
4 - 7 | 位元組陣列 | 時鐘值 | 範例:0x13F9EA80 |
8 - 19 或 31 | 位元組陣列 | 目前的 EID | 範例:0x1122334455667788990011223344556677889900 |
表 13:裝置資訊事件:時鐘同步。
恢復原廠設定
支援恢復原廠設定的裝置:如果執行恢復原廠設定,供應商必須停止信標,並抹除臨時身分金鑰和所有已儲存的帳戶金鑰,包括擁有者的帳戶金鑰。
在恢復原廠設定 (手動或程式輔助) 後,供應器不應立即開始宣傳快速配對功能,以免在使用者刪除裝置後,配對流程立即開始。
不必要的追蹤機制
經認證的 FMDN 裝置也必須符合跨平台規格實作版本的規定,以便 偵測不必要的位置追蹤器 (DULT)。
FMDN 專屬相關指南,以符合 DULT 規格:
- 所有與 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 相同的回應,並以十六進位編碼。
- 使用
- 實作 Sound_Start 運算程式碼的規範:
- 這項指令應會在所有可用的元件中觸發鈴聲。
- 應使用支援的最大磁碟區。
- 建議的響鈴時間長度為 12 秒。
- 定位器代碼必須包含一種機制,讓使用者不必將裝置恢復原廠設定,即可暫時停止放送廣告 (例如按下按鈕組合)。
- 停用說明必須記錄在公開的網址中,並在取得認證前至少 10 天,以符合認證規定的形式提供給 Google,且不得對說明進行任何更新或修改。
- 網址應支援本地化。視用戶端而定,語言會以查詢參數 (「hl=en」) 或「accept-language」HTTP 標頭的形式提供。
可切換通訊協定規範
- 一次只能使用一種通訊協定。請確認裝置上不會同時運作多個網路。這項規定有助於確保不同通訊協定之間不會混用機密使用者資料。
- 建議在裝置中加入硬重設工作流程,讓使用者能夠透過其他網路重新設定裝置。
- 將裝置更新至網路的程序應以使用者為優先,且各網路之間的程序應一致。使用者必須能夠選擇要使用的網路,且不偏袒任何一個網路。這項流程需要獲得 Google 團隊的核准。
韌體更新
OTA 更新的程序和發布作業應由合作夥伴使用自己的行動應用程式或網頁應用程式工作流程來管理。
相容性
如要使用「尋找我的裝置」網路,必須開啟定位服務和藍牙。需具備行動數據服務或連上網路。適用於 Android 9 以上版本和特定國家/地區,且適用於符合年齡資格的使用者。
變更記錄
FMDN 版本 | 日期 | 註解 |
---|---|---|
v1 | 初始發布 FMDN 規格,供搶先體驗。 | |
v1.1 | 2023 年 2 月 |
|
v1.2 | 2023 年 4 月 |
|
v1.3 | 2023 年 12 月 |
|