赞
踩
在学习BLE低功耗蓝牙安全知识前,我们要先对BLE蓝牙有个基础了解,知道BLE是什么?
BLE(Bluethooth Low Energy)是指低功耗蓝牙技术,是一种用于无线通信的短距离通信技术。蓝牙4.0标准包含两种不同的蓝牙技术:经典蓝牙(Classic BlueTooth)和低功耗蓝牙。
经典蓝牙和低功耗的蓝牙的区别:
一些设备可能仍然选择使用经典蓝牙,而另一些设备则可能使用低功耗蓝牙来实现低功耗和简化的数据传输。低功耗蓝牙是在2010年后出现的,为了满足物联网(IOT)和传感设备的需求,使得非常适合用于低功耗设备,如健康追踪器、智能手表、智能家居等。
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
蓝牙技术的频率为2.4GHz,使用的是ISM频段,这是一种被广泛应用于各种工业、科学和医疗设备的频段,常见的有2.4GHz和5.8GHz,2.4GHz是最为广泛使用的频段,被用于各种无线技术,包括蓝牙、Wi-Fi、Zigbee等,不同的无线技术采用不同的子频道和协议来进行通信,避免互相干扰。
低功耗蓝牙一共有40个信道,频段范围从2402GHz到2480GHz,每两兆赫兹一个信道。
低功耗蓝牙组成部分包括以下几个主要方面:
CC2540芯片是单模芯片,区别于手机和PC端的双模芯片,区别在于单模芯片专门用于支持一种通信模式,即低BLE或者经典蓝牙,单模芯片通常具有较低的功耗,需要长时间运行且能耗较低,如传感器网络,健康监测等。而双模芯片可以同时支持BLe和经典蓝牙通信模式,兼容性更广泛,能够与不同类型的蓝牙设备进行通信,一般在一些需要同时支持BLE和经典蓝牙的应用中发挥作用,比如智能手机、音频设备等。
常见的集成CC2540的蓝牙主板如图:
BLE的所有设计都要遵循蓝牙协议规范
以智能手环为例,手环是外围设备,而智能手机是中心设备,手环通过蓝牙将一些心跳、健康监测数据发送给手机,手机接收到蓝牙传输通道的数据后,通过APP将数据解析并显示给用户。外围角色的作用是为中心角色提供各种数据,中心角色可以扫描并接受多个外围角色的数据(外围角色中的设备进行广播,中心角色的设备寻找广播)
这些组件共同协作,实现了低功耗蓝牙设备之间的可靠通信和数据交换。
回顾蓝牙组成部分,蓝牙协议栈是蓝牙数据传输和解析的重要部分,本节详细说明下Controller和Host的各个部分。
Controller是用于实现BLE通信协议的硬件模块或芯片,是在蓝牙设备中用于处理物理层和链路层通信的关键组件。
物理层(PHY)
BLE的物理层基于蓝牙核心规范,以下是BLE物理层的一些关键特性和技术:
频段:物理层指定了BLE使用2.4GHz的工业、科学及医疗(ISM)频段,这个频段是公共可用的无线电频段,是一个无需授权的频段,且是全球通用的频段,,频谱资源为2400Mhz~2483.5Mhz约83.5Mhz。
射频信道:BLE拥有40个射频通道,其中37个自适应自动调频数据通道和3个广播通道,3个广播通道分别为37、38、39,因为广播通道比较少,如果设备的广播频率设置很高,容易堵信道。
发射功率:2.4Ghz ISM频段对设备有最大发射功率限制,对于BLE在蓝牙5.2协议规范中有规定,最小发射功率为-20dBm,最大发射功率为+10dBm。
带宽:BLE物理层的通信带宽相对较低,通常为1 Mbps或更低。这种较低的带宽有助于降低功耗和延长设备的电池寿命。
调制方式:BLE物理层使用高斯频移键控调制方式。GFSK调制可提供较高的数据传输速率和较低的功耗。
数据包结构:BLE物理层的数据传输以数据包为单位。一个BLE数据包包含同步字节、访问地址、通道标识符(用于识别数据包类型)、数据字段和错误检测码(CRC)等部分。
链路层(LL)
在BLE通信中,链路层是位于BLE协议栈中的一个关键层级。位于物理层之上,负责处理与连接建立、数据传输和断开相关的任务,确保了设备之间的可靠通信。
链路层定义了两个设备如何利用无线电传输信息,包含了报文、广播、数据通道的定义,规定了两个设备操作行为规范。
定义了5种设备状态:
主机控制接口(HCI)
HCI是上层HOST与下层Controller的通信接口,定义了蓝牙设备上层协议栈与底层控制器之间的命令和数据交互方式。主要用于蓝牙设备的控制和管理,通过HCI接口,主机可以与蓝牙设备的底层控制器进行通信,发送命令和接收事件,以实现对蓝牙设备的控制和监控。
以下是HCI接口的特点和功能:
如果主机和控制器分开在不同芯片的话HCI接口包括了物理接口和逻辑接口,协议规范规定了四种可用的物理接口,包括通用UART、3线UART、USB和SDIO。逻辑接口定义了数据包的帧格式。
Host负责与蓝牙设备进行通信、控制连接、数据传输以及执行蓝牙协议栈的各个层级,是一个完全由软件实现的层。
逻辑链路控制和适配协议(L2CAP)
L2CAP是整个蓝牙协议中最核心的部分,位于HCI接口上层,负责连通主机和控制器,向上层提供面向连接和无连接的数据服务,并提供多路复用、分段和重组操作。
注:
SDU -> 服务数据单元,L2CAP与上层交换的数据包,它不包含L2CAP的帧头。
PDU -> 协议数据单元,包括了L2CAP协议信息域、控制信息、上层信息数据,这个数据包就包含了L2CAP的帧头。一个SDU可能被分割成多个PDU进行传输。
MTU -> 最大数据传输单元,上层应用可以接收的payload最大字节数,注意这个跟ATT的MTU是不一样的。
MPS -> L2CAP可以接收的payload最大字节数。
Credit -> 本蓝牙设备可以接收的LE帧数量。Credits取值范围是1~65535,在两个设备之间使用流控制。
L2CAP Basic Header -> 为每个PDU预先准备的L2CAP协议信息。它包括了CID和长度。
L2CAP的主要功能包括:
通用属性规范(GATT)
自下而上的顺序应该先看ATT协议,但先了解GATT协议,可以更好的理解ATT原理。
在GATT之上就是应用程序,通过GATT同意属性格式和属性访问接口。是一个基于ATT的通用属性配置文件,用于定义设备之间的数据交换和服务。GATT 提供了一种层次化的数据模型,用于组织和访问设备上的属性数据。它将属性组织成一个层级结构,由服务(Service)、特征(Characteristic)和描述符(Descriptor)组成。一个profile由若干个service组成,而一个service又由若干characteristic组成,characteristic又是由声明、数值和描述符组成。
GATT还定义了两种设备角色:客户端和服务端,客户端通过发送读取、写入和订阅通知等命令,从服务端获取或修改属性数据。服务端则响应这些请求并返回相应的数据或执行相应的操作。如智能手环和手机之间,智能手环向手机提供数据是服务器,手机主动发起命令读取手环的数据,手机为客户端。
对于GATT本身,可以简单理解为一种根据一定格式规范组织的数据表:
上图主要由三部分组成:Handle、Attribute Type、Attribute Value。其中Handle是作为索引的依据类似数组的下标,Attribute Type是根据UUID而定义的128bit标识(实际传输可以只传递16bit),Attribute Value即属性值。
属性协议(ATT)
ATT 协议的主要目的是定义蓝牙设备之间的数据交换方式和规范,以便实现设备之间的通信和数据访问。它建立在 L2CAP之上,作为上层协议。
ATT是作为完成上述数据表具体的操作,它的操作对象就是每一条属性指。
属性其实就是一种数据格式:
上述图片就是一条属性,它由以下几个部分组成:
Attribute Handle:属性句柄,如果设备上有两个类型一样的肯定需要一个标识来区分,属性句柄就是每个属性的唯一标识,由系统分配。
Attribute Type:属性类型,用UUID表示,分为四大类:
而UUID对应属性类型可以划分为以下几种:
0x1800-0x26FF:服务项类型
0x2700-0x27FF:单位
0x2800-0x28FF:属性类型
0x2900-0x29FF:描述符类型
0x2A00-0x7FFF:特征值类型
Attribute Value:属性的值
如果该属性是服务项类型或者是特征值声明类型,那么它的属性就是UUID等信息。如果是普通的特征值,则属性值是用户的数据。属性值需要预留空间以保存用户数据。为了方便理解,可以将属性值的空间看做I2C的数据空间,操作特征值里的用户数据,就是对那块内存空间进行读写。
Attribute Permissions:属性权限,主要有以下四类:
访问权限(Access Permission)- 只读、只写、读写
加密权限(Encryption Permission)- 加密、不加密
认证权限(Authentication Permission)- 需要认证、不需要认证
授权权限(Authorization Permission)- 需要授权、不需要授权
ATT PDU
在这里先了解下PDU(Protocol Data Unit)协议数据单元,PDU是一种通用术语,用于描述各种通信协议中的数据传输单元。在BLE中,ATT和GATT都使用ATT PDU来描述数据单元,这些PDU用于在BLE设备之间传输属性数据和命令。L2CAP在蓝牙协议栈中位于ATT之中,尽管L2CAP没有明确使用PDU的术语,但它使用L2CAP数据包来传输数据。这些数据包可以被视为类似于PDU的数据传输单元。
ATT PDU 是在BLE(Bluetooth Low Energy)通信中使用的数据单元,用于在客户端和服务器之间传递属性数据和命令。它被封装在L2CAP(Logical Link Control and Adaptation Protocol)数据包中进行传输。
ATT PDU根据不同的操作类型和数据类型而有所不同,它包含以下重要字段:
Atrribute Protocal PDU格式:
Attribute Opcode的取值:
ATT层抓包
Read By Group Type Request包
Read By Group Type Response包
SMP(安全管理)
SMP是BLE通信中用于安全管理的协议。负责处理BLE设备之间的安全性,包括身份验证、加密和密钥管理等方面。SMP 的主要目标是确保蓝牙设备之间的通信安全,并提供对抗窃听、篡改和伪造等威胁的保护。以下是BLE SMP 协议的关键功能:
SM在蓝牙协议中的位置如图:
数据单元对应的内容:
安全加密的方式有通用和私有的区别,通用类型的比如通过PIN配对码的方式,具体后面着重再讲。
GAP(通用访问配置文件)
BLE GAP 定义了蓝牙设备在广播和连接建立过程中的角色和行为,包括以下关键功能:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。