Android系统安全 — 6.5 Bluetooth安全连接原理

1 蓝牙协议架构和简称

在这里插入图片描述
蓝牙协议栈主要分:APPS层(应用层,包括音频播放器,蓝牙遥控,智能家居APP等), HOST层(中间层协议,包括GAP,SMP,ATT/GATT, L2CAP, AMP Manager),CONTROLLER层(底层传输协议,包括HCI, LL, PHY)
简称介绍
GAP(Generic Access Profile)。该协议定义了设备之间如何发现、连接和进行安全认证,主要定义设备的角色和相关参数等配置文件。
SMP(Security Manager Protocol)。顾名思义安全管理协议主要负责BR/EDR, BLE设备间的配对和绑定过程,以及安全性相关的功能。其中配对是一个过程,其中两个BR/EDR, BLE设备交换安全密钥以建立受保护的连接。绑定则是一个更长期的过程,其中密钥被持久化存储在设备中,以便将来可以重新建立安全连接,而无需再次配对
安全管理器协议(SMP)是用于生成加密密钥和身份密钥的点对点协议。该协议在一个专用的固定L2CAP通道上运行。SMP块还管理加密密钥和身份密钥的存储,并负责生成随机地址并将随机地址解析为已知的设备身份。SMP直接阻塞与控制器的接口,以提供在加密或配对过程中用于加密和身份验证的存储密钥。
ATT(Attribute Protocol)。该协议是BLE设备用于存储和访问数据的协议。ATT定义了一种结构化的方法来组织和访问数据,这些数据以"属性"的形式存储。每个属性都有一个唯一的句柄、一个UUID(Universally Unique Identifier)来标识其类型、权限、值以及其他可能的元数据。在ATT中,存在两种设备角色:服务器和客户端。服务器存储属性,而客户端请求或修改这些属性。ATT定义了一系列的操作,使客户端能够与服务器交互。这些操作包括读、写、查找属性等。其中每个属性都可以设置不同的访问权限,如只读、只写或加密读写。这确保了数据的安全性和完整性。
GATT(Generic Attribute Profile)。该协议为ATT的访问提供了一个通用且具有结构化的的方法来组织和访问数据
L2CAP(Logical Link control&Adaption Protocol)。就是对上层的数据进行封装以便于下层进行数据传输。
HCI(Host Controller Interface)
LL(Link Layer)。为BR/EDR, BLE设备之间的通信提供了基础的链路功能,当两个BR/EDR, BLE设备决定建立持续连接时,LL负责初始化、维护和断开这些连接。也就是说LL规定了蓝牙设备是如何建立连接的。LL操作基于状态机,其中主要的状态包括就绪、广播、扫描、初始化和连接。
PHY(Plysical Layer Radio)。作为协议栈中的最低层,一共定义了40个信道(其中三个广播信道,37个数据传输的信道),负责无线电信号的发送和接收。
AMP(Alternate MAC/PHY)。AMP管理器是一个使用L2CAP与对等体通信层的远程设备上的AMP管理器。它还直接与AMP PAL接口,用于AMP控制目的。AMP管理器负责发现远程AMP并确定其可用性。它还收集有关远程AMP的信息。该信息用于建立和管理AMP物理链路。AMP管理器使用专用的L2CAP信令通道与远程AMP管理器通信。包括 AMP HCI, AMP PAL(Protocol Adaption Layer), AMP MAC, AMP PHY。
*IRK(Identity Resolving Key) * :用于生成和解析随机地址的 128 位的密钥.
CSRK(Connection Signature Resolving Key ):用于对数据进行签名并验证接收设备上的签名的 128 位的密钥
TK(Temporary Key ): 在配对过程中使用的 128 位临时密钥,用于生成 STK
STK(Short Term Key ): 配对后用于加密连接的 128 位临时密钥
LTK(Long Term Key):用于为加密连接生成贡献性会话密钥的 128 位的密钥。
EDIV(Encrypted Diversifier):是一个 16 位存储值,用于标识 LE 传统配对期间分配的 LTK。 每次分配唯一的 LTK 时都会生成一个新的 EDIV。
RAND(Random Number ):是一个 64 位存储值,用于标识 LE 传统配对期间分配的 LTK。 每次分配唯一的 LTK 时都会生成一个新的 Rand

2 BLE蓝牙连接和配对

BLE蓝牙是先LL连接,再配对,BR/EDR蓝牙是先配对,再LL连接。BLE请求连接叫scan, BR/EDR请求连接叫inquiry.

2.1 广播(advertising)

在手机跟设备B建立连接之前,设备B需要先进行广播,即设备B(Advertiser)不断发送如下广播信号,t为广播间隔。每发送一次广播包,我们称其为一次广播事件(advertising event),因此t也称为广播事件间隔。虽然图中广播事件是用一根线来表示的,但实际上广播事件是有一个持续时间的,蓝牙芯片只有在广播事件期间才打开射频模块,这个时候功耗比较高,其余时间蓝牙芯片都处于idle状态,因此平均功耗非常低。按照蓝牙spec,实际上每一个广播事件包含三个广播包,即分别在37/38/39三个通道上同时广播相同的信息。
在这里插入图片描述

2.2 连接(connnection)

在这里插入图片描述
手机在收到A1广播包ADV_IND后,以此为初始锚点(这个锚点不是连接的锚点),T_IFS后给Advertiser发送一个connection request命令,即A2数据包,告诉advertiser我将要过来连你,请做好准备。手机在发完连接请求之后会被强制延时1.25ms,紧接着是发送窗口偏移,和发送窗口。发送窗口偏移可以是0到连接间隔之间的任意值,但必须是1.25ms的整数倍。从发送窗口开始从设备必须打开RX窗口用来接收手机发过来的P1数据包。如果发送窗口结束还没有收到P1数据包,那么从设备终止监听,并会在下一个连接间隔后再次尝试。从P1开始使用数据通道。Advertiser根据connect_req命令信息做好接收准备,connect_req包含如下关键信息:
在这里插入图片描述
• Initiator: 发起连接者的mac地址,BLE的MAC地址,随机地址的最高两位应该为11b
• Advertiser: 广播者的地址mac地址
• Access Address: 接入地址。LL层使用接入地址来区分当前发送的数据是广播包还是数据包,广播包接入地址固定为0x8E89BED6,数据包使用就是该值。
• CRC initialization value: CRC初始值
• transmitWindowSize: 发送窗口大小, 单位是1.25ms
• transmitWindowOffset: 发送窗口偏移, 单位是1.25ms
• connInterval: 连接间隔 单位是1.25ms
• connSlaveLatency: 从设备延时,表示从设备可以跳过多少个连接事件。
• connSupervisionTimeout: 监控超时。单位是10ms
• Channel Map: 信道图,表示当前环境中哪一个信道可用,每一个bit表示一个信道1表示可用,0表示不可用。比如ff ff ff ff 1f(0x1fffffffff), 二进制为0001111111111111111111111111111111111111b
• masterSCA: 00100b, 休眠时钟精度, 151 ppm to 250 ppm
• hopIncrement: 110b, 跳频算法的hop值,6

connect_req其实是在告诉advertiser,手机将在Transmit Window期间发送第一个同步包(P1)给你,请在这段时间里把你的射频接收窗口打开。设备B收到P1后,T_IFS时间后将给手机回复数据包P2。一旦手机收到数据包P2,连接即可认为建立成功。后续手机将以P1为锚点(原点),Connection Interval为周期,周期性地给设备B发送Packet,Packet除了充当数据传送功能,它还有如下两个非常重要的功能:

  1. 同步手机和设备的时钟,也就是说,设备每收到手机发来的一个包,都会把自己的时序原点重新设置,以跟手机同步。
  2. 告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者(手机)称为Master或者Central,把被连接者(之前的Advertiser)称为Slave或者Peripheral。BLE通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了一个packet后,然后才能把自己的数据回传给Master。
    对于主设备而言,连接请求一旦发出就认为连接已经建立。当从设备收到连接请求时,它也认为自己已经处在连接之中,连接已经创建,但不能证明完全确立。

对上面提到的手机和设备B,在BLE通信过程中,随着时间的推移,他们的状态在发生变化,两者的关系也在发生变化,为此蓝牙spec根据不同的时间段或者状态给手机和设备B取不同的名字,即GAP层定义了如下角色:
• advertiser。 发出广播的设备
• observer或者scanner。可以扫描广播的设备
• initiator。能发起连接的设备
• master或者central。连接成功后的主设备,即主动发起packet的设备
• slave或者peripheral。连接成功后的从设备,即被动回传packet的设备
图11通过时间把observer,initiator和central串起来了,其实这三个角色是相互独立的,也就是说一个设备可以只支持observer角色,而不支持initiator和central角色。同样,图11也把advertiser和peripheral串起来了,其实advertiser和peripheral也是相互独立的,即一个设备可以只作为advertiser角色,而不支持peripheral角色.

2.3 配对绑定

2.3.1 介绍

BLE安全连接涉及以下三个关联概念:
pairing :关注安全特性和所需密钥类型的交换,比如支不支持 SC,支不支持 MITM 保护,支不支持 OOB,以及它的输入输出能力等。此外,配对过程还负责共享密钥的生成和交换。一旦共享秘钥交换完成,便会建立一个临时的加密链接来交换短期和长期密钥。
配对包括配对能力交换,设备认证,密钥生成,连接加密以及机密信息分发等过程,配对的目的有三个:加密连接,认证设备,以及生成密钥。从手机角度看,一旦设备跟手机配对成功,蓝牙配置菜单将包含该配对设备,
bonding:为后续连接存储交换密钥,从而无需再次传输密钥。
配对过程中会生成一个长期密钥(LTK,long-term Key),如果配对双方把这个LTK存储起来放在Flash中,那么这两个设备再次重连的时候,就可以跳过配对流程,而直接使用LTK对蓝牙连接进行加密,设备的这种状态称为bonding。
encryption:使用 AES-128 engine 和共享秘钥对明文数据进行加密

2.3.1 pairing详解

区别于传统蓝牙的配对过程,BLE 的配对过程发生在连接过程之后,实现的是链路层的安全。
配对过程分为三个阶段:
• Phase 1: Pairing Feature Exchange
• Phase 2 (LE legacy pairing): Short Term Key (STK) Generation
• Phase 2 (LE Secure Connections): Long Term Key (LTK) Generation
• Phase 3: Transport Specific Key Distribution
在这里插入图片描述
配对特性交换用于交换 IO 能力(IO capabilities),OOB 身份验证数据可用性(OOB
authentication data availability),认证要求(authentication requirements),密钥大小要求以及分配哪种传输特定密钥(transport specific keys)。
其中,IO 能力,OOB 身份验证数据可用性和认证要求用于决定在第二阶段使用哪种密钥生成方法。

Just Works
Numeric Comparison (Only for LE Secure Connections)
Passkey Entry
Out Of Band (OOB)
LE 传统配对使用和生成 2 个密钥:
Temporary Key (TK): 在配对过程中使用的 128 位临时密钥,用于生成 STK
Short Term Key (STK): 配对后用于加密连接的 128 位临时密钥
LE 安全连接配对使用和生成 1 个密钥:
Long Term Key(LTK): 在配对后和后续连接用于加密连接的 128 位密钥
Session Key(SK): 会话密钥,加密明文数据的128位密钥,通过STK或者LTK计算所得
SK=e(LTK, (SKDmaster || SKDslave));

Mconfirm:主机身份确认值,第二阶段身份确认,通过TK和128bit随机数计算所得
Sconfirm:从机身份确认值,第二阶段身份确认,通过TK和128bit随机数计算所得
ER/IR:128位伪随机数,第二阶段身份确认,通过TK和128bit随机数计算所得
EDIV: 加密分散器,用于产生LTK

阶段 3 是可选执行的,用于分发传输特定密钥,例如:身份解析密钥(IRK)值和身份地址信息。
阶段 3 只能在使用以下方式加密的链接上执行:

当使用 LE 传统配对时在阶段 2 生成的 STK
当使用 LE 安全连接配对时在阶段 2 生成的 LTK
当使用 BR/EDR 配对时生成的共享连接密钥

发起设备通过发送配对请求命令(Pairing Request)给响应设备来开始配对特性交换过程。

IO Capability: 描述设备是否具有输入/输出功能,例如显示器或键盘。
OOB Flag: 描述设备是否支持带外密钥交换,例如使用 NFC 或 Wi-Fi 交换密钥作为TK。
Authorization Request: 指示请求的安全属性,例如绑定,安全连接(SC),MITM 保护或在配对请求和响应数据包中不存在任何安全属性。
Maximum Encryption Key Size: 最大加密密钥大小(以字节为单位)。
Initiator Key Distribution/Generation: 表明发起者在传输特定密钥阶段请求分配/生成哪些密钥。
Responder Key Distribution/Generation: 表明发起者在传输特定密钥阶段请求响应者分配/生成 哪些密钥。

IO Capabilities
IO Capabilities 是由设备的输入能力和输出能力组合而成,表示的是设备的输入输出的能力。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 BR/EDR蓝牙连接和配对

BR/EDR蓝牙的连接参照:
https://blog.csdn.net/yk150915/article/details/86500055

4 蓝牙的安全

安全应由主设备的 Security Manager 发起,从设备为响应设备。从设备可以请求主设备发起配对或者其他的安全步骤。从设备可以通过向主设备发送 Security Request 来请求安全。
在这里插入图片描述
蓝牙的连接安全参照:
https://blog.csdn.net/weixin_42583147/article/details/93175701

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值