v1.3
「尋找我的裝置」網路 (FMDN) 配件規格定義了追蹤信標藍牙低功耗 (BLE) 裝置的端對端加密方法。本頁說明 FMDN 做為快速配對規格的擴充功能。如果供應商擁有與 FMDN 相容的裝置,且願意為這些裝置啟用位置追蹤功能,則應啟用這項擴充功能。
GATT 規格
快速配對服務中應加入其他一般屬性 (GATT) 特性,具有以下語意:
快速配對服務的特性 | 已加密 | 權限 | UUID |
---|---|---|---|
信標動作 | 否 | 讀取、寫入及通知 | FE2C1238-8366-4814-8EB0-01DE32100BEA |
表 1:FMDN 的快速配對服務特性。
驗證
這項擴充功能所需的作業會以寫入作業的形式執行,並受到「驗證/回應」機制保護。在執行任何作業之前, Seeker 應先從表 1 的特性執行讀取作業,這樣會造成緩衝區採用以下格式:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 通訊協定主要版本號碼 | 0x01 |
1 - 8 | 位元組陣列 | 一次性隨機 Nonce | 各有不同 |
每項讀取作業都應該會產生不同的 Nonce,而單一 Nonce 僅對一項作業有效。即使作業失敗,Nonce 也必須失效。
接著,Seeker 會計算要在後續寫入要求中使用的一次性驗證金鑰。驗證金鑰的計算方式如表 2 至 5 所述。視要求的作業而定, Seeker 會證明下列一或多個鍵的知識:
帳戶金鑰:如快速配對規格中定義的 16 位元組「快速配對」帳戶金鑰。
擁有者帳戶金鑰:提供者會在初次存取信標動作特性時,選擇其中一個現有的帳戶金鑰做為擁有者帳戶金鑰。在供應商恢復原廠設定之前,您無法變更所選擁有者帳戶金鑰。若提供者帳戶金鑰空中超出免費帳戶金鑰運算單元,則不得移除擁有者帳戶金鑰。
首次配對時已支援 FMDN 的提供者 (或在恢復原廠設定後支援 FMDN) 時,請選擇第一個帳戶金鑰,因為 Seeker 在配對期間讀取佈建狀態時,這是唯一現有的帳戶金鑰。
在配對後取得 FMDN 支援的供應商 (例如透過韌體更新) 可以選擇任何現有的帳戶金鑰。如果在韌體更新後,系統會假設執行更新的使用者是供應商目前的擁有者,選擇用來讀取佈建狀態的第一個帳戶金鑰是合理的,
臨時身分識別金鑰 (EIK):執行 FMDN 佈建程序時, Seeker 隨機選擇的 32 位元組金鑰。這組金鑰可用於衍生加密編譯金鑰,用於對位置報表進行端對端加密。搜尋功能絕對不會向後端揭露。
備援金鑰:定義為
SHA256(ephemeral identity key || 0x01)
,截斷至前 8 個位元組。金鑰會儲存在後端,供探索者用來 復原 EIK (前提是使用者按下裝置上的按鈕)。來電響鈴鍵:定義為
SHA256(ephemeral identity key || 0x02)
,截斷前 8 個位元組。金鑰會儲存在後端,而 Seeker 只能用來建立裝置鈴聲。不必要的追蹤保護鍵:定義為
SHA256(ephemeral identity key || 0x03)
,只會顯示前 8 個位元組。該金鑰會儲存在後端上,而 Seeker 只能用來啟用不必要的追蹤保護模式。
作業套件
資料表 2 到 5 會指定寫入特徵的資料格式。本節稍後將詳細說明每項作業。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
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:信標佈建要求。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
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:信標佈建金鑰復原要求。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
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 - 變數 | 位元組陣列 | 其他資料 |
|
表 4:來電響鈴要求。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
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 所示。
如果資料 ID 並非 0x05:環狀狀態變更,則應在觸發通知的寫入交易完成 (也就是傳送寫入要求的回應 PDU 之前) 之前傳送。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 資料 ID |
|
1 | uint8 | 資料長度 | 各有不同 |
2 - 9 則 | 位元組陣列 | 驗證 | 各項作業的詳細資料 |
10 - var | 位元組陣列 | 其他資料 |
|
表 6:信標服務回應。
表 7 列出作業傳回的可能 GATT 錯誤代碼。
程式碼 | 說明 | 附註 |
---|---|---|
0x80 | 未驗證 | 當驗證失敗 (包括使用舊 Nonce 的情況) 時,系統會傳回寫入要求以回應寫入要求。 |
0x81 | 無效值 | 如果提供任何無效值或接收到的資料有非預期的位元組數,就會傳回這個值。 |
0x82 | 沒有使用者同意聲明 | 當裝置未處於配對模式時,系統會傳回含有資料 ID 為 0x04:讀取暫時身分金鑰的使用者同意聲明的寫入要求。 |
表 7:GATT 錯誤代碼。
讀取信標的參數
查詢者可以執行寫入作業,查詢由資料表 2 (資料 ID 為 0x00) 所產生要求的特性,藉此向提供者查詢信標的參數。提供者會確認提供的一次性驗證金鑰是否與裝置上儲存的任何帳戶金鑰相符。
如果驗證失敗,供應商會傳回未驗證的錯誤。
成功後,提供者會收到表 6 中具有資料 ID 0x00 的回應。「供應商」建立資料區隔的方式如下:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
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 的回應。「供應商」建立資料區隔的方式如下:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | 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 個位元組。
設定臨時身分金鑰
如要將未佈建的提供者佈建為 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 個位元組。
清除臨時身分金鑰
為了取消佈建提供者的信標部分,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 在本機儲存。因此,只有在裝置處於配對模式,或按下裝置實體按鈕後一段時間 (亦即經使用者同意) 後,才能使用這項功能。
跳轉器必須將復原金鑰儲存在後端,才能復原明文金鑰,但它不會儲存 EIK 本身。
為了讀取 EIK, Seeker 會對特徵執行寫入作業,包含來自表 3 且資料 ID 為 0x04 的要求。供應商會驗證:
- 雜湊的復原金鑰與預期的備援金鑰相符。
- 裝置處於 EIK 復原模式。
如果驗證失敗,供應商就會傳回未經驗證的錯誤。
如果裝置未處於配對模式,提供者會傳回「無使用者同意聲明」錯誤。
成功後,提供者會收到表 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 的要求),要求供應器播放音效。「供應商」建立資料區隔的方式如下:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 響鈴作業 | 具有下列值的位元遮罩:
|
1 - 2 號 | uint16 | 逾時 | 逾時時間 (以毫秒為單位)。不得為 0,且不得超過 10 分鐘。 提供者會使用此值決定其響鈴時間長度,然後再將其設為靜音。如果裝置的任何元件已在發出鈴聲,逾時設定會覆寫已經生效的元件。 如果將環狀作業設為 0x00,系統會忽略逾時情形。 |
3 | uint8 | 音量 |
|
收到要求後,供應商會驗證下列事項:
- 提供的一次性驗證金鑰與環形金鑰相符。
- 要求的狀態與可響鈴的元件相符。
如果提供者並非提供 FMDN 信標或驗證失敗,則會傳回未驗證的錯誤。不過,如果供應商已啟用不必要的追蹤防護機制,且觸發不必要的追蹤保護要求啟用了略過響鈴驗證旗標,供應商就應略過這項檢查。尋找工具仍會提供驗證資料,但也可以設為任意值。
響鈴的開始或終止時,系統會依照表 6 (資料 ID 為 0x05) 的說明傳送通知。通知的內容定義如下:
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
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:已啟動」或「0x04:已停止」(GATT 要求) 的通知。此要求會覆寫現有狀態的參數,以便延長響鈴時間長度。
如果提供者有實體按鈕 (或已啟用觸控感應功能),在鈴聲啟用時按下該按鈕應停止響鈴功能。
取得信標的響鈴狀態
為了取得信標的環狀狀態,尋找工具會對特性執行寫入作業,由表 4 中且資料 ID 為 0x06 的要求組成。供應商會驗證所提供的一次性驗證金鑰與環形金鑰是否相符。
如果提供者並非佈建為 FMDN 信標,或者驗證失敗,供應商會傳回未驗證的錯誤。
成功後,提供者會收到表 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 | 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 框架包含公開金鑰,由任何為群眾外包網路提供貢獻的支援用戶端加密位置報告。我們提供兩種橢圓曲線金鑰:一個支援舊版 BLE 4 影格的 160 位元金鑰,或需要 BLE 5 擴充廣告功能的 256 位元金鑰。供應商的實作方式會決定使用的曲線。
FMDN 影格的結構如下。
八位元 | 值 | 說明 |
---|---|---|
0 | 0 x 2 | 長度 |
1 | 0x01 | 標記資料類型值 |
2 | 0 x 6 | 檢舉資料 |
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 位元曲線的位元組偏移和值。
八位元 | 值 | 說明 |
---|---|---|
0 | 0 x 2 | 長度 |
1 | 0x01 | 標記資料類型值 |
2 | 0 x 6 | 檢舉資料 |
3 | 0x24 或 0x25 | 長度 |
4 | 0x16 | 服務資料類型值 |
5 | 0xAA 電池 | 16 位元服務 UUID |
6 | 0 倍速 | ... |
7 | 0x40 或 0x41 | FMDN 影格類型搭配不適用的追蹤保護模式指示 |
8.39 | 32 位元組的臨時 ID | |
400 | 雜湊標記 |
表 9:支援 256 位元曲線的 FMDN 影格。
臨時 ID (EID) 運算
AES-ECB-256 會使用臨時身分金鑰加密下列資料結構,藉此隨機產生一個隨機 ID:
八位元 | 欄位 | 說明 |
---|---|---|
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,反之則設為 0。
為產生這個位元組的最終值,這個值會經過 Xor 處理,且最低有效位元組為 SHA256(r)
。
請注意,r 應與曲線大小對齊。如果其表示法少於 160 或 256 位元,請加上零為最重要的位元;或者,如果最顯著的位元大於 160 或 256 位元,則應截斷最顯著的位元。
如果信標不支援電池電量指示,且未處於不適用的追蹤保護模式,則可在廣告中完全省略此位元組。
使用 EID 加密
為了加密訊息 m
,觀光客 (從信標讀取 Rx
) 會執行以下操作:
- 按照 EID 運算一節的定義,在
Fp
中選擇隨機數字s
。 - 運算
S = s * G
。 - 改用曲線方程式計算
R = (Rx, Ry)
,並從可能的結果中挑選任意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
為基礎),請按照 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 位址。LE Audio (LEA) 裝置需要 RPA,建議用於其他裝置,但定位器標記除外。
快速配對廣告、FMDN 廣告及對應的 BLE 位址應同時輪播。平均應每 1024 秒進行輪替一次。信標開始通告新 ID 的時間點,必須在視窗中隨機排列。
將輪替時間隨機化的建議方法,是將其設為下一個預計的輪替時間 (如果未套用隨機),再加上介於 1 到 204 秒之間的正隨機時間因子。
裝置處於不適用的追蹤保護模式時,應修正 FMDN 廣告的 BLE 位址,但 FP 無法偵測廣告的 RPA (例如快速配對) 必須持續旋轉。您可以為不同的通訊協定使用不同的位址。
從斷電中復原
解決暫時 ID 的關鍵在於與廣告當時的時鐘值密切相關,因此供應器必須能在斷電時復原時鐘值。建議提供者每天將目前的時鐘值寫入非揮發性記憶體至少一次,而且提供者會在啟動時檢查 NVM,確認是否有可供初始化的值。臨時 ID 解析器會在足夠時間範圍內實作解析度,以允許合理的時鐘偏移以及此類的耗電復原。
由於解析時間有限,提供者仍應盡力盡量減少時鐘偏移,應至少實作一個額外的時鐘同步處理方法 (廣告無法偵測的快速配對影格或導入訊息串流)。
快速配對實作指南
本節說明在支援 FMDN 的供應商上,快速配對實作的特別面向。
定位器標記專屬規範
- 如果供應商配對完成,但未在 5 分鐘內佈建 FMDN (或是在裝置配對時套用 OTA 更新,但未佈建 FMDN 裝置),供應商應還原至原廠設定,並清除已儲存的帳戶金鑰。
- 供應商與供應商配對後,在佈建 FMDN 或等待 5 分鐘結束之前,不應變更其 MAC 位址。
- 如果從裝置中清除臨時身分金鑰,裝置應恢復原廠設定,並清除已儲存的帳戶金鑰。
- 供應商應拒絕一般的藍牙配對嘗試,並且僅接受快速配對配對。
- 提供者必須納入一項機制,讓使用者在不將裝置恢復原廠設定的情況下,暫時停止放送廣告 (例如按下一組按鈕)。
- 斷電後,裝置應通告無法偵測的快速配對影格,直到下次叫用讀取信標參數為止。如此一來,即使發生嚴重時鐘偏移,探索工具也能偵測裝置並同步處理時鐘。
- 宣傳無法偵測的快速配對影格時,不應啟用 UI 指標。
- 在為 FMDN 佈建供應商時,請勿宣傳可搜尋的快速配對影格。
- 提供者不應以未經驗證的方式 (例如名稱或 ID) 揭露任何個人識別資訊。
經典藍牙裝置專屬指南
本節說明支援 FMDN 的傳統藍牙裝置的特殊面向。
已配對裝置的 FMDN 佈建
與 Seeker 配對時,系統不一定會為 FMDN 提供提供者,在此之後。在此情況下,提供者可能沒有建立 GATT 連線所需的最新 BLE MAC 位址。供應器必須支援下列至少一種方式,讓跳轉者在已配對的情況下取得其 BLE 位址:
- 提供者可以定期通告快速配對帳戶資料,讓尋找器透過 BLE 掃描找到其 BLE 位址。
這個方法適合未實作訊息串流的供應商。 - 提供者可以透過傳統藍牙的快速配對訊息串流提供這項資料。
這個方法適合未透過藍牙連線至 Seeker 時,未通告快速配對影格的供應商。
如果同時支援這兩種方法,使用者更有可能為 FMDN 佈建裝置。
快速配對訊息串流
提供者可以實作快速配對訊息串流,並使用該串流將裝置資訊通知詢問者。實作訊息串流會啟用本節所述的特定功能。
每次建立訊息串流 RFCOMM 管道時,提供者應傳送裝置資訊訊息一次。
韌體版本 (裝置資訊代碼 0x09) 和追蹤功能
當韌體更新為供應商新增 FMDN 支援時,連線的 Seeker 即可通知使用者並提供該資訊。否則,使用者必須手動前往藍牙裝置清單,以啟動 FMDN 佈建作業。
為此,供應商應使用韌體版本屬性 (代碼 0x09) 回報代表韌體版本的字串值。此外,供應商應支援通訊協定,以便查看因韌體更新而導致的功能變更。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 裝置資訊事件 | 0 x 3 |
1 | uint8 | 韌體版本 | 0 x 9 |
2 - 3 | uint16 | 額外資料長度 | 各有不同 |
var | 位元組陣列 | 版本字串 | 各有不同 |
表 11:裝置資訊事件:更新韌體版本。
收到功能更新要求 (0x0601) 時,如果供應商已啟用 FMDN 追蹤功能,該要求應如表 12 所示。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 裝置功能同步處理事件 | 0 x 6 |
1 | uint8 | FMDN 追蹤 | 0 x 3 |
2 - 3 | uint16 | 額外資料長度 | 0x0007 |
4 | uint8 | FMDN 佈建狀態 | 0x00 (未佈建);任何帳戶佈建時為 0x01 |
5 - 10 人 | 位元組陣列 | 裝置目前的 BLE MAC 位址 | 各有不同 |
表 12:裝置功能同步處理事件:新增了追蹤功能。
目前的暫時 ID (裝置資訊代碼 0x0B)
提供者可以使用目前的暫時 ID (代碼 0x0B) 來報告目前的 EID 和時鐘值,以便在為 FMDN 佈建時回報目前的 EID 和時鐘值,以便在發生時鐘偏移 (例如電池耗電) 時同步處理 Seeker。否則,探索工具會啟動較昂貴且較不可靠的連線來達成此目的。
八位元 | 資料類型 | 說明 | 值 |
---|---|---|---|
0 | uint8 | 裝置資訊事件 | 0 x 3 |
1 | uint8 | 目前的臨時 ID | 0 x 00 億 |
2 - 3 | uint16 | 額外資料長度 | 0x0018 或 0x0024 |
4 - 7 | 位元組陣列 | 時鐘值 | 範例:0x13F9EA80 |
8 - 19 或 31 | 位元組陣列 | 目前的 EID | 範例: 0x1122334455667788990011223344556677889900 |
表 13:裝置資訊事件:時鐘同步。
恢復原廠設定
支援恢復原廠設定的裝置:如果執行恢復原廠設定,供應商必須停止信標,並抹除臨時身分金鑰和所有已儲存的帳戶金鑰,包括擁有者的帳戶金鑰。
恢復原廠設定 (手動或程式輔助方式) 之後,供應商不應立即啟動快速配對功能,以免在使用者刪除裝置後立即啟動配對流程。
防範不必要的追蹤
認證的 FMDN 裝置也必須符合跨平台實作版本的 偵測不必要的位置追蹤器 (DULT) 相關規定。
需符合 DULT 規格的 FMDN 相關指南:
- 所有與 FMDN 相容的裝置都必須在鄰近裝置控制台中註冊,並啟用「尋找我的裝置」功能。
- 裝置必須實作 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 個位元組。
- Sound_Start 運算程式碼的實作指南:
- 指令會在所有可用元件中觸發響鈴。
- 應使用支援的最大音量。
- 建議的響鈴時間長度為 12 秒。
- 定位標記必須包含一項機制,讓使用者在不將裝置恢復原廠設定的情況下,暫時停止放送廣告 (例如按下多個按鈕)。
- 停用操作說明必須記載在公開可用的網址中,並記載給 Google 做為認證要求,並在更新或修改操作說明前至少 10 天。
- 網址必須支援本地化。視用戶端而定,語言可透過查詢參數 (「hl=zh-Hant」) 或「accept-language」HTTP 標頭提供。
可切換的通訊協定指南
- 一次只能使用一個通訊協定。確保裝置上只能有一個網路運作。這項規定是為了確保不同通訊協定之間不會合併敏感的使用者資料。
- 建議您在裝置上整合強制重設工作流程,讓使用者利用其他網路重新設定裝置。
- 將裝置更新為網路的程序應讓使用者容易理解,且網路之間應具有同等標準。使用者必須能夠自由選擇要使用的網路,而無須偏好使用其中一個網路。這個流程需要經過 Google 團隊核准。
韌體更新
OTA 更新的程序和發布應由合作夥伴使用自己的行動或網頁應用程式工作流程管理。
相容性
必須開啟定位服務和藍牙,才能使用「尋找我的裝置」網路。 需要行動數據服務或網際網路連線。適用於 Android 9 以上版本,以及特定國家/地區,前提是符合年齡資格的使用者。
變更記錄
FMDN 版本 | 日期 | 留言 |
---|---|---|
v1 | 適用於搶先體驗的 FMDN 規格初始版本。 | |
v1.1 | 2023 年 2 月 |
|
v1.2 | 2023 年 4 月 |
|
v1.3 | 2023 年 12 月 |
|