GAP:通用访问规范 | 发现设备和连接设备 |
GATT:通用属性规范 | 提供服务,服务的类别及由哪些属性构成 |
ATT:属性协议 | 提供属性,GATT将这些属性组合起来构成服务 |
L2CAP:逻辑链路控制及自适应协议 | 收发各方(channel)数据 |
HCI:主机控制接口层 | 主机与控制器的接口(串口、USB等);分段、合并(数据量很大时) |
LL:链路层 | 确定是广播包还是数据包,加上地址(多个设备) |
GAP:通用访问规范 | 发现设备和连接设备 |
PHY:物理层 | 无线收发器,运输,调频 |
设备中的ATT是服务器,手机中的ATT是客户端;设备中ATT定义了属性,定义了数据格式;手机中ATT定义了方法,定义了怎么去获取属性、读写属性;ATT中定义了请求、响应、命令、通知、指示、确认等机制;
ATT协议是为了允许设备读写保存在Server上的数据值。每个存储值就是一个属性。ATT定义了属性的内容,规定了访问属性的方法和权限。平时我们的BLE设备就是通过属性进行数据收发的。
ATT定义了两种角色:Client和Server。Server:存储属性,接收Client的ATT请求,命令和确认。Client:接收Server的应答,指示和通知。
GATT将ATT中的属性进行组合构成服务手机GATT层中定义了如何发现服务,读写服务中的特性手环GATT层定义了如何主动通知手机,某个值发生了变化GATT层定义服务,实现服务,提供访问服务的方法GATT严重依赖ATT,它只是在属性的基础上综合,提供一种服务。
GATT是建立在ATT之上的。为传输数据建立通用操作和框架。GATT也定义了两种角色:Server和Client。GATTClient也是一个ATTClient,GATTServer也是一个ATTServer,所以GATT角色不需要去专门绑定ATT角色。Server:一般就是进行广播,被连接的设备。Client:一般就是进行扫描,然后主动去连接的设备GATT还指定了GATTServer上包含的数据格式。由属性协议传输的属性被格式化为服务和特征。来看看下:
L2CAP手机要读取某个属性,他需要ATT这一层发出一个请求,这个请求数据就经过L2CAP传递至设备端的ATT;L2CAP使用channel标记数据来源,APP、ATT以及L2CAP的数据等,根据channel信息决定数据发到不同的层
LL决定将数据发送至某个设备重要概念:访问地址
PHY蓝牙频率:4GHz左右将4GHz频段划分为40个信道37,38,39为广播信道0——36为数据信道
Bonding,配对过程中会生成一个长期密钥,如果配对双方把这个LTK存储起来放在Flash中,那么这两个设备再次重连的时候,就可以跳过配对流程,而直接使用LTK对蓝牙连接进行加密,设备的这种状态称为bonding。如果paring过程中不存储LTK也是可以的,paring完成后连接也是加密的,但是如果两个设备再次重连,那么就需要重走一次paring流程,否则两者还是明文通信。在不引起误解的情况下,我们经常把paring当成paring和bonding两者的组合,因为只paring不bonding的应用情况非常少见。在不引起混淆的情况下,下文就不区分paring和bonding的区别,换句话说,我们会把paring和bonding两个概念等同起来进行混用。
SM,蓝牙协议栈的安全管理层,规定了跟蓝牙安全通信有关的所有要素,包括paring,bonding,以及下文提到的SMP。
SMP,安全管理协议,SMP着重两个设备之间的蓝牙交互命令序列,对paring的空中包进行了严格时序规定。
OOB,OOB就是不通过蓝牙射频本身来交互,而是通过比如人眼,NFC,UART等带外方式来交互配对信息,在这里人眼,NFC,UART通信方式就被称为OOB通信方式。
Passkey,又称pin码,是指用户在键盘中输入的一串数字,以达到认证设备的目的。低功耗蓝牙的passkey必须为6位。
Numericcomparison,numericcomparison其实跟passkey一样,也是用来认证设备的,只不过passkey是通过键盘输入的,而numericcomparison是显示在显示器上的,numericcomparison也必须是6位的数字。
MITM,MITM是指A和B通信过程中,C会插入进来以模拟A或者B,并且具备截获和篡改A和B之间所有通信报文的能力,从而达到让A或者B信任它,以至于错把C当成B或者A来通信。如果对安全要求比较高,需要具备MITM保护能力,在SM中这个是通过认证来实现的,SM中实现认证的方式有三种:OOB认证信息,passkey以及numericcomparison,大家根据自己的实际情况,选择其中一种即可。
LESC,又称SC,蓝牙2引入的一种新的密钥生成方式和验证方式,SC通过基于椭圆曲线的Diffie-Hellman密钥交换算法来生成设备A和B的共享密钥,此密钥生成过程中需要用到公私钥对,以及其他的密码算法库。LESC同时还规定了相应的通信协议以生成该密钥,并验证该密钥。需要注意的是LESC对paring的其他方面也会产生一定的影响,所以我们经常会把LESC看成是一种新的配对方式。
Legacyparing,在LESC引入之前的密钥生成方式,称为legacyparing,换句话说,legacyparing是相对LESC来说的,不支持LESC的配对即为legacyparing。
TK,legacyparing里面的概念,如果采用justwork配对方式,TK就是为全0;如果采用passkey配对方式,TK就是passkey;如果采用OOB配对方式,TK就是OOB里面的信息。
STK,legacy配对里面的概念,STK是通过TK推导出来的,通过TK对设备A和B的随机数进行加密,即得到STK。
LTK,legacy配对和LESC配对都会用到LTK,如前所述,LTK是用来对未来的连接进行加密和解密用的。Legacyparing中的LTK由从设备根据相应的算法自己生成的和Rand),然后通过蓝牙空中包传给主机。LESC配对过程中,先通过Diffie-Hellman生成一个共享密钥,然后这个共享密钥再对设备A和B的蓝牙地址和随机数进行加密,从而得到LTK,LTK由设备A和B各自同时生成,因此LTK不会出现在LESC蓝牙空中包中,大大提高了蓝牙通信的安全性。
IRK,有些蓝牙设备的地址为可解析的随机地址,比如iPhone手机,由于他们的地址随着时间会变化,那如何确定这些变化的地址都来自同一个设备呢?答案就是IRK,IRK通过解析变化的地址的规律,从而确定这些地址是否来自同一个设备,换句话说,IRK可以用来识别蓝牙设备身份,因此其也称为Identityinformation。IRK一般由设备出厂的时候按照一定要求自动生成。
IdentityAddress,蓝牙设备地址包括public,randomstatic,privateresolvable,randomunresolved共四类。如果设备不支持privacy,那么identityaddress就等于public或者randomstatic设备地址。如果设备支持privacy,即使用privateresolvable蓝牙设备地址,在这种情况下,虽然其地址每隔一段时间会变化一次,但是identityaddress仍然保持不变,其取值还是等于内在的public或者randomstatic设备地址。IdentityAddress和IRK都可以用来唯一标识一个蓝牙设备。
IOcapabilities,是指蓝牙设备的输入输出能力,比如是否有键盘,是否有显示器,是否可以输入Yes/No两个确认值。
Keysize,一般来说,密钥默认长度为16字节,为了适应一些低端的蓝牙设备处理能力,你也可以把密钥长度调低,比如变为10个字节。
蓝牙服务解析
Service–服务简单理解就是提供某项服务或功能。比如心率,电池监测等都可以定义为一个服务。系统可以有两种service:主要和次要primary:提供设备的主要功能secondary:提供设备的附加功能Includedservices–包含服务类似于包含头文件,就是将其他共用的服务包含进来。Characteristic–特征可以理解为服务中的某个特性,比如心率服务,就会有个心率值,心率值就可以定义为一个Characteristic。Properties–属性这里的属性和上面的Attribute不一样。这里的属性定义的是Read/Write/Notify/Indicate等,用于声明Characteristic是否可读可写等属性。Value–值用来保存数值的。Descriptor–描述符用于描述Characteristic,让用户更能理解该Characteristic的作用和如何使用。
文章为作者独立观点,不代表股票交易接口观点