1. 蓝牙配对
蓝牙配对是建立安全连接的关键过程。对于传统蓝牙应采用SSP配对方式,而低功耗蓝牙4.0和4.1的版本应使用legacy pairing配对方式,4.2以后的版本应采用Secure connection的配对方式。
传统的蓝牙采用的配对方式如下:
- 蓝牙2.1版本之前使用的Legacy pairing。该配对方式蓝牙双方采用输入固定pin Code来实现身份的认证,该方式目前已经不在使用。
- 蓝牙2.1版本提出了简单安全配对(Secure simple pairing)的方式。这种配对模式的提出主要目标是为了简化用户的配对过程,次要的目标是提高蓝牙无线技术的安全性。
蓝牙简单安全配对SSP的流程如下图所示:
低功耗蓝牙依据版本的不同,采用Secure Connection 和legacy pairing。
- 4.0和4.1 使用的也是Secure simple pairing。 后续版本称为BLE legacy pairing。
- 4.2之后的版本使用的是Secure Connection。
1.1 简单安全配对SSP
SSP生成密钥的流程如下图:
其中各个步骤如下:
- 蓝牙设备发现周围的其他蓝牙设备。
- 向目标蓝牙设备发起配对请求。
- 两个蓝牙设备交换自身设备的输入/输出能力(IO capabilities exchange),例如是否支持显示和键盘输入等,该属性用于后续协商认证手段。
- 交换椭圆曲线的公钥。
- 依据公钥,生成身份认证码。 依据之前交换的设备IO能力,采用对应的身份认证方式。
- 身份认证成功后,通过ECDH key进行校验。
- 通过密钥加密通信链路。至此,蓝牙配对完成。
1.2 安全连接Secure Connection
Secure connection用于蓝牙4.2以及之后的版本。Secure connection的流程如下:
各个步骤详细内容如下:
- 蓝牙设备搜索附近蓝牙设备。
- 与目标蓝牙设备交换各自的IO能力,并依据设备的蓝牙版本,决定使用LE secure Connection还是Le Legacy pairing。
- 如果使用Le secure Connection则生成Long term key。
- 如果使用Le Legacy pairing,则生成Short tearm key。
- 将生成的key用于两个蓝牙设备的密钥分发,并依据之前的IO能力,进行鉴权。
- 鉴权完成后,配对完成。用密钥对整个蓝牙链路进行加密。
1.3 蓝牙鉴权
配对名称 | 描述 |
Numeric Comparison | 配对双方都显示一个6位数字,由用户来核对数字是否一致,一致即可配对。 |
Just works | 用于配对没有显示且没有输入的蓝牙设备,该设备接收到连接请求即可完成配对,用户看不到配对过程。这种设备常见蓝牙耳机。 |
Passkey Entry | 要求配对目标输入一个在本地设备上显示的6位数字,输入正确即可配对。常见蓝牙键盘。 |
Out of Band | 蓝牙设备之间通过其他的途径交换配对信息。常见NFC。 |
传统蓝牙和低功耗蓝牙同时支持以上四种鉴权模式。
蓝牙配对需要完成两个安全目标:
- 防止被动窃听(Passive eavesdropping)
- 防止主动窃听(active eavesdropping),中间人攻击是常见的攻击方式。
蓝牙的四种鉴权模式中,只有Just works模式无法防护中间人攻击。因此,该模式不建议使用在汽车蓝牙环境。
蓝牙在完成鉴权后,即可以使用生成的密钥对蓝牙通信信道进行加密。蓝牙的通信数据经过加密后可以在链路上进行安全传输。
2. 蓝牙协议栈安全应用
针对蓝牙协议栈漏洞,应通过升级安全的蓝牙固件、使用高版本蓝牙协议栈等方式解决。
White List
白名单就是一组蓝牙地址列表,通过设置白名单可以允许扫描、连接特定的蓝牙设备,以及被扫描、连接
LL Privacy
在白名单的基础上将设备地址进行加密,转变成Resolvable Private addresses
-
本地Resolving List需要保存每一对BLE设备的key/address信息,格式为:Local IRK|Peer IRK|Peer Device Identity Address|Address Type
-
LL Privacy机制在Controller中完成,即加解密操作对HCI上层是透明的
LL Encryption
数据发送和接收过程进行加解密
-
加解密操作在Link Layer完成
-
Host会保存至少1280bit的LTK(根密钥),启动加密传输时,LL会首先协商出一个128-bit的随机数SDK(Session Key Diversifier)和64-bit的iv,经过Encryption Engine和LTK生成此次通信的会话密钥SessionKey
SecurityManager
为BLE设备提供加密连接相关的key,包含以下规范:
-
定义了配对(Pairing)的相关概念及过程
-
定义了密码工具箱,包含配对、加密所需的各种算法
-
定义了安全管理协议(Security Manager Protocol,SMP),实现配对、密码传输等操作
SMP规范中,配对的定义是,Master和Slave通过协商确定用于加密通信的key的过程,包含三个阶段:
-
阶段一、Pairing Feature Exchange,交换双方配对相关的设置,如配对方法、鉴权方式等
-
鉴权方式可以采用交换额外的信息(Out of band,OOB),或者弹窗引入人来判定,称为MITM鉴权,还有输入配对码进行对比(Passkey Entry/Numeric Comparison),或者不鉴权(Just Work)
-
-
阶段二、通过SMP协议进行配对操作,有两种配对方案,LE Legacy Pairing和LE Secure Connections
-
阶段三、协商好密钥key,建立加密连接,传输密钥信息(可选)
3. 蓝牙功能设计
蓝牙协议栈是各个蓝牙协议实现的载体。其本身提供蓝牙的各个功能。蓝牙协议栈功能在设计中,应依据具体的应用场景,增加或删除其功能。关闭不必要的功能,做到最小化功能需求。
蓝牙的基本功能依赖于其蓝牙协议栈所支持的服务。除了物理层与链路层协议是不可缺少的,蓝牙服务是由多个协议共同组成的。下表列出了多个常见的车载蓝牙协议的基本功能。
表2 常见蓝牙协议
蓝牙协议名称 | 蓝牙协议功能 |
基带协议 | 蓝牙跳频协议。用于控制物理层的功能 |
HCI | 蓝牙控制器接口,用于上层协议与物理层之间的通信接口 |
LMP | 蓝牙链路管理器。用于链路管理控制。 |
L2CAP | 逻辑链路控制和适配层协议,为上层协议提供面向连接和无连接的数据服务。 |
SDP | 服务发现协议,用于发现其他蓝牙设备所提供的服务。 |
OBEX | 文件交换协议。 |
AVRCP | 蓝牙音乐控制协议,用于控制蓝牙的播放、暂停、上一曲、下一曲等功能。 |
A2DP | 蓝牙音频传输协议。 |
HFP | 蓝牙语音通话控制协议,用于控制蓝牙电话。 |
OPP | 蓝牙文件传输协议 |
SMP | 用于蓝牙设备间的加密认证的协议 |
PBAP | 蓝牙电话本传输协议 |
GATT | 蓝牙低功耗通用属性配置协议 |
Secure Manager | 蓝牙安全管理 |
4. 蓝牙功率要求
蓝牙是无线设备,其工作在2.4GHZ的全球公共频段。其采用跳频的方式与其他蓝牙设备进行通信。所以蓝牙硬件需要对其输出的功率有明确的要求。
蓝牙的功率分为三个级别。如下表所示。蓝牙硬件开发时,需要依据具体的需求,设置蓝牙的发射功率。
表3 蓝牙功率级别
功率等级名称 | 功率限制 | 覆盖距离 |
Class1 | 0dBm – 20dBm | 100米 |
Class2 | -6dBm – 4dBm | 10米 |
Class3 | 小于0dBm | 1米 |
蓝牙发射的包类型如下表:
蓝牙发射包类型 | 调制方式 | 蓝牙模式 |
DH1 | GFSK | BDR 传统蓝牙 |
DH3 | GFSK | BDR 传统蓝牙 |
DH5 | GFSK | BDR 传统蓝牙 |
2DH1 | 4-DQPSK | EDR 传统蓝牙 |
2DH3 | 4-DQPSK | EDR 传统蓝牙 |
2DH5 | 4-DQPSK | EDR 传统蓝牙 |
3DH1 | 8DPSK | EDR 传统蓝牙 |
3DH3 | 8DPSK | EDR 传统蓝牙 |
3DH5 | 8DPSK | EDR 传统蓝牙 |
BLE_1M | GFSK | 低功耗蓝牙 |
BLE_2M | GFSK | 低功耗蓝牙 |