「尋找中心」網路配件規格

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 會證明自己知道下列一或多個金鑰:

作業

寫入特徵的資料格式如表 2 至表 5 所示。本節稍後會詳細說明各項作業。

八位元 資料類型 說明
0 uint8 資料 ID
  • 0x00:讀取信標參數
  • 0x01:讀取佈建狀態
  • 0x02:設定臨時身分識別金鑰
  • 0x03:清除臨時身分識別金鑰
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
  • 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:信標佈建要求。

八位元 資料類型 說明
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
  • 0x05:鈴聲
  • 0x06:讀取鈴響狀態
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 位元組陣列 其他資料
  • 0x05:4 個位元組,表示鈴響狀態、鈴響時間和鈴聲音量。
  • 0x06:不適用

表 4:鈴聲要求。

八位元 資料類型 說明
0 uint8 資料 ID
  • 0x07:啟動惡意追蹤保護模式
  • 0x08:停用不必要的追蹤保護模式
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 位元組陣列 其他資料
  • 0x07:1 個位元組的控制旗標 (選用)
  • 0x08:SHA256(ephemeral identity key || the last nonce read from the characteristic) 的前 8 個位元組

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

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

傳送資料 ID 不是 0x05:鈴聲狀態變更的通知時,應在觸發通知的寫入交易完成前傳送,也就是在傳送寫入要求的回應 PDU 前傳送。

八位元 資料類型 說明
0 <0x0 uint8 資料 ID <0x
  • 0x00:讀取信標參數
  • 0x01:讀取佈建狀態
  • 0x02:設定臨時身分識別金鑰
  • 0x03:清除臨時身分識別金鑰
  • 0x04:徵得使用者同意後讀取暫時性身分識別金鑰
  • 0x05:鈴聲狀態變更
  • 0x06:讀取鈴響狀態
  • 0x07:啟動惡意追蹤保護模式
  • 0x08:停用不必要的追蹤保護模式
1 uint8 資料長度 因人而異
2 - 9 位元組陣列 驗證 詳細作業資訊
10 - var < 位元組陣列 <0x0A 其他資料 <0x
  • 0x00:8 個位元組,表示傳輸功率、時鐘值、加密方法和鈴聲功能,並以帳戶金鑰 (以零填補) 進行 AES-ECB-128 加密
  • 0x01:1 個位元組,指出佈建狀態,後面接著目前的臨時 ID (20 或 32 個位元組),如適用
  • 0x04:32 個位元組,即臨時身分識別金鑰,以帳戶金鑰加密的 AES-ECB-128
  • 0x05:4 個位元組,表示新狀態和變更的觸發條件
  • 0x06:3 個位元組,表示主動響鈴的元件和響鈴剩餘的十毫秒數
  • 其他資料 ID 使用空白的額外資料

表 6:信標服務回應。

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

程式碼 說明 附註
0x80 未經驗證 驗證失敗時 (包括使用舊隨機數的情況),系統會傳回這個錯誤代碼,以回應寫入要求。
0x81 無效值 如果提供的值無效,或收到的資料位元組數與預期不符,就會傳回這個錯誤。
0x82 未提供使用者同意聲明 如果裝置未處於配對模式,系統就會在回應寫入要求時傳回此錯誤,並附上資料 ID 0x04:在取得使用者同意聲明後讀取臨時身分識別金鑰

表 7:GATT 錯誤代碼。

讀取信號的參數

Seeker 可以對特徵執行寫入作業,向 Provider 查詢 Beacon 的參數。這項特徵包含表 2 中的要求,以及資料 ID 0x00。供應商會驗證提供的一次性驗證金鑰,是否與裝置上儲存的任何帳戶金鑰相符。

如果驗證失敗,Provider 會傳回未經驗證的錯誤。

成功時,供應商會透過表 6 的回應通知,資料 ID 為 0x00。供應商會依下列方式建構資料區隔:

八位元 資料類型 說明
0 uint8 校正後的功率 在 0 公尺處收到的校正功率 (值介於 [-100, 20] 之間)。以帶正負號的整數表示,解析度為 1 dBm。
1 到 4 人 uint32 時鐘值 目前的時鐘值 (以秒為單位,大端序)。
5 uint8 選取曲線 用於加密的橢圓曲線:
  • 0x00 (預設):SECP160R1
  • 0x01:SECP256R1 (需要擴充廣告)
6 <0x0 uint8 元件 <0x0 可發出鈴聲的元件數量:
  • 0x00:表示裝置無法響鈴。
  • 0x01:表示只有單一元件能夠響鈴。
  • 0x02:表示左右耳機可獨立發出鈴聲。
  • 0x03:表示左耳機、右耳機和充電盒這三個元件都能獨立發出鈴聲。
7 <0x0 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 個位元組。

讀取信標的佈建狀態

Seeker 可以對特徵執行寫入作業,向 Provider 查詢信標的佈建狀態。該特徵包含表 2 中的要求,資料 ID 為 0x01。供應商會驗證提供的一次性驗證金鑰是否與裝置上儲存的任何帳戶金鑰相符。

如果驗證失敗,Provider 會傳回未經驗證的錯誤。

成功時,供應商會透過表 6 中的回應通知,資料 ID 為 0x01。供應商會依下列方式建構資料區隔:

八位元 資料類型 說明
0 <0x0 uint8 佈建狀態 具有下列值的位元遮罩:
  • 位元 1 (0x01):設定是否為裝置設定臨時身分識別金鑰。
  • 位元 2 (0x02):設定提供的單次驗證金鑰是否與擁有者帳戶金鑰相符。
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 (0x01):讓右耳機發出鈴聲
  • 位元 2 (0x02):讓左耳機發出鈴聲
  • 位元 3 (0x04):鈴聲案例
  • 0xFF:讓所有元件響鈴
  • 0x00:停止響鈴
1 - 2 uint16 逾時 <0x 逾時時間 (以十分之一秒為單位)。不得為零,且不得大於 10 分鐘的等值。
供應商會使用這個值,判斷鈴聲應響多久才停止。如果裝置的任何元件已在響鈴,逾時設定會覆寫現有的設定。

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

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

  • 提供的一次性驗證金鑰與智慧指環金鑰相符。
  • 要求的狀態與可發出鈴聲的元件相符。

如果供應商未佈建為 FHN 信標或驗證失敗,系統會傳回未經驗證的錯誤。不過,如果供應商啟用了不必要的追蹤保護功能,且觸發不必要追蹤保護功能的要求已開啟略過鈴聲驗證旗標,供應商應略過該檢查。Seeker 仍須提供驗證資料,但可設為任意值。

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

八位元 資料類型 說明
0 <0x0 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 個位元組。

如果裝置收到鈴響或停止鈴響的要求時,已處於要求狀態,供應商應傳送通知,指出鈴響狀態為「已開始」或「已停止」(GATT 要求),分別以 0x00 或 0x04 表示。這項要求會覆寫現有狀態的參數,延長鈴響時間。

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

取得信標的鈴響狀態

如要取得信號的鈴響狀態,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 控制項旗標 <
  • 0x01:略過鈴聲驗證。設定完成後,系統會在不必要的追蹤保護模式下,略過鈴響要求的驗證程序。
如果未設定任何旗標 (位元全為零),可以完全省略資料區段,並傳送空白資料區段。
這些標記只會在停用不必要的追蹤保護模式前生效。

供應商會驗證提供的一次性驗證金鑰是否與不必要的追蹤保護金鑰相符。如果供應商未佈建為 FHN 信號,或驗證失敗,系統會傳回未經驗證的錯誤。

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

停用擾人追蹤保護模式時

供應商會驗證下列事項:

  • 您提供的一次性驗證金鑰與惡意追蹤防護金鑰相符。
  • 雜湊處理的臨時身分識別金鑰與目前的臨時身分識別金鑰相符。

如果供應商未佈建為 FHN 信號,或驗證失敗,供應商會傳回未經驗證的錯誤。

停用不必要的追蹤保護模式後,信標應會再次以正常速率輪替 MAC 位址,並與臨時 ID 輪替作業同步。請將影格類型設回 0x40。「雜湊旗標」部分也會反映狀態。

成功時,供應商會透過資料 ID 為 0x07 或 0x08 的表 6 回應通知。

驗證區段定義為 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 裝置會傳送「停止測距回應」通知,表示已成功停止使用所要求的測距技術進行測距。

如果 FHNA BLE GATT 通訊管道在精確尋找作業期間中斷連線,但部分測距技術仍在測距,回應器裝置會實作逾時機制,確保不會無限期測距。詳細資料會因用途而異。

請注意,回應端裝置不得假設作業順序一律相同。例如,回應器裝置必須能夠連續處理多個「測距功能要求」作業,甚至在沒有先前的功能要求的情況下,直接處理「測距設定」作業。

精確尋找作業

表 8 顯示本文定義的 FHNA 作業,這些作業是精確尋找功能的必要條件。每個子章節都會定義各項作業的 FHNA 訊息,而「Additional Data」(額外資料) 欄位內容則是指「Ranging: Out-of-band message sequence and payload」(測距:頻外訊息序列和酬載) 規格。

作業 資料 ID 說明
測距功能要求 0x0A 發起端裝置將傳送至回應端裝置的功能要求作業。這項作業的資料內容會列出發起端想從回應端裝置瞭解的所有測距技術。
測距功能回應 0x0A 這是對「Ranging Capability Request」作業的回應通知。其中包含發起者要求的各項支援測距技術功能資訊。
選擇設定 0x0B Ranging Configuration 作業包含 Initiator 裝置要與 Responder 裝置開始測距的測距技術設定。
Ranging Configuration Response 0x0B 這是對 Ranging Configuration 作業的回覆通知。其中包含的資料會說明 Responder 裝置是否已根據提供的設定,成功啟動所要求的測距技術。
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 定義了 Ranging Capability Response 訊息。

八位元 資料類型 說明
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 定義了 Ranging Configuration Response 訊息。

八位元 資料類型 說明
0 uint8 資料 ID 0x0B - 設定測距設定回應
1 uint8 資料長度 視情況而定
2 位元組陣列 一次性驗證金鑰 HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度 || 其他資料 || 0x01) 的前 8 個位元組。
10 位元組陣列 其他資料 Ranging: Out-of-band message sequence and payload 規格中定義的測距設定回應訊息 (標頭和酬載)。

表 12:測距設定回應。

停止測距作業

表 13 定義了 Stop Ranging 訊息。

八位元 資料類型 說明
0 uint8 資料 ID 0x0D - 測距停止
1 uint8 資料長度 視情況而定
2 位元組陣列 一次性驗證金鑰 HMAC-SHA256(帳戶金鑰、通訊協定主要版本號碼 || 從特徵讀取的最後一個隨機值 || 資料 ID || 資料長度) 的前 8 個位元組。
10 位元組陣列 其他資料 停止測距訊息,如「測距:頻外訊息序列和酬載」規格中所定義 (標頭和酬載)

表 13:停止測距。

停止 Ranging Response 作業

表 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 啟動器角色。

  • 必須支援第 9 頻道
  • 為獲得最佳指引,建議使用 96 毫秒的測距間隔,否則必須支援 240 毫秒。
  • 建議將時段長度設為 1 毫秒,以節省電量,但系統也支援 2 毫秒。
  • UWB 晶片必須至少符合 FIRA v1.2 + P-STS 規範。
  • BPRF 為必填,HPRF 則為選填,但建議填寫。支援或選取的模式取決於支援或選取的前序索引。
  • 工作階段安全性類型:P-STS
BLE 頻道探測 (CS) 規格

BLE 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 位元金鑰。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 雜湊旗標

表 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 位元大端序格式。最低位元會清除。
16 - 26 邊框間距 值 = 0x00
27 K 輪替週期指數
28 - 31 TS[0]...TS[3] 信標時間計數器,採用 32 位元大端序格式。最低位元會清除。

表 17:建構虛擬隨機數。

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

在後續的計算中,SECP160R1SECP256R1 會用於橢圓曲線加密編譯作業。請參閱「 SEC 2: Recommended Elliptic Curve Domain Parameters」中的曲線定義,其中定義了接下來會參照的 FpnG

系統現在會計算 r = r' mod n,並將結果預估至有限欄位 Fpr'最後,計算 R = r * G,這是代表所用公開金鑰的曲線上的點。信標會將 Rx 座標做為暫時性 ID 播送 Rx

雜湊旗標

雜湊旗標欄位的計算方式如下 (位元是從最高有效位元到最低有效位元):

  • 位元 0-4:保留 (設為零)。
  • 位元 5-6 表示裝置的電池電量,如下所示:
    • 00:不支援電池電量指示
    • 01:電池電量正常
    • 10:電量不足
    • 11:電量過低 (請盡快更換電池)
  • 如果信號處於垃圾追蹤保護模式,位元 7 會設為 1,否則為 0。

如要產生這個位元組的最終值,請與 SHA256(r) 的最低有效位元組進行互斥或運算。

請注意,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 座標。未指定鹽。
  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 依據的信標時間計數器值,計算 r 的預期值,如「EID 計算」一節所述。
  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 輪替

放送 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 更新),供應商應還原為原廠設定,並清除儲存的帳戶金鑰。
  • 配對後,Provider 應不會變更 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) 回報代表韌體版本的字串值。此外,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。否則,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 分鐘內傳回有效回應。視覺或音訊信號應向使用者指出供應商已進入該模式。如要啟用該模式,請務必在認證前至少 10 天,向 Google 提供型號專屬的啟用說明,並在更新或修改說明前至少 10 天通知 Google。
    • 回應的建構方式如下:目前暫時性 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 Opcode 的指南:
    • 這項指令應會觸發所有可用元件發出鈴聲。
    • 請使用支援的最大音量。
    • 建議的鈴聲時間長度為 12 秒。
  • 定位器標籤必須包含一種機制,讓使用者暫時停止放送廣告,而不必將裝置恢復原廠設定 (例如按下特定組合的按鈕)。
    • 停用指示必須記錄在公開網址中,並在認證前提供給 Google,且在更新或修改指示前至少 10 天提供給 Google。
    • 網址應支援本地化。視用戶端而定,系統會以查詢參數 (「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 月
  • 更新擁有者 AK 的定義。
  • 新增在定位器標記中從電力中斷狀態復原的建議。
  • 新增 MAC 位址隨機化的說明。
  • 在「不當追蹤防護」模式下,新增 MAC 位址輪替的說明。
  • 新增有關停用定位器標籤的指南。
v1.3 2023 年 12 月
  • 新增說明,釐清定位器標記揭露的識別資訊。
  • 新增實作不當追蹤防範規格的規定。
  • 新增可切換通訊協定裝置的規範。