v1.3
「尋找中心」網路 (FHN) 配件規格定義了端對端加密方法,用於追蹤發出信號的藍牙低功耗 (BLE) 裝置。本頁面說明 FHN 如何做為快速配對規格的擴充功能。如果供應商的裝置與 FHN 相容,且願意為這些裝置啟用位置追蹤功能,就應啟用這項擴充功能。
GATT 規格
應將額外的通用屬性 (GATT) 特徵新增至快速配對服務,並採用下列語意:
快速配對服務特徵 | 已加密 | 權限 | UUID |
---|---|---|---|
信標動作 | 否 | 讀取、寫入及通知 | FE2C1238-8366-4814-8EB0-01DE32100BEA |
表 1:FHN 的快速配對服務特徵。
驗證
這項擴充功能所需的作業會以寫入作業的形式執行,並透過驗證碼-回應機制確保安全。執行任何作業前,Seeker 應先從表 1 中的特徵執行讀取作業,產生下列格式的緩衝區:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 通訊協定主要版本號碼 | 0x01 |
1 - 8 | 位元組陣列 | 一次性隨機隨機數 | 因人而異 |
每次讀取作業都應產生不同的隨機數,且單一隨機數只能用於單一作業。即使作業失敗,也必須使隨機數失效。
然後,搜尋者會計算一次性驗證金鑰,用於後續的寫入要求。驗證金鑰的計算方式如表 2 至表 5 所示。視要求執行的作業而定,Seeker 會證明自己知道下列一或多個金鑰:
帳戶金鑰:16 位元組的快速配對帳戶金鑰,如快速配對規格中所定義。
擁有者帳戶金鑰:當搜尋者首次存取 Beacon Actions 特徵時,供應商會選擇現有的其中一個帳戶金鑰做為擁有者帳戶金鑰。選取的擁有者帳戶金鑰無法變更,直到 Provider 恢復原廠設定為止。當免費帳戶金鑰配額用盡時,供應商不得移除擁有者帳戶金鑰。
首次配對時已支援 FHN 的供應商 (或在恢復原廠設定後配對時支援 FHN),請選擇第一個帳戶金鑰,因為當 Seeker 在配對期間讀取佈建狀態時,只有這個帳戶金鑰存在。
如果供應商在配對後才取得 FHN 支援 (例如透過韌體更新),可以選擇任何現有的帳戶金鑰。假設執行更新的使用者是 Provider 的現任擁有者,那麼在韌體更新後,選擇用來從信號動作特徵讀取佈建狀態的第一個帳戶金鑰,是合理的做法。
臨時身分識別金鑰 (EIK):這是 Seeker 在執行 FHN 佈建程序時隨機選擇的 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 所示。本節稍後會詳細說明各項作業。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID |
|
1 | uint8 | 資料長度 | 因人而異 |
2 - 9 | 位元組陣列 | 一次性驗證金鑰 | 前 8 個位元組的
HMAC-SHA256(account key, protocol major version number || the last nonce
read from the characteristic || data ID || data length || additional data) |
10 - var | 位元組陣列 <0x0A | 其他資料 <0x |
|
表 2:信標佈建要求。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID | 0x04:徵得使用者同意後讀取暫時身分識別金鑰 |
1 | uint8 | 資料長度 | 0x08 |
2 - 9 | 位元組陣列 | 一次性驗證金鑰 | 前 8 個位元組的
HMAC-SHA256(recovery key, protocol major version number || the last nonce
read from the characteristic || data ID || data length) |
表 3:信標佈建金鑰復原要求。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID |
|
1 | uint8 | 資料長度 | 因人而異 |
2 - 9 | 位元組陣列 | 一次性驗證金鑰 | 前 8 個位元組的
HMAC-SHA256(ring key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data) |
10 - var | 位元組陣列 | 其他資料 |
|
表 4:鈴響要求。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID |
|
1 | uint8 | 資料長度 | 因人而異 |
2 - 9 | 位元組陣列 | 一次性驗證金鑰 | 前 8 個位元組的
HMAC-SHA256(unwanted tracking protection key, protocol major version number
|| the last nonce read from the characteristic || data ID || data length ||
additional data) |
10 - var | 位元組陣列 | 其他資料 |
|
表 5:不當追蹤保護要求。
成功寫入會觸發通知,如表 6 所示。
如果通知的資料 ID 不是 0x05:鈴聲狀態變更,就應在觸發通知的寫入交易完成前傳送,也就是在傳送寫入要求的回應 PDU 前傳送。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 <0x0 | uint8 | 資料 ID <0x |
|
1 | uint8 | 資料長度 | 因人而異 |
2 - 9 | 位元組陣列 | 驗證 | 詳細作業資訊 |
10 - var < | 位元組陣列 <0x0A | 其他資料 <0x |
|
表 6:信標服務回應。
表 7 列出作業可能傳回的 GATT 錯誤代碼。
程式碼 | 說明 | 附註 |
---|---|---|
0x80 | 未經驗證 | 驗證失敗時 (包括使用舊隨機數的情況),系統會傳回這個錯誤代碼,以回應寫入要求。 |
0x81 | 無效值 | 如果提供的值無效,或收到的資料位元組數與預期不符,就會傳回這個錯誤。 |
0x82 | 未提供使用者同意聲明 | 如果裝置未處於配對模式,系統就會在回應資料 ID 為 0x04:在取得使用者同意聲明後讀取臨時身分識別金鑰的寫入要求時,傳回這項錯誤。 |
表 7:GATT 錯誤代碼。
讀取信號的參數
Seeker 可以對特徵執行寫入作業,向 Provider 查詢信標的參數。該特徵包含表 2 中的要求,以及資料 ID 0x00。供應商會驗證提供的一次性驗證金鑰,是否與裝置上儲存的任何帳戶金鑰相符。
如果驗證失敗,Provider 會傳回未經驗證的錯誤。
成功時,供應商會透過表 6 的回應通知,並提供資料 ID 0x00。供應商會依下列方式建構資料區隔:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 校正後的功率 | 在 0 公尺處收到的校正功率 (值介於 [-100, 20] 範圍內)。以帶正負號的整數表示,解析度為 1 dBm。 |
1 到 4 人 | uint32 | 時鐘值 | 目前的時鐘值 (以秒為單位,大端序)。 |
5 | uint8 | 選取曲線 | 用於加密的橢圓曲線:
|
6 <0x0 | uint8 | 元件 <0x0 | 可發出鈴聲的元件數量:
|
7 <0x0 | 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 個位元組。
讀取信標的佈建狀態
Seeker 可以對特徵執行寫入作業,向 Provider 查詢信標的佈建狀態。這項特徵包含表 2 中的要求,以及資料 ID 0x01。供應商會驗證提供的一次性驗證金鑰是否與裝置上儲存的任何帳戶金鑰相符。
如果驗證失敗,Provider 會傳回未經驗證的錯誤。
成功時,供應商會傳送表 6 中的回應,並提供資料 ID 0x01。供應商會依下列方式建構資料區隔:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 <0x0 | uint8 | 佈建狀態 | 具有下列值的位元遮罩:
|
1 - 20 或 32 | 位元組陣列 | 目前的暫時性 ID | 20 或 32 個位元組 (視使用的加密方法而定),表示信標目前播送的暫時性 ID (如果已為裝置設定)。 |
驗證區段定義為 HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || additional data || 0x01)
的前 8 個位元組。
設定暫時性身分識別金鑰
如要將未佈建的供應商佈建為 FHN 信號,或變更已佈建供應商的暫時性身分識別金鑰,搜尋者會對特徵執行寫入作業,其中包含表 2 的要求和資料 ID 0x02。供應商會驗證下列事項:
- 提供的一次性驗證金鑰與擁有者帳戶金鑰相符。
- 如果提供暫時性身分識別金鑰的雜湊值,雜湊的暫時性身分識別金鑰會與目前的暫時性身分識別金鑰相符。
- 如果未提供暫時性身分識別金鑰的雜湊值,請確認供應商尚未佈建為 FHN 信號。
如果驗證失敗,Provider 會傳回未經驗證的錯誤。
如果成功,系統會使用相符的帳戶金鑰,透過 AES-ECB-128 解密,還原暫時性身分識別金鑰。金鑰應保留在裝置上,且從該時間點起,供應商應開始放送 FHN 影格。藍牙連線終止後,新的暫時性身分識別金鑰會立即生效。提供者會傳送表 6 中的回應,並附上資料 ID 0x02。
驗證區段定義為 HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || 0x01)
的前 8 個位元組。
清除臨時身分識別金鑰
如要取消佈建 Provider 的信標部分,Seeker 會對特徵執行寫入作業,其中包含表 2 的要求和資料 ID 0x03。供應商會驗證下列事項:
- 提供的一次性驗證金鑰與擁有者帳戶金鑰相符。
- 雜湊處理過的臨時身分識別金鑰與目前的臨時身分識別金鑰相符。
如果供應商未佈建為 FHN 信號,或驗證失敗,系統會傳回未經驗證的錯誤。
成功後,供應商會忘記金鑰並停止放送 FHN 影格。
供應商會傳送表 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 會對特徵執行寫入作業,其中包含資料 ID 為 0x04 的資料表 3 要求。供應商應確認:
- 雜湊備援金鑰與預期備援金鑰相符。
- 裝置處於 EIK 復原模式。
如果驗證失敗,Provider 會傳回未經驗證的錯誤。
如果裝置未處於配對模式,Provider 會傳回「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 個位元組。
響鈴操作
Seeker 可以對特徵執行寫入作業,要求 Provider 播放音效,這項作業包含表 4 中的要求,以及資料 ID 0x05。供應商會依下列方式建構資料區隔:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 <0x0 | uint8 | 響鈴操作 | 具有下列值的位元遮罩:
|
1 - 2 | uint16 | 逾時 <0x | 逾時時間 (以十分之一秒為單位)。不得為零,且不得大於 10 分鐘的等值。 供應商會使用這個值,判斷鈴聲應響多久才靜音。如果裝置的任何元件已在響鈴,逾時設定會覆寫現有的設定。 如果鈴響操作設為 0x00,系統會忽略逾時。 |
3 <0x0 | uint8 | 音量 <0x |
|
收到要求後,供應商會驗證下列事項:
- 提供的一次性驗證金鑰與智慧指環金鑰相符。
- 要求的狀態與可響鈴的元件相符。
如果供應商未佈建為 FHN 信號,或驗證失敗,系統會傳回未經驗證的錯誤。不過,如果供應商啟用了不必要的追蹤保護功能,且觸發不必要追蹤保護功能的要求已開啟略過鈴聲驗證旗標,供應商應略過該檢查。Seeker 仍須提供驗證資料,但可設為任意值。
鈴聲開始或停止時,系統會傳送通知,如表 6 所示,資料 ID 為 0x05。通知內容的定義如下:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 <0x0 | 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:已開始或 0x04:已停止 (GATT 要求)。這項要求會覆寫現有狀態的參數,因此可以延長鈴響時間。
如果 Provider 有實體按鈕 (或已啟用觸控感應),按下按鈕應會停止鈴聲功能 (如果鈴聲正在響起)。
取得信標的鈴響狀態
如要取得信標的鈴響狀態,Seeker 會對特徵執行寫入作業,其中包含資料 ID 為 0x06 的表 4 要求。供應商會驗證提供的一次性驗證金鑰是否與鈴聲金鑰相符。
如果供應商未佈建為 FHN 信號,或驗證失敗,供應商會傳回未經驗證的錯誤。
成功時,供應商會透過表 6 的回應通知,資料 ID 為 0x06。供應商會依下列方式建構資料區隔:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
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 位址,讓用戶端偵測到裝置,並警告使用者可能遭到追蹤。
如要啟用或停用信標的不必要追蹤防護模式,搜尋者會對特徵執行寫入作業,其中包含來自表 5 的要求,以及資料 ID 0x07 或 0x08。
啟用不明追蹤器防護模式時
供應商會依下列方式建構資料區隔:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 <0x0 | uint8 | 控制項旗標 < |
這些標記只會在停用不當追蹤防護模式前生效。 |
供應商會驗證提供的一次性驗證金鑰是否與不當追蹤防護金鑰相符。如果供應商未佈建為 FHN 信號,或驗證失敗,系統會傳回未經驗證的錯誤。
如果啟用了不必要的追蹤保護模式,信標應將 MAC 私人位址輪替頻率降低至每 24 小時一次。廣告的臨時 ID 應照常輪替。影格類型應設為 0x41。狀態也會反映在「雜湊旗標」部分。
停用擾人追蹤保護模式時
供應商會驗證下列事項:
- 您提供的一次性驗證金鑰與惡意追蹤防護金鑰相符。
- 雜湊處理過的臨時身分識別金鑰與目前的臨時身分識別金鑰相符。
如果供應商未佈建為 FHN 信號,或驗證失敗,供應商會傳回未經驗證的錯誤。
停用不必要的追蹤保護模式後,信標應會再次以正常速率輪替 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 秒播送一次 FHN 影格。如果放送「快速配對」框架,供應商應在一般「快速配對」廣告中穿插 FHN 框架。舉例來說,供應商每兩秒應播送七則快速配對廣告和一則 FHN 廣告。
FHN 廣告的藍牙傳輸功率應設為至少 0 dBm。
FHN 框架會攜帶公開金鑰,供任何支援的用戶端加密位置資訊報表,並提供給群眾外包網路。系統提供兩種橢圓曲線金鑰:適用於舊版 BLE 4 訊框的 160 位元金鑰,以及需要 BLE 5 和擴充廣告功能的 256 位元金鑰。Provider 的實作方式會決定使用的曲線。
FHN 影格的結構如下。
八位元 | 值 | 說明 |
---|---|---|
0 | 0x02 | 長度 |
1 | 0x01 | 旗標資料類型值 |
2 | 0x06 | 旗標資料 |
3 | 0x18 或 0x19 | 長度 |
4 | 0x16 | 服務資料資料類型值 |
5 | 0xAA | 16 位元服務 UUID |
6 | 0xFE | ... |
7 | 0x40 或 0x41 | FHN 影格類型,並顯示惡意追蹤保護模式 |
8..27 | 20 位元組的臨時 ID | |
28 | 雜湊標記 |
表 8:支援 160 位元曲線的 FHN 影格。
表 9 顯示 256 位元曲線的位元組偏移和值。
八位元 | 值 | 說明 |
---|---|---|
0 | 0x02 | 長度 |
1 | 0x01 | 旗標資料類型值 |
2 | 0x06 | 旗標資料 |
3 | 0x24 或 0x25 | 長度 |
4 | 0x16 | 服務資料資料類型值 |
5 | 0xAA | 16 位元服務 UUID |
6 | 0xFE | ... |
7 | 0x40 或 0x41 | FHN 影格類型,並顯示惡意追蹤保護模式 |
8..39 | 32 位元組的暫時性 ID | |
40 | 雜湊標記 |
表 9:支援 256 位元曲線的 FHN 框架。
計算臨時 ID (EID)
系統會使用暫時性身分識別金鑰,透過 AES-ECB-256 加密下列資料結構,藉此產生隨機值:
八位元 | 欄位 | 說明 |
---|---|---|
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: Recommended Elliptic Curve Domain Parameters」
中的曲線定義,其中定義了接下來會參照的 Fp
、n
和 G
。
系統現在會計算 r = r' mod n
,並將結果預測至有限欄位 Fp
。
r'
最後,計算 R = r * G
,這是代表所用公開金鑰的曲線上的點。信標會放送 Rx
,也就是 R
的 x
座標,做為臨時 ID。
雜湊旗標
雜湊旗標欄位的計算方式如下 (位元是從最高有效位元到最低有效位元):
- 位元 0 到 4:保留 (設為零)。
- 位元 5 至 6 表示裝置的電池電量,如下所示:
- 00:不支援電池電量指示
- 01:電池電量正常
- 10:電量不足
- 11:電量極低 (請盡快更換電池)
- 如果信標處於垃圾追蹤保護模式,位元 7 會設為 1,否則為 0。
如要產生這個位元組的最終值,請將其與 SHA256(r)
的最低有效位元組進行互斥或運算。
請注意,r 應與曲線的大小對齊。如果表示法短於 160 或 256 位元,請新增零做為最高有效位元;如果表示法長於 160 或 256 位元,則應截斷最高有效位元。
如果信標不支援電池電量指標,且不處於不必要的追蹤保護模式,則允許從廣告中完全省略這個位元組。
使用 EID 加密
如要加密訊息 m
,目擊者 (已從信標讀取 Rx
) 必須執行下列操作:
- 如「EID 計算」一節所述,在
Fp
中選擇隨機數字s
。 - 運算
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 和輪替週期指數的擁有者用戶端會解密訊息,方法如下:
- 取得
URx
所依據的信號時間計數器值。URx
這項作業可由擁有者的用戶端運算Rx
值,以取得近期和不久後信號時間計數器值。 - 根據
URx
依據的信標時間計數器值,計算r
的預期值,如「EID 計算」一節所述。 - 計算
R = r * G
,並驗證是否與檢舉人提供的URx
值相符。 - 在曲線方程式中代入值,並從可能的結果中任意挑選
Sy
值,即可計算S = (Sx, Sy)
。 - 計算
k = HKDF-SHA256((r * S)x)
,其中(r * S)x
是曲線乘法結果的x
座標。 - 運算
nonce = LRx || LSx
。 - 運算
m = AES-EAX-256-DEC(k, nonce, m’, tag)
。
ID 輪替
放送 FHN 影格時,必須使用可解析 (RPA) 或不可解析 (NRPA) 的 BLE 位址。LE Audio (LEA) 裝置必須使用 RPA,其他裝置則建議使用 RPA,但未使用連結的定位器標籤除外。
快速配對廣告、FHN 廣告和相應的 BLE 位址應同時輪替。平均每 1024 秒輪替一次。信號開始放送新 ID 的確切時間點必須隨機產生。
如要隨機設定輪替時間,建議將輪替時間設為下一個預期輪替時間 (如果未套用隨機設定),再加上 1 到 204 秒的隨機時間係數。
裝置處於不當追蹤防護模式時,FHN 廣告的 BLE 位址應為固定,但 FP 無法探索廣告 (例如快速配對) 的 RPA 必須持續輪替。不同通訊協定可使用不同地址。
從斷電狀態復原
解析暫時性 ID 與廣告放送時的時鐘值密切相關,因此如果電力中斷,供應商必須能夠復原時鐘值。建議供應商每天至少將目前的時鐘值寫入非揮發性記憶體一次,並在啟動時檢查 NVM,看看是否有可供初始化的值。臨時 ID 的解析器會在一段時間內執行解析作業,這段時間足以容許合理的時鐘偏移,以及這類電力中斷復原作業。
供應商仍應盡一切努力減少時鐘偏移,因為解決時間範圍有限。至少應實作一種額外的時鐘同步方法 (廣告無法探索的快速配對框架或實作訊息串流)。
快速配對實作指南
本節說明支援 FHN 的供應商在實作快速配對時,需要注意的特殊事項。
定位追蹤器專屬規範
- 如果供應商已配對,但 FHN 未在 5 分鐘內完成佈建 (或裝置配對但未完成 FHN 佈建時套用了 OTA 更新),供應商應還原為原廠設定,並清除儲存的帳戶金鑰。
- 配對後,供應商的 MAC 位址在 FHN 佈建完成前或 5 分鐘內,都不應變更。
- 如果從裝置清除臨時身分識別金鑰,裝置應會恢復原廠設定,並清除儲存的帳戶金鑰。
- 供應商應拒絕一般的藍牙配對嘗試,只接受快速配對。
- 供應商必須提供機制,讓使用者暫時停止顯示廣告,不必將裝置恢復原廠設定 (例如按下按鈕組合)。
- 電力中斷後,裝置應會發布無法偵測的快速配對框架,直到下次叫用「讀取信標參數」為止。即使發生重大時脈偏移,這項功能也能讓 Seeker 偵測到裝置並同步時脈。
- 放送無法探索的快速配對框架時,不應啟用 UI 指示。
- 當供應商為 FHN 佈建時,不應宣傳可探索的「快速配對」框架。
- 供應商不應以未經驗證的方式公開任何識別資訊 (例如名稱或 ID)。
傳統藍牙裝置專屬規範
本節說明支援 FHN 的傳統藍牙裝置的特殊層面。
為已配對的裝置佈建 FHN
與 Seeker 配對時,Provider 不一定會佈建 FHN,但過一段時間後就會。在這種情況下,供應商可能沒有建立 GATT 連線所需的最新 BLE MAC 位址。供應商必須支援下列至少一種方式,讓搜尋者在配對後取得 BLE 位址:
- 供應商可以定期放送快速配對帳戶資料,讓搜尋器透過 BLE 掃描找到 BLE 位址。
如果供應商未實作訊息串流,就適合採用這種做法。 - 供應商可以透過傳統藍牙的快速配對訊息串流提供這項資料。
如果供應商在透過藍牙連線至搜尋器時,不會放送快速配對框架,就適合採用這種做法。
同時支援這兩種方法,可提高使用者為 FHN 佈建裝置的機會。
快速配對訊息串流
供應商可以實作快速配對訊息串流,並用來通知搜尋者裝置資訊。導入訊息串流可啟用本節所述的特定功能。
每次建立訊息串流 RFCOMM 管道時,供應商都應傳送裝置資訊訊息。
韌體版本 (裝置資訊代碼 0x09) 和追蹤功能
韌體更新為 Provider 新增 FHN 支援時,連線的 Seeker 可以通知使用者,並提供佈建選項。否則,使用者必須手動前往藍牙裝置清單,才能啟動 FHN 佈建程序。
如要允許這項操作,供應商應使用韌體版本屬性 (代碼 0x09) 回報代表韌體版本的字串值。此外,供應商應支援相關通訊協定,讓搜尋者瞭解韌體更新造成的功能變更。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 裝置資訊事件 | 0x03 |
1 | uint8 | 韌體版本 | 0x09 |
2 至 3 | uint16 | 額外資料長度 | 因人而異 |
var | 位元組陣列 | 版本字串 | 因人而異 |
表 11:裝置資訊事件:更新的韌體版本。
收到功能更新要求 (0x0601) 後,如果供應商已啟用 FHN 追蹤支援功能,應如表 12 所示回應。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 裝置功能同步事件 | 0x06 |
1 | uint8 | FHN 追蹤 | 0x03 |
2 至 3 | uint16 | 額外資料長度 | 0x0007 |
4 | uint8 | FHN 佈建狀態 | 如果未佈建,則為 0x00;如果由任何帳戶佈建,則為 0x01 |
5 - 10 人 | 位元組陣列 | 裝置目前的 BLE MAC 位址 | 因人而異 |
表 12:裝置功能同步事件:新增追蹤功能。
目前的暫時性 ID (裝置資訊代碼 0x0B)
當供應商佈建 FHN 時,可以使用目前的暫時性 ID (代碼 0x0B) 回報目前的 EID 和時鐘值,以便在時鐘漂移時 (例如電池耗盡) 同步處理搜尋器。否則,Seeker 會啟動費用較高且較不可靠的連線。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 裝置資訊事件 | 0x03 |
1 | uint8 | 目前的暫時性 ID | 0x0B |
2 至 3 | uint16 | 額外資料長度 | 0x0018 或 0x0024 |
4 - 7 | 位元組陣列 | 時鐘值 | 範例:0x13F9EA80 |
8 - 19 或 31 | 位元組陣列 | 目前的 EID | 範例: 0x1122334455667788990011223344556677889900 |
表 13:裝置資訊事件:時鐘同步。
恢復原廠設定
對於支援恢復原廠設定的裝置:如果執行恢復原廠設定,供應商必須停止發出信號,並清除臨時身分識別金鑰和所有儲存的帳戶金鑰,包括擁有者的帳戶金鑰。
恢復原廠設定後 (手動或透過程式),供應商不應立即開始宣傳快速配對,以免使用者刪除裝置後,配對流程隨即啟動。
防範擾人追蹤
通過認證的 FHN 裝置也必須符合「 偵測不當位置追蹤器」(DULT) 跨平台規格的實作版本要求。
如要遵守 DULT 規格,請參閱 FHN 相關指南:
- 所有相容於 FHN 的裝置都必須在 Nearby Device Console 中註冊, 並啟用「尋找中樞裝置」功能。
- 裝置必須實作 DULT 規格實作版本中定義的配件非擁有者服務和特徵,包括「配件資訊」作業和「非擁有者控制項」。
- 在 DULT 規格定義的回溯相容期內,本文件中定義的廣告影格不會有任何變更。
- 本文件定義的「不必要的追蹤保護模式」對應至 DULT 規格定義的「分離狀態」。
- 實作「配件資訊」作業碼的指南:
- Get_Product_Data 應傳回控制台提供的模型 ID,並以零填補,符合 8 位元組需求。舉例來說,模型 ID 0xFFFFFF 會以 0x0000000000FFFFFF 形式傳回。
- Get_Manufacturer_Name 和 Get_Model_Name 應與控制台中提供的值相符。
- 如果沒有其他更適合裝置類型的類別,Get_Accessory_Category 可以傳回一般「Location Tracker」值。
- Get_Accessory_Capabilities 必須指出支援鈴聲功能和 BLE ID 查詢。
- Get_Network_ID 應傳回 Google 的 ID (0x02)。
- 實作 Get_Identifier 不公開運算碼的規範:
- 使用者啟動「識別」模式 (需要按鈕組合) 後,這項作業只會在 5 分鐘內傳回有效回應。視覺或音訊信號應向使用者指出供應商已進入該模式。如要取得認證,您必須向 Google 提供啟用該模式的機型專屬指示,且至少須在更新或修改指示的 10 天前提供。
- 回應的建構方式如下:目前暫時性 ID 的前 10 個位元組,後面接著
HMAC-SHA256(recovery key, the truncated current ephemeral identifier)
的前 8 個位元組。
- 透過 NFC 實作 ID 的指南:
- 請使用
find-my.googleapis.com/lookup
做為網址。 - 以
e
參數的形式,使用為「Get_Identifier」Get_Identifier建構的相同回應 (以十六進位編碼)。 - 請使用與 Get_Product_Data 相同的建構回應 (以十六進位編碼),做為
pid
參數。
- 請使用
- 裝置必須包含聲音製造器,並支援鈴聲功能。根據 DULT 規格,聲音製造者必須發出音量至少 60 Phon 的聲音,如 ISO 532-1:2017 所定義。
- 實作 Sound_Start Opcode 的指南:
- 這項指令應會觸發所有可用元件發出鈴聲。
- 請使用支援的最大音量。
- 建議的鈴聲時間長度為 12 秒。
- 定位器必須提供機制,讓使用者暫時停止顯示廣告,而不必將裝置恢復原廠設定 (例如按下特定按鈕組合)。
- 停用指示必須記錄在公開網址中,並在認證前提供給 Google,且至少在指示更新或修改前 10 天提供。
- 網址應支援本地化。視用戶端而定,系統會以查詢參數 (「hl=en」) 或「accept-language」HTTP 標頭提供語言。
可切換通訊協定指南
- 一次只能使用一種通訊協定。確認裝置上最多只能同時運作一個網路。為確保不同通訊協定之間不會混用敏感的使用者資料,請務必遵守這項規定。
- 建議在裝置中加入硬體重設工作流程,讓使用者能透過其他網路重新設定裝置。
- 將裝置更新至網路的程序應簡單易用,且各網路之間應公平。使用者必須能夠選擇要使用的網路,且不得偏好其中一個網路。這個流程必須經過 Google 團隊核准。
韌體更新
合作夥伴應使用自己的行動或網頁應用程式工作流程,管理 OTA 更新的程序和發布作業。
快速配對支援向使用者傳送通知,告知可用的 OTA 更新。如要使用這項機制,請按照下列指示操作:
- Nearby Device Console 應會更新至最新韌體版本。
- 請在 Nearby Device Console 中設定隨附應用程式。應支援韌體更新意圖。
- 供應商應實作「韌體修訂版本」GATT 特徵。
如要防止追蹤,應限制存取「韌體修訂版本」特徵。Seeker 會先讀取佈建狀態並提供驗證金鑰 (如本規格所定義),然後才會讀取韌體修訂版本。這項作業會透過相同連線完成。如果嘗試讀取韌體修訂版本,但供應商未繫結,且未透過相同連線成功完成驗證作業,供應商應傳回未驗證錯誤。
相容性
如要使用「尋找中心」網路,必須開啟定位服務和藍牙。 需具備行動數據服務或連上網路。適用於 Android 9 以上版本,某些國家/地區僅限符合年齡條件者使用。
變更記錄
FHN 版本 | 日期 | 註解 |
---|---|---|
v1 | 搶先體驗版 FHN 規格的初始版本。 | |
v1.1 | 2023 年 2 月 |
|
v1.2 | 2023 年 4 月 |
|
v1.3 | 2023 年 12 月 |
|