v1.3
「尋找中心」網路 (FHN) 配件規格定義了端對端加密方法,用於追蹤發出信號的藍牙低功耗 (BLE) 裝置。本頁說明 FHN 如何做為快速配對規格的擴充功能。如果供應商的裝置與 FHN 相容,且願意為這些裝置啟用位置追蹤功能,就應啟用這項擴充功能。
GATT 規格
應在快速配對服務中新增額外的通用屬性 (GATT) 特徵,並採用下列語意:
| 快速配對服務特徵 | 已加密 | 權限 | UUID |
|---|---|---|---|
| 信標動作 | 否 | 讀取、寫入及通知 | FE2C1238-8366-4814-8EB0-01DE32100BEA |
表 1:FHN 的快速配對服務特徵。
驗證
這項擴充功能所需的作業會以寫入作業的形式執行,並透過驗證碼-回應機制確保安全。執行任何作業前,搜尋者應先從表 1 的特徵執行讀取作業,產生以下格式的緩衝區:
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 通訊協定主要版本號碼 | 0x01 |
| 1 - 8 | 位元組陣列 | 一次性隨機隨機數 | 因人而異 |
每次讀取作業都應產生不同的隨機值,且單一隨機值只能用於單一作業。即使作業失敗,隨機值也必須失效。
然後,搜尋者會計算一次性驗證金鑰,用於後續的寫入要求。驗證金鑰的計算方式如表 2 至表 5 所示。視要求執行的作業而定,Seeker 會證明自己知道下列一或多個金鑰:
帳戶金鑰:16 位元組的「快速配對」帳戶金鑰,如「快速配對」規格中所定義。
擁有者帳戶金鑰:當搜尋者首次存取 Beacon Actions 特徵時,供應商會選擇其中一個現有帳戶金鑰做為擁有者帳戶金鑰。選定的擁有者帳戶金鑰無法變更,除非供應商恢復原廠設定。當免費帳戶金鑰配額用盡時,供應商不得移除擁有者帳戶金鑰。
首次配對時已支援 FHN 的供應商 (或在恢復原廠設定後配對時支援 FHN),請選擇第一個帳戶金鑰,因為當 Seeker 在配對期間讀取佈建狀態時,只有這個帳戶金鑰存在。
如果供應商在配對後才取得 FHN 支援 (例如透過韌體更新),可以選擇任何現有的帳戶金鑰。假設執行更新的使用者是供應商的現任擁有者,那麼在韌體更新後,選擇用於從信標動作特徵讀取佈建狀態的第一個帳戶金鑰,是合理的做法。
臨時身分識別金鑰 (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 訊框。BLE 連線終止後,新的臨時身分識別金鑰會立即生效。供應商會透過資料 ID 0x02 的表 6 回應通知。
驗證區段定義為 HMAC-SHA256(account key, protocol major version number || the last nonce read
from the characteristic || data ID || data length || 0x01) 的前 8 個位元組。
清除暫時性身分識別金鑰
如要取消佈建供應器信標部分,搜尋器會對特徵執行寫入作業,其中包含資料 ID 為 0x03 的表 2 要求。供應器會驗證下列事項:
- 提供的一次性驗證金鑰與擁有者帳戶金鑰相符。
- 雜湊處理的臨時身分識別金鑰與目前的臨時身分識別金鑰相符。
如果供應商未佈建為 FHN 信號,或驗證失敗,系統會傳回未經驗證的錯誤。
成功後,供應商會忘記金鑰,並停止放送 FHN 影格。供應商會透過資料 ID 為 0x03 的表 6 回應通知。驗證區段定義為 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 要求。Provider 會驗證:
- 雜湊備援金鑰與預期備援金鑰相符。
- 裝置處於 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 信號,或驗證失敗,系統會傳回未經驗證的錯誤。不過,如果供應商已啟用不必要的追蹤保護機制,且觸發不必要追蹤保護機制的請求已開啟略過鈴聲驗證旗標,供應商應略過該檢查。搜尋者仍須提供驗證資料,但可設為任意值。
鈴聲開始或停止時,系統會傳送通知 (如表 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 要求)。這項要求會覆寫現有狀態的參數,延長鈴響時間。
如果供應商提供實體按鈕 (或啟用觸控感應),在鈴聲響起時按下該按鈕,應可停止鈴聲。
取得信標的鈴響狀態
如要取得信號的鈴響狀態,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。Find Hub 服務可透過 Find Hub 網路轉送不當追蹤防護模式啟用要求。這麼做會導致供應商暫時使用固定 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 個位元組。
精確尋找
本節詳細說明精確尋找所需的流程和其他作業。GATT 特徵和驗證的規則與 GATT 規格一節中定義的規則相同。精確尋找為選用功能。
精確尋找的類型取決於支援精確尋找的裝置所使用的測距技術類型。如要瞭解支援的測距技術,請參閱測距:頻外訊息序列和酬載規格。稍後章節將探討根據所用的測距技術,可預期哪種精確尋找體驗。
精確尋找流程
本節將探討精確尋找功能的 FHNA 訊息流程。圖 1 顯示訊息流程,各段落則詳細說明每則訊息。

圖 1:典型的「精確尋找」訊息流程
發起者裝置是指已安裝「尋找中心」應用程式,並從中啟用精確尋找功能的裝置。發起者裝置會嘗試尋找其他裝置。
回應端裝置是指發起端裝置嘗試尋找的裝置。
發起端裝置會將「測距功能要求」訊息傳送至回應端裝置,列出發起端裝置感興趣的測距技術,並要求回應端裝置提供相關資訊。回應裝置會回覆 Ranging Capability Response 通知,其中包含支援的測距技術及其功能資訊。回應者只會提供發起者要求的資訊。系統會根據 Responder 裝置偏好的測距技術優先順序排序功能清單,清單中的第一個項目優先順序最高。
發起端裝置接著會傳送「測距設定」訊息,定義要用於測距的每項測距技術設定。收到這則訊息後,回應端裝置必須使用提供的設定,開始進行適用技術的測距作業。回應裝置會傳回「測距設定」回應通知,其中包含各項測距技術是否順利啟動的結果。部分測距技術必須在發起端和回應端裝置上啟動,才能順利進行測距作業;其他技術則只需要在發起端裝置上啟動,但回應端裝置仍須回覆成功結果。如要進一步瞭解特定測距技術的行為,請參閱後續章節。
當發起者裝置準備停止精確尋找工作階段時,會將「停止測距」訊息傳送給回應者,指出哪些測距技術必須停止測距。Responder 裝置會傳送「停止測距回應」通知,表示已成功停止使用所要求的測距技術進行測距。
如果 FHNA BLE GATT 通訊管道在精確尋找工作階段中途斷線,但部分測距技術仍在測距,回應器裝置會實作逾時機制,確保不會無限期測距。詳情視各個用途而定。
請注意,回應端裝置不得假設作業順序一律相同。舉例來說,回應端裝置必須能夠連續處理多個「測距功能要求」作業,甚至直接處理「測距設定」作業,而不需先提出功能要求。
精確尋找作業
表 8 顯示本文定義的 FHNA 作業,這些作業是精確尋找功能的必要條件。每個子節都會定義各項作業的 FHNA 訊息,而「Additional Data」(額外資料) 資料欄位內容則是指「Ranging: Out-of-band message sequence and payload」(測距:頻外訊息序列和酬載) 規格。
| 作業 | 資料 ID | 說明 |
|---|---|---|
| 測距功能要求 | 0x0A | 發起端裝置將傳送至回應端裝置的功能要求作業。這項作業的資料內容會列出發起端想從回應端裝置瞭解的所有測距技術。 |
| 測距功能回應 | 0x0A | 這是對「範圍功能要求」作業的回應通知,內含發起者要求的各項支援範圍技術功能資訊。 |
| 測距設定 | 0x0B | 測距設定作業包含啟動器裝置要與回應器裝置開始測距的測距技術設定。 |
| 測距設定回應 | 0x0B | 這是對測距設定作業的回應通知,其中包含資料,說明回應器裝置是否已根據提供的設定,成功啟動所要求的測距技術。 |
| RFU | 0x0C | 這個資料 ID 的作業不會使用,保留供日後使用。 |
| 停止測距 | 0x0D | 發起端裝置傳送的「停止測距」作業包含相關資訊,說明回應端裝置必須停止使用哪些測距技術。 |
| 停止測距回應 | 0x0D | 這是對停止測距作業的回覆通知,其中包含特定測距技術的停止作業是否成功。 |
表 8:精確尋找作業。
Ranging Capability Request 作業
表 9 定義了 Ranging Capability Request 訊息。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 資料 ID | 0x0A - Ranging Capability Request 作業 |
| 1 | uint8 | 資料長度 | 視情況而定 |
| 2 | 位元組陣列 | 一次性驗證金鑰 | HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度 || 其他資料) 的前 8 個位元組。 |
| 10 | 位元組陣列 | 其他資料 | 測距功能要求訊息,如「測距:頻外訊息序列和酬載」規格中所定義 (標頭和酬載) |
表 9:測距功能要求。
Ranging Capability Response 作業
表 10 定義了「測距功能回應」訊息。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 資料 ID | 0x0A:測距功能回應 |
| 1 | uint8 | 資料長度 | 視情況而定 |
| 2 | 位元組陣列 | 一次性驗證金鑰 | HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度 || 其他資料 || 0x01) 的前 8 個位元組。 |
| 10 | 位元組陣列 | 其他資料 | 測距功能回應訊息,如「測距:頻外訊息序列和酬載」規格中所定義 (標頭和酬載) |
表 10:測距功能回應。
測距設定作業
表 11 定義了 Ranging Configuration 訊息。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 資料 ID | 0x0B - 設定測距設定 |
| 1 | uint8 | 資料長度 | 視情況而定 |
| 2 | 位元組陣列 | 一次性驗證金鑰 | HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度 || 其他資料) 的前 8 個位元組。 |
| 10 | 位元組陣列 | 其他資料 | 測距設定訊息,如「測距:頻外訊息序列和酬載」規格中所定義 (標頭和酬載) |
表 11:測距設定。
Ranging Configuration Response 作業
表 12 定義了「測距設定回應」訊息。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 資料 ID | 0x0B - 設定測距設定回應 |
| 1 | uint8 | 資料長度 | 視情況而定 |
| 2 | 位元組陣列 | 一次性驗證金鑰 | HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度 || 其他資料 || 0x01) 的前 8 個位元組。 |
| 10 | 位元組陣列 | 其他資料 | 測距:頻外訊息序列和酬載規格中定義的「測距設定回應」訊息 (標頭和酬載) |
表 12:測距設定回應。
停止測距作業
表 13 定義了 Stop Ranging 訊息。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 資料 ID | 0x0D - 測距停止 |
| 1 | uint8 | 資料長度 | 視情況而定 |
| 2 | 位元組陣列 | 一次性驗證金鑰 | HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度) 的前 8 個位元組。 |
| 10 | 位元組陣列 | 其他資料 | 停止測距訊息,如「測距:頻外訊息序列和酬載」規格 (標頭和酬載) 所定義 |
表 13:停止測距。
停止測距回應作業
表 14 定義了停止測距回應訊息。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 資料 ID | 0x0D - 測距停止回應 |
| 1 | uint8 | 資料長度 | 視情況而定 |
| 2 | 位元組陣列 | 一次性驗證金鑰 | HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度 || 其他資料 || 0x01) 的前 8 個位元組。 |
| 10 | 位元組陣列 | 其他資料 | 停止測距回應訊息,如「測距:頻外訊息序列和酬載」規格中所定義 (標頭和酬載) |
表 14:停止測距回應。
透過精準尋找功能防範不必要的追蹤
如「不必要的追蹤防護」一節所述,啟用不必要的追蹤防護模式後,如果裝置要支援這項功能,系統會對本文件中定義的所有精確尋找訊息套用與略過鈴響訊息驗證檢查相同的流程。
精確尋找功能的測距技術詳細資料
這個部分包含測距技術專屬的詳細資料。
超寬頻 (UWB) 規格
UWB 專屬詳細資料。
精確尋找層級
使用 UWB 做為測距技術的精確尋找工作階段,預期會顯示距離和方向資訊。測距間隔至少須為 240 毫秒,建議設為 96 毫秒,以獲得最佳指引。
設定 ID
為 UWB 交換的頻外設定資料,不包含 UWB 啟動 UWB 測距工作階段所需的完整可設定參數。部分參數會由所選設定 ID 隱含選取。
每個設定 ID 都是一組預先定義的 UWB 設定參數, 已公開記錄。 如要使用精確尋找功能,回應器裝置必須支援設定 ID 6,並視需要支援設定 ID 3。
UWB 發起端和回應端
就精確尋找用途而言,本文中標示為「發起端裝置」的裝置會是 UWB 回應端,而標示為「回應端裝置」的裝置會是 UWB 發起端。這是因為 UWB 發起端裝置的耗電量比 UWB 回應端裝置少,而且在大多數情況下,回應端裝置會是電量有限的周邊裝置。
也就是說,回應端裝置必須在「Ranging Capability Response」訊息中指出,該裝置支援 UWB 啟動器角色。
其他 UWB 相關參數
- 必須支援第 9 頻道
- 為獲得最佳指引,建議使用 96 毫秒的測距間隔,否則必須支援 240 毫秒。
- 建議將時段長度設為 1 毫秒,以節省電力,但系統也支援 2 毫秒。
- UWB 晶片必須至少符合 FIRA v1.2 + P-STS 規範。
- BPRF 為必要選項,HPRF 則為建議選項 (選用)。支援或選取的模式取決於支援或選取的前序索引。
- 工作階段安全性類型:P-STS
BLE 頻道探測 (CS) 具體細節
BLE CS 的具體詳細資料。
精確尋找層級
使用 CS 做為測距技術的精確尋找工作階段只會測量距離,目前不會提供方向。
裝置間的必要連結
如果裝置未配對,就無法使用通道探測技術進行精確尋找工作階段。發起端和回應端裝置之間必須已建立配對關係。這項規格並未提供在裝置間建立配對關係的方法,而是由用途開發人員負責在裝置間建立配對關係。
CS 回覆者必須採取行動
與 UWB 不同,UWB 需要兩部裝置明確呼叫 UWB 開始測距和停止測距 API,但 CS 只需要發起端裝置呼叫藍牙堆疊來啟動 CS 測距,其餘初始化作業會在回應端透過藍牙 (BT) 頻帶內進行。也就是說,如果已啟用 BT,回應端收到 CS 的「Ranging Configuration」或「Stop Ranging」訊息時,除了回覆「Ranging Configuration Response」訊息通知外,不必採取任何行動。回應端裝置可能會將這些訊息做為觸發條件,用來更新有螢幕的 UI,或用於裝置狀態的視覺回饋 (例如閃爍裝置 LED),無論裝置是否有螢幕都適用。
Wi-Fi NAN RTT
Wi-Fi NAN RTT 的詳細資料。
精確尋找層級
如果精確尋找工作階段使用 Wi-Fi NAN RTT 做為測距技術,系統只會測量距離,目前不會提供方向資訊。
BLE RSSI
BLE RSSI 的具體詳細資料。
精確尋找層級
如果精確尋找工作階段僅使用 BLE RSSI 做為測距技術,由於 BLE RSSI 並非準確的測距技術,因此無法取得距離或方向資訊。使用者只會看到裝置靠近或遠離的指引。
廣告影格
完成佈建後,供應商應至少每 2 秒播送一次 FHN 影格。如果宣傳「快速配對」影格,供應商應在一般「快速配對」廣告中穿插 FHN 影格。舉例來說,供應商每兩秒應播送七則快速配對廣告和一則 FHN 廣告。
FHN 廣告的藍牙傳輸功率應設為至少 0 dBm。
FHN 訊框會攜帶公開金鑰,供任何支援的用戶端用來加密位置資訊報表,並提供給群眾外包網路。系統提供兩種橢圓曲線金鑰:適用於舊版 BLE 4 訊框的 160 位元金鑰,以及需要 BLE 5 擴充廣告功能的 256 位元金鑰。供應商的實作方式會決定使用哪種曲線。
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 | 雜湊旗標 |
表 15:支援 160 位元曲線的 FHN 影格。
表 16 顯示 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 | 雜湊旗標 |
表 16:支援 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 個最低位元。 |
表 17:建構虛擬隨機數。
這項運算的結果是 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:電池電量嚴重不足 (請盡快更換電池)
- 如果信標處於垃圾追蹤保護模式,位元 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座標。未指定鹽。 - 假設
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 分鐘內,都不應變更。
- 如果從裝置清除臨時身分識別金鑰,裝置應會恢復原廠設定,並清除儲存的帳戶金鑰。
- 供應商應拒絕一般的藍牙配對嘗試,只接受快速配對。
- 供應商必須提供機制,讓使用者暫時停止顯示廣告,而不必將裝置恢復原廠設定 (例如按下按鈕組合)。
- 電力中斷後,裝置應會發布無法探索的快速配對訊框,直到下次叫用「讀取信標參數」為止。這樣一來,即使發生顯著的時鐘漂移,搜尋器也能偵測到裝置並同步時鐘。
- 放送無法探索的快速配對框架時,不應啟用 UI 指示。
- 為 FHN 佈建供應商時,不應宣傳可探索的「快速配對」框架。
- 供應商不應以未經驗證的方式公開任何個人識別資訊 (例如名稱或 ID)。
傳統藍牙裝置專屬規範
本節說明支援 FHN 的傳統藍牙裝置的特殊層面。
為已配對的裝置佈建 FHN
與 Seeker 配對時,Provider 不一定會佈建 FHN,但過一段時間後就會。在這種情況下,供應商可能沒有建立 GATT 連線所需的最新 BLE MAC 位址。供應商必須支援至少一種方式,讓搜尋者在配對後取得 BLE 位址:
- 供應商可以定期放送快速配對帳戶資料,讓搜尋者透過 BLE 掃描尋找 BLE 位址。
這種方法適合未實作訊息串流的供應商。 - 供應商可透過傳統藍牙的快速配對訊息串流提供這項資料。
如果供應商在透過藍牙連線至搜尋器時,不會放送快速配對框架,就適合採用這種做法。
同時支援這兩種方法,可提高使用者為 FHN 佈建裝置的機會。
快速配對訊息串流
供應商可以實作快速配對訊息串流,並用來通知搜尋者裝置資訊。導入訊息串流可啟用本節所述的特定功能。
每次建立訊息串流時,供應商應傳送一次裝置資訊訊息。
韌體版本 (裝置資訊代碼 0x09) 和追蹤功能
韌體更新為 Provider 新增 FHN 支援時,連線的 Seeker 可以通知使用者,並提供佈建選項。否則,使用者必須手動前往藍牙裝置清單,才能啟動 FHN 佈建程序。
如要允許這項操作,供應商應使用韌體版本屬性 (程式碼 0x09) 回報代表韌體版本的字串值。此外,Provider 應支援相關通訊協定,讓 Seeker 瞭解韌體更新造成的功能變更。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 裝置資訊事件 | 0x03 |
| 1 | uint8 | 韌體版本 | 0x09 |
| 2 - 3 | uint16 | 額外資料長度 | 因人而異 |
| var | 位元組陣列 | 版本字串 | 因人而異 |
表 18:裝置資訊事件:更新的韌體版本。
收到功能更新要求 (0x0601) 後,如果供應商已啟用 FHN 追蹤支援功能,應如表 12 所示回應。
| 八位元 | 資料類型 | 說明 | 值 |
|---|---|---|---|
| 0 | uint8 | 裝置功能同步事件 | 0x06 |
| 1 | uint8 | FHN 追蹤 | 0x03 |
| 2 - 3 | uint16 | 額外資料長度 | 0x0007 |
| 4 | uint8 | FHN 佈建狀態 | 如果未佈建,則為 0x00;如果由任何帳戶佈建,則為 0x01 |
| 5 - 10 人 | 位元組陣列 | 裝置目前的 BLE MAC 位址 | 因人而異 |
表 19:裝置功能同步事件:新增追蹤功能。
目前的暫時性 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 |
表 20:裝置資訊事件:時鐘同步。
恢復原廠設定
對於支援恢復原廠設定的裝置:如果執行恢復原廠設定,供應商必須停止發出信號,並清除臨時身分識別金鑰和所有儲存的帳戶金鑰,包括擁有者的帳戶金鑰。
恢復原廠設定後 (手動或透過程式),供應商不應立即開始宣傳快速配對,以免使用者刪除裝置後,配對流程隨即啟動。
防範擾人追蹤
通過認證的 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 可以傳回一般「位置追蹤器」值。
- Get_Accessory_Capabilities 必須指出支援鈴聲,以及 BLE 識別碼查詢。
- Get_Network_ID 應傳回 Google 的 ID (0x02)。
- 實作 Get_Identifier Opcode 的規範:
- 使用者啟動「識別」模式 (需要按鈕組合) 後,這項作業只會在 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 規格,聲音製造者發出的聲音必須達到 ISO 532-1:2017 定義的最低 60 Phon 尖峰響度。
- 導入 Sound_Start 不分區碼的指南:
- 這項指令應會觸發所有可用元件發出鈴聲。
- 請使用支援的最大音量。
- 建議的鈴聲時間長度為 12 秒。
- 定位器標籤必須包含一種機制,讓使用者暫時停止顯示廣告,而不必將裝置恢復原廠設定 (例如按下特定組合的按鈕)。
- 停用指示必須記錄在公開網址中,並在認證前提供給 Google,且在更新或修改指示前至少 10 天提供給 Google。
- 網址應支援本地化。視用戶端而定,系統會以查詢參數 (「hl=en」) 或使用「accept-language」HTTP 標頭提供語言。
可切換通訊協定指南
- 一次只能使用一種通訊協定。確認裝置一次只能運作一個網路。這項規定可確保不同通訊協定之間不會混用敏感的使用者資料。
- 建議在裝置中加入硬體重設工作流程,讓使用者能透過其他網路重新設定裝置。
- 更新裝置網路的程序應簡單易用,且各網路之間應公平對待。使用者必須能夠選擇要使用的網路,而不偏好其中一個網路。這項流程必須經過 Google 團隊核准。
韌體更新
合作夥伴應使用自己的行動或網頁應用程式工作流程,管理 OTA 更新的程序和發布作業。
快速配對支援向使用者傳送通知,告知可用的 OTA 更新。如要使用這項機制,請按照下列步驟操作:
為防止追蹤,應限制存取「韌體修訂版本」特徵。搜尋者會先讀取佈建狀態並提供驗證金鑰 (如本規格所定義),然後才讀取韌體修訂版本。這項作業會透過相同連線完成。如果嘗試讀取韌體修訂版本,但提供者未繫結,或未透過相同連線成功完成驗證作業,提供者應傳回未驗證的錯誤。
相容性
如要使用「尋找中心」網路,必須開啟定位服務和藍牙。 需具備行動數據服務或連上網路。適用於 Android 9 以上版本,某些國家/地區僅限符合年齡條件者使用。
變更記錄
| FHN 版本 | 日期 | 註解 |
|---|---|---|
| v1 | 搶先發布 FHN 規格的初始版本。 | |
| v1.1 | 2023 年 2 月 |
|
| v1.2 | 2023 年 4 月 |
|
| v1.3 | 2023 年 12 月 |
|