Fuchsia 蓝牙子系统保留任何已成功建立的对等设备的绑定信息 进行连接。绑定信息 包括密钥配对(例如加密密钥)以及用于 建立连接
永久性绑定存储由
bt-gap
组件。该数据使用
stash
库。持久化数据有两种:主机数据和
绑定数据。
JSON 架构
核心蓝牙系统以 JSON 格式存储其持久化数据。本部分介绍了 用于对数据进行序列化的格式。
基本类型
本部分介绍了其他架构重复使用的类型的架构。所有架构都是 以 JSON 对象的形式表示。
地址
表示蓝牙设备地址
键 | 值类型 | 说明 |
---|---|---|
type | 字符串 | 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 位密钥,表示来自对等端的与配对相关的密钥。使用此密钥的常用键 schema 是对等方的身份解析密钥 (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)。
长期密钥对等密钥的安全属性不仅代表 用于分发和生成密钥的连接,而且还会确保密钥本身的安全性。
键 | 值类型 | 说明 |
---|---|---|
键 | 对等密钥 | 加密密钥。 |
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 连接参数
键 | 值类型 | 说明 |
---|---|---|
connectionInterval | 数字(16 位) | 控制器时间片中的连接时间间隔 |
connectionLatency | 数字(16 位) | 控制器时间片的连接延迟时间 |
supervisionTimeout | 数字(16 位) | 控制器时间片中的监督超时 |
LE 键结数据
键 | 值类型 | 说明 |
---|---|---|
connectionParameters(可选) | LE 连接参数 | 对等方的首选连接参数 |
PeerLtk(可选) | 长期键 | 对等方分发的长期密钥 |
localLtk(可选) | 长期键 | 在本地生成并分发给对等方的长期密钥 |
Irk(可选) | 对等密钥 | 对等方的身份解析密钥 |
巴西/EDR 债券数据
键 | 值类型 | 说明 |
---|---|---|
rolePreference(可选) | 字符串 | "leader" 或 "follower" |
linkKey(可选) | 对等密钥 | 链路加密密钥 |
services | 字符串数组 | 已缓存的已发现服务 UUID |
绑定数据架构
键 | 值类型 | 说明 |
---|---|---|
标识符 | 编号 | 64 位不透明对等 ID |
地址 | 地址 | 对等方的身份地址 |
hostAddress | 地址 | 对等端绑定的本地 bt 主机的身份地址 |
名称(可选) | 字符串 | 完整的或简称“本地名称”对等节点。 |
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"
]
}
}