概述
蓝牙(Bluetooth)是一种短距离无线通信技术标准,工作在 2.4 GHz ISM 频段,广泛应用于个人设备互联。
蓝牙分类
通常有两种主要形式:
| 类型 | 全称 | 典型应用 | 特点 |
|---|---|---|---|
| 经典蓝牙 BR/EDR | Basic Rate / Enhanced Data Rate | 蓝牙耳机、音响、文件传输 | 高带宽、持续连接 |
| 低功耗蓝牙 BLE | Bluetooth Low Energy | 蓝牙手环、IoT 传感器 | 超低功耗、间歇通信 |
版本演进
| 版本 | 发布年份 | 关键特性 |
|---|---|---|
| 1.0 | 1999 | 初始版本,基础数据传输 |
| 2.0 + EDR | 2004 | 增强数据速率(3 Mbps) |
| 3.0 + HS | 2009 | 高速通道(借助 Wi-Fi) |
| 4.0 | 2010 | 引入 BLE(低功耗蓝牙) |
| 4.2 | 2014 | 支持 IPv6/6LoWPAN |
| 5.0 | 2016 | 更远距离、更高速率、广播扩展 |
| 5.1 | 2019 | 方向寻找(测向) |
| 5.2 | 2020 | LE Audio(LC3 编码) |
| 5.3 | 2021 | 增强周期广播、连接子评级 |
BLE 协议栈架构
BLE 协议栈分为三层,数据发送时由高层逐层向下流动,接收时相反:
1 | ┌────────────────────────────────────┐ |
L2CAP 层(逻辑链路控制与适配协议)
L2CAP 负责协议复用、分段与重组、服务质量管理:
- 向上层提供面向连接和无连接的数据服务
- 支持协议/通道复用
- 处理数据分段与重组
- 管理数据流控
Logical 层(链路层)
Logical 层主要完成 BLE 通信过程中的各种逻辑控制。在一次 BLE 通信过程中,存在 Master 和 Slave 两方:
- Master:主动扫描并发起连接
- Slave:不断广播等待连接
1 | ┌─────────────────────────────────────────────────┐ |
广播类型:
- ADV_IND:可连接、可扫描的非定向广播
- ADV_DIRECT_IND:可连接的定向广播
- ADV_SCAN_IND:可扫描的非定向广播
- ADV_NONCONN_IND:不可连接的非定向广播
Physical 层(物理层)
Physical 层定义了 3 个广播信道 和 37 个数据通信信道:
| 信道类型 | 信道数 | 频率范围 | 用途 |
|---|---|---|---|
| 广播信道 | 3 (Ch37/38/39) | 2402/2426/2480 MHz | 设备发现、连接建立 |
| 数据信道 | 37 (Ch0-36) | 2404-2478 MHz | 数据传输(跳频) |
在两个蓝牙设备进行连接的过程中,先随机挑选一个广播信道进行广播,待建立连接之后,会在 37 个通信信道上进行跳频通信(Frequency Hopping),以抵抗干扰和窃听。
BLE GATT 服务模型
在每一个 BLE 设备中都会有一个对应的 Profile 用于对这个设备进行描述。GATT(Generic Attribute Profile)定义了 BLE 设备间数据交换的层次结构:
1 | ┌──────────────────────────────────────┐ |
- Profile:描述设备的完整功能集合
- Service:设备提供的各种服务(如心率服务、电池服务)
- Characteristic:服务中的具体数据点(如心率值、电池电量)
- Descriptor:对 Characteristic 的补充描述
Android BLE 接口
在 TCP/IP 的 Socket 通信中,服务端程序运行于某一 IP 地址上并持续监听某个端口,客户端程序选择服务端的 IP 和端口发起 Socket 连接,经过三次 TCP 握手之后完成连接的建立并使用该 Socket 进行通信。
蓝牙 BLE 通信也类似:需要先扫描周围蓝牙设备,并选择某个 BLE 设备发起连接。
扫描相关 API
| 接口名称 | 所属类 | 接口描述 |
|---|---|---|
startScan() |
BluetoothLeScanner |
开始扫描周围 BLE 设备 |
stopScan() |
BluetoothLeScanner |
结束扫描 |
数据读写 API
| 接口名称 | 所属类 | 接口描述 |
|---|---|---|
writeCharacteristic() |
BluetoothGatt |
向指定 Characteristic 写入数据 |
readCharacteristic() |
BluetoothGatt |
从指定 Characteristic 读取数据 |
setCharacteristicNotification() |
BluetoothGatt |
订阅 Characteristic 变化通知 |
discoverServices() |
BluetoothGatt |
发现设备提供的 GATT 服务 |
典型 BLE 通信流程
1 | 1. 初始化 BluetoothAdapter |
蓝牙安全研究视角
BLE 安全机制
| 安全层级 | 描述 | 安全性 |
|---|---|---|
| Level 1 | 无安全(No Security) | 无加密、无认证 |
| Level 2 | 未认证配对(Unauthenticated Pairing) | 加密但无 MITM 防护 |
| Level 3 | 认证配对(Authenticated Pairing) | 加密 + MITM 防护 |
| Level 4 | LE Secure Connections | ECDH 密钥交换 |
常见攻击类型
| 攻击类型 | 方法 | 工具 |
|---|---|---|
| 嗅探(Sniffing) | 捕获 BLE 广播和数据包 | Ubertooth, nRF Sniffer |
| MITM 攻击 | 中间人拦截并篡改通信 | BtleJuice, GATTacker |
| 重放攻击 | 捕获并重放 BLE 命令 | 自定义脚本 |
| 模糊测试 | 发送畸形数据包测试协议栈 | Scapy, btle-fuzz |
| MAC 追踪 | 通过 MAC 地址追踪设备 | 被动扫描工具 |
SDR 与蓝牙研究
使用 SDR(软件定义无线电)设备可以进行蓝牙信号的分析和研究:
- Ubertooth One:专用蓝牙研究工具,支持经典蓝牙和 BLE 嗅探
- HackRF:宽频 SDR 设备,可用于 2.4 GHz 信号分析
- nRF52840 Dongle:Nordic 官方 BLE 嗅探工具
相关知识
蓝牙技术是无线个人局域网(WPAN)的核心标准之一。理解蓝牙协议栈的层次结构、BLE 的 GATT 服务模型以及安全机制,对于物联网安全研究和嵌入式设备分析至关重要。本文与 SDR、移动网络等文章共同构成无线通信安全研究的知识体系。
⚠️ 安全提示:
- 蓝牙嗅探和攻击测试应在合法授权的环境下进行
- 未经授权的蓝牙设备攻击可能违反法律法规
- 本文仅用于学术研究和安全评估目的