透過集合功能整理內容 你可以依據偏好儲存及分類內容。

特性

GATT 服務的服務和特性

快速配對供應商應提供下列 GATT 服務。

服務 UUID
快速配對服務 0xFE2C

這項服務應具備下列特性。

自訂特性

快速配對服務特性 經過加密 權限 UUID
模型 ID 讀取 FE2C1233-8366-4814-8EB0-01DE32100BEA
金鑰配對 撰寫及通知 FE2C1234-8366-4814-8EB0-01DE32100BEA
密碼金鑰 撰寫及通知 FE2C1235-8366-4814-8EB0-01DE32100BEA
帳戶金鑰 寫入 FE2C1236-8366-4814-8EB0-01DE32100BEA

標準特性

名稱 經過加密 權限 UUID
韌體修訂版本 讀取 0x2A26

特性:型號 ID

這個特性可讓 Seeer 視需要讀取模型 ID (裝置以探索模式放送廣告除外)。系統應一律會傳回下列資料:

小八 資料類型 說明
0 至 2 次 uint24 模型 ID 不一定

特性:按鍵配對

這項特性可控制金鑰配對程序。在此程序中,會確認 Seeker 和 Provider 都擁有預先共用金鑰,藉此建立一定的信任程度。每個案例中的金鑰都不同:

  • 案例 1:預先共用金鑰以防假冒公開/私密金鑰配對以及 Seeker 自己的公開/私密金鑰配對為基礎,每次配對時都會變更。

    • 提供者處於配對模式。
    • 搜尋器會驗證供應器是否擁有防假冒私密金鑰。

    請注意,在配對模式下,供應商也可以照常使用配對功能,例如與不支援快速配對金鑰配對的裝置配對。

  • 案例 2:預先共用金鑰是其中一個帳戶金鑰

    • 提供者通常不是配對模式。但這並非強制要求。即使在配對模式下,提供者仍應使用帳戶金鑰。
    • 搜尋器和提供者會驗證另一個憑證是否屬於另一個帳戶金鑰。

由於這兩種情況都非常類似,除非使用了預先共用金鑰,否則會在程序中合併這些組合。

資料格式

請參閱程序,瞭解各種格式的使用方式。

小八 資料類型 說明 必填?
0 - 15 uint128 加密要求 不一定 必填
16 - 79 人 公開金鑰 不一定 選用

表 1.1:加密要求,由 Seeker 描述的特性。

小八 資料類型 說明 必填?
0 uint8 訊息類型 0x00 = 金鑰配對要求 必填
1 uint8 旗幟
  • 位元 0 (MSB):Seeker 已淘汰並忽略。
  • 第 1 位:1 如果 Finder 要求提供提供者應建立繫結,且此要求含有搜尋者的 BR/EDR 地址。0。
  • 第 2 位:如果發問者要求提供提供者通知現有名稱,則為 1。0。
  • 第 3 位:如果用於回溯撰寫帳戶金鑰,則為 1。0。
  • 第 4 到第 7 位保留供日後使用,請予以忽略。
多樣性 必填
2 - 7 uint48 方法:
  • 供應商目前的 BLE 地址
  • 供應商的公開網址
多樣性 必填
8 - 13 個 uint48 搜尋者的巴西 BR/EDR 地址 多樣性 只有在已設定標記 1 或 3 時才會顯示
n - 15 個 隨機值 (鹽) 多樣性 必填

表 1.2.1:原始要求 (類型 0x00)。已從表 1.1 的加密要求解密。

小八 資料類型 說明 必填?
0 uint8 訊息類型 0x10 = 動作要求 必填
1 uint8 旗幟
  • 位元 0 (MSB):如果是裝置動作,則為 1;如果不是,則傳回 0。
  • 位元 1:如果 1 後面有 1,表示其他資料特性,否則為 0。
  • 第 2 到第 7 位保留供日後使用,請予以忽略。
多樣性 必填
2 - 7 uint48 方法:
  • 供應商目前的 BLE 地址
  • 供應商的公開網址
多樣性 必填
8 uint8 訊息群組 多樣性 如果旗標 0
9 uint8 訊息代碼 多樣性 如果旗標 0
10 uint8 視旗標而定:
  • 已設定位元 0:額外的資料長度,小於 6
  • 設定位元 1:資料 ID
多樣性 如果旗標 0 或 1 已設定,就必須使用這項屬性
11 - n 額外資料 多樣性 選用
n - 15 個 隨機值 (鹽) 多樣性 必填

表 1.2.2:原始要求 (類型 0x10)。已從表 1.1 的加密要求解密。

小八 資料類型 說明
0 uint8 訊息類型 0x01 = 金鑰配對回應
1 至 6 個 uint48 供應商的公開 (BR/EDR) 地址 多樣性
7 - 15 個 隨機值 (鹽) 多樣性

表 1.3:原始回應。經過加密以產生表 1.4 中的加密回應。

小八 資料類型 說明
0 至 15 個 uint128 加密回應 多樣性

表 1.4:加密回應,由供應者透過通知傳送至 Seeker。

特性:密碼金鑰

這個特徵在金鑰式配對程序中使用。

小八 資料類型 說明
0 - 15 uint128 加密密碼區塊 多樣性

表 2.1:加密密碼區塊區塊。如要瞭解使用方式,請參閱金鑰式配對程序。

小八 資料類型 說明
0 uint8 訊息類型 下列其中一項權限:
  • 0x02 = 搜尋者密碼金鑰
  • 0x03 = 供應商的密碼金鑰
1 至 3 個 unit32 6 位數密碼金鑰 多樣性
4 - 15 人 隨機值 (鹽) 多樣性

表 2.2:原始密碼金鑰區塊。已解密表 2.1 版本。

特性:帳戶金鑰

配對完成後,快速配對搜尋工具會將帳戶金鑰寫入快速配對提供者。

小八 資料類型 說明
0 - 15 uint128 帳戶金鑰 (已加密) 多樣性

收到書寫要求時,快速配對提供者應執行下列事項:

  1. 使用程序中步驟 4 產生的共用密鑰來解密帳戶金鑰。
    1. 解密前,請確認共用密鑰是使用步驟 12 中的密碼金鑰要求解密。如果這個步驟並未使用這個密鑰完成,請忽略這個寫入並退出。
    2. 此時,共用密鑰 (程序中的 K) 不會再用於此配對。凡是使用這組金鑰加密且不重新啟動程序的要求,都應遭到拒絕。
  2. 確認解密值開頭為 0x04。否則請忽略這個寫入並退出。
  3. 檢查保留的「Account Key list」(帳戶金鑰清單) 是否有新的值。
  4. 如果不是,請從清單中刪除最近使用的值。
  5. 在清單中加入新值。

清單中的帳戶金鑰在金鑰配對期間使用。

特性:韌體修訂版本

這項特性可讓 Finder 視需要讀取供應器韌體的修訂版本。系統應一律會傳回下列資料:

小八 資料類型 說明
0 - var utf8s 韌體修改程式碼 多樣性

即使供應程式上有多個韌體 (例如:左耳機、右耳機和充電盒都有 3 個韌體),仍應封裝為單一 utf8 字串,提供者也可針對特殊情況傳回特定字串:

  1. status-update:如果供應商正在更新至新韌體。 「供應商」也可能會傳回階段韌體的版本。

  2. status-abnormal:如果供應商處於異常狀態時。例如,由於韌體更新失敗,所以故障了。這個值會讓 Finder 顯示訊息,通知使用者必須立即更新訊息。

特性:其他資料

這項服務應具備下列特性。

快速配對服務特性 經過加密 權限 UUID
Data 撰寫及通知 FE2C1237-8366-4814-8EB0-01DE32100BEA
舊的快速配對服務特性 (目標將於 2021 年 1 月 1 日淘汰) 經過加密 權限 UUID
Data 撰寫及通知 0x1237

在寫入或通知這個特性之前,必須具有特性 FE2C1234-8366-4814-8EB0-01DE32100BEA 的握手,才能共用共用密鑰。AES-CTR 將用於加密透過此特性傳輸的資料,演算法的定義如下。此模式對擴充超過單一 16 位元組區塊的資料更為安全。HMAC-SHA256 將用於確保資料完整性,同時也定義如下。

小八 說明
0 - 7 HMAC-SHA256 的前 8 位元組。 多樣性
8 - 15 個 Nonce,由 AES-CTR 加密使用。 多樣性
16 - var 加密資料。 多樣性

表 3.1:資料供應器透過供應者發送通知至 Seeker,或由 Seeer 透過寫入傳送給供應商。

小八 資料類型 說明
0 - var byte array Data varies,依據表 1.2.2 的資料 ID 解碼:
  • 0x01(個人化性名):utf8s

表 3.2:原始資料。已從表 3.1 的加密資料解密。

如果需要通知時 (例如透過表 1.2.1 中的位元 2 要求個人化名稱),快速配對提供者應執行下列操作:

  1. 為 Nonce 產生隨機加密的 8 個位元組。
  2. 使用 AES-CTR 加密資料,其中每個 16 位元組區塊都是使用

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    其中

    1. AES 金鑰是程序中步驟 4 的共用密鑰。
    2. ClearBlock[i] 是從資料 [i * 16] 開始的 16 位元組區塊。最後一個區塊可以少於 16 個位元組。
  3. 執行 Concat(encryptedBlock[0], encryptedBlock[1],...) 以建立加密資料。

  4. 產生 HMAC-SHA256:

    sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
    

    其中

    1. K 是由 concat(shared_secret, 48-byte ZEROs) 產生,shared_secret 從程序的步驟 4 產生。
    2. opad 是 64 個位元組的外邊框間距,包含值為 0x5C 的重複位元組。
    3. ipad 的內部填充為 64 個位元組,由值為 0x36 的重複位元組所組成。
  5. 從 HMAC-SHA256 擷取前 8 個位元組做為資料包的前置字串。

收到書寫要求時,快速配對提供者應執行下列事項:

  1. 請檢查 HMAC-SHA256 的前 8 位元組,藉此驗證資料的完整性。
  2. 使用 AES-CTR 解密已加密的資料,其中每個區塊都會使用

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    其中

    1. 加密 Block[i] 是 16 位元組的區塊,它是「encrypt_data[i * 16]」。最後一個區塊長度可以少於 16 個位元組。
    2. AES 金鑰是透過握手產生或識別,例如:
      1. 命名流程 1 中,它是來自 ECDH,且不再用於配對。任何已使用這個金鑰加密且不重新啟動程序的要求都應拒絕。
      2. 命名流程 2 中,這是帳戶金鑰。
  3. 執行 Concat(clearBlock[0], clearBlock[1],...) 建立原始資料。