藍牙永久資料結構定義

Fuchsia 藍牙子系統會保留透過標準藍牙配對程序成功與 Fuchsia 建立關聯的任何對等互連資訊。綁定資訊包括配對密鑰 (例如加密金鑰),以及用於建立連線的對等點相關中繼資料。

永久綁定儲存空間是由 bt-gap 元件維護。系統會使用 stash 程式庫儲存資料。持久資料有兩種:主機資料與繫結資料。

JSON 結構定義

核心藍牙系統會以 JSON 格式儲存保留的資料。本節說明將資料序列化的格式。

基本類型

本節將說明其他結構定義重複使用的類型結構定義。所有結構定義都會以 JSON 物件表示。

地址

代表藍牙裝置位址

值類型 說明
type 字串 publicrandom
value 數字陣列 (8 位元) 6 個八位元裝置位址 (以位元組順序排列)

以下範例代表含有 FF:FF:00:00:00:01 值的隨機位址:

{
   "type": "random"
   "value": [1, 0, 0, 0, 255, 255]
}

安全性屬性

已交換配對密鑰的藍牙連線安全性屬性。舉例來說,如果身分解析金鑰是由對等互連者透過未驗證的臨時金鑰加密的連結所發布,則會視為「未驗證」。

值類型 說明
已通過驗證 布林值 如果已啟用 MITM 防護功能,則為 true
SecureConnections 布林值 如果使用安全連線配對功能交換密鑰,則為 true
encryptionKeySize 數字 (8 位元) 用於交換項目的加密金鑰大小

例子:

{
    "authenticated": false,
    "secureConnections": true,
    "encryptionKeySize": 16
}

128 位元數字,代表與配對相關聯的密鑰。這種結構定義的常見金鑰是本機裝置的身分解析金鑰 (IRK)。

金鑰本身使用時,代表本機產生的金鑰為未來發布而儲存的金鑰。

值類型 說明
value 數字陣列 (8 位元) 16 個八位元金鑰 (以位元組順序排列)

對等鍵

128 位元金鑰,代表來自對等點的配對相關密鑰。使用這個結構定義的常見索引鍵是對等端的身分解析金鑰 (IRK)。

每個鍵都有 128 位元的值 (例如 Key) 和安全性屬性,代表金鑰發布時的連線安全性。

值類型 說明
安全防護機制 安全性屬性 發布過程中的連結安全性
value 數字陣列 (8 位元) 基礎為 16 八位元金鑰 (以位元組順序排列)

以下範例代表受 MITM 保護值 0x100f0e0d0c0b0a090807060504030201 的金鑰:

{
    "security": {
        "authenticated": true,
        "secureConnections": false,
        "encryptionKeySize": 16
    },
    "value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
}

長期金鑰

用來建立加密連線的 128 位元金鑰。這個結構定義用來代表低能源長期金鑰 (LTK)。

長期熱門金鑰中對等金鑰的安全性屬性不僅代表了發布與產生金鑰時使用的連線安全性,也代表金鑰本身的安全性。

值類型 說明
對等鍵 加密金鑰。
ediv 數字 (16 位元) 加密分隔器
rand 數字 (64 位元) 隨機值

例子:

{
    "key": {
        "security": {
            "authenticated": true,
            "secureConnections": false,
            "encryptionKeySize": 16
        },
        "value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    },
    "ediv": 48879,
    "rand": 9223372036854775807
}

主機資料

Fuchsia 藍牙系統與一或多個藍牙控制器相容。系統會為每個可用的控制器執行個體化藍牙主機子系統 (bt-host)。Fuchsia 為使用中的 bt 主機儲存部分中繼資料。

值類型 說明
irk (選填) 金鑰 發布身分解析金鑰,發布給 bt-host 的所有對等端

例子:

{
    "irk": {
        "value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    }
}

繫結資料

凡是使用標準藍牙配對程序與 Fuchsia 系統建立關聯的對等互連系統,都視為與 Fuchsia 系統建立關聯。Fuchsia 會保留各個連結對等點的中繼資料,以便在日後連線時重新建立加密連結,而不需要重複安全性和配對程序。Fuchsia 也會保留額外中繼資料,以加快連線建立程序。

針對 LE 和 BR/EDR 傳輸,分別定義了不同的 JSON 物件結構定義。Fuchsia 系統可能會保留 LE 資料、BR/EDR 資料,或以特定傳輸的同儕支援為主,例如雙模式對等點可能會導致這兩種傳輸的繫結資料。

LE 連線參數

值類型 說明
連線間隔 數字 (16 位元) 控制器時間片段中的連線間隔
連線延遲時間 數字 (16 位元) 控制器時間片段中的連線延遲時間
監督時間 數字 (16 位元) 控制器時間片段中的監督逾時設定

LE 鍵資料

值類型 說明
connectionParameters (選用) LE 連線參數 對等點偏好的連線參數
peerLtk (選填) 長期金鑰 由對等點發布的長期金鑰
localLtk (選填) 長期金鑰 在本機產生並發布至對等點的長期金鑰
irk (選填) 對等鍵 同業的身分解決金鑰

BR/EDR 債務資料

值類型 說明
rolePreference (選用) 字串 "leader""follower"
linkKey (選填) 對等鍵 連結加密金鑰
services 字串陣列 快取找到的服務 UUID

繫結資料結構定義

值類型 說明
書籍 ID 人數 64 位元不透明對等點 ID
地址 地址 對等點的身分位址
主機位址 地址 本機 bt-host 的身分位址繫結至
名稱 (選填) 字串 對等點的完整或簡短「當地名稱」。
le (選填) LE 保證資料 低功耗傳輸資料
bredr (選填) BR/EDR 債務資料 BR/EDR 傳輸資料綁定資料

例子:

{
    "identifier": 1,
    "address: {
        "type": "random",
        "value": [202, 202, 254, 202, 239, 190]
    },
    "hostAddress": {
        "type": "public",
        "value": [1, 2, 3, 4, 5, 6]
    },
    "name": "My Device",
    "le": {
        "peerLtk": {
            "key": {
                "security": {
                    "authenticated": true,
                    "secureConnections": false,
                    "encryptionKeySize": 16
                },
                "value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
            },
            "ediv": 0,
            "rand": 0,
        },
    },
    "bredr": {
        "rolePreference": "follower",
        "linkKey": {
            "security": {
                "authenticated": true,
                "secureConnections": true,
                "encryptionKeySize": 16
            },
            "value": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
        },
        "services": [
           "0000110a-0000-1000-8000-00805f9b34fb",
           "0000110b-0000-1000-8000-00805f9b34fb"
        ]
    }
}