藍牙永久資料結構定義

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

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

JSON 結構定義

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

基本類型

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

地址

代表藍牙裝置地址

值類型 說明
類型 字串 publicrandom
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"
        ]
    }
}