藍牙永久資料結構定義

Fuchsia 藍牙子系統保留任何連線成功的通訊端資訊 與 Fuchsia 相關聯。繫結資訊 包括配對密鑰 (例如加密金鑰),以及所用對等端的相關中繼資料 建立連線

永久連接儲存空間是由 bt-gap 元件。資料使用 stash 程式庫。保留資料有兩種:主機資料以及 繫結資料。

JSON 結構定義

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

基本類型

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

地址

代表藍牙裝置地址

鍵 值類型 說明
類型 字串 public 或 random
value 數字陣列 (8 位元) 6 個八位元裝置位址,按小端位元組順序排列

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

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

安全性屬性

配對密鑰的藍牙連線安全性屬性。適用對象 例如由對等互連人員透過 系統會將未驗證的臨時金鑰視為「未驗證」。

鍵 值類型 說明
已驗證 布林值 true:如果已啟用 MITM 防護功能
secureConnections 布林值 如果密鑰是透過安全連線配對進行交換,則傳回 true
encryptionKeySize 數字 (8 位元) 用於交換作業的加密金鑰大小

範例:

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

鍵

128 位元數字,代表與配對相關的密鑰。使用這個結構定義的通用鍵 是本機裝置的身分識別解析金鑰 (IRK)。

Key 在使用時,代表本機產生的金鑰,以供日後發行使用。

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

同類應用程式鍵

128 位元金鑰,代表來自對等點的配對相關密鑰。採用此模型的通用金鑰 是對等點的身分識別解析金鑰 (IRK)。

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

鍵 值類型 說明
安全性 安全性屬性 發布過程中的連結安全性
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)。

「長期金鑰」對等金鑰的安全性屬性不只代表 連線,以及金鑰本身的安全性。

鍵 值類型 說明
金鑰 對等鍵 加密金鑰。
海豚 數字 (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 連線參數

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

LE 債券資料

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

巴西/EDR 債券資料

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

繫結資料結構定義

鍵 值類型 說明
書籍 ID 數字 64 位元不透明對等互連 ID
地址 地址 對等點的識別地址
hostAddress 地址 對等互連的本機 bt-host 身分位址
名稱 (選填) 字串 完整或簡稱的「本地名稱」與對等互連節點的其他部分
le (選填) LE 債券資料 低功耗傳輸的繫結資料
bredr (選填) 巴西/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"
        ]
    }
}