当前位置: 首页 > news >正文

[CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解

协议层功能
GAP:通用访问规范发现设备和连接设备
GATT:通用属性规范提供服务,服务的类别及由哪些属性构成
ATT:属性协议提供属性,GATT将这些属性组合起来构成服务
L2CAP:逻辑链路控制及自适应协议收发各方(channel)数据
HCI:主机控制接口层主机与控制器的接口(串口、USB等);分段、合并(数据量很大时)
LL:链路层确定是广播包还是数据包,加上地址(多个设备)
GAP:通用访问规范发现设备和连接设备
PHY:物理层无线收发器,运输,调频

ATT层:
则设备中的 ATT 是服务器,手机中的 ATT 是客户端;
设备中ATT定义了属性,定义了数据格式(电量、特性声明、主服务声明等数据);手机中ATT定义了方法,定义了怎么去获取属性、读写属性;
ATT中定义了请求、响应、命令、通知、指示、确认等机制;

GATT层:
GATT将ATT中的属性进行组合构成服务(电量监测服务等)
手机 GATT 层中定义了如何发现服务,读写服务中的特性(比如如何获取电量值)
手环 GATT 层定义了如何主动通知手机,某个值发生了变化
GATT层定义服务,实现服务,提供访问服务的方法
GATT严重依赖ATT,它只是在属性的基础上综合,提供一种服务

L2CAP
手机要读取某个属性,他需要ATT这一层发出一个请求,这个请求数据就经过 L2CAP(收发室)传递至设备端的 ATT;
同时,L2CAP使用channel标记数据来源,APP、ATT以及L2CAP的数据等,根据channel信息决定数据发到不同的层

LL
决定将数据发送至某个设备
重要概念:访问地址

PHY
蓝牙频率:2.4GHz左右(自然界中没有准确的东西)
将2.4GHz频段划分为40个信道
37,38,39为广播信道
0——36为数据信道

名词介绍

Bonding(绑定),配对过程中会生成一个长期密钥(LTK,long-term Key),如果配对双方把这个LTK存储起来放在Flash中,那么这两个设备再次重连的时候,就可以跳过配对流程,而直接使用LTK对蓝牙连接进行加密,设备的这种状态称为bonding。如果paring过程中不存储LTK(不分发LTK)也是可以的,paring完成后连接也是加密的,但是如果两个设备再次重连,那么就需要重走一次paring流程,否则两者还是明文通信。在不引起误解的情况下,我们经常把paring当成paring和bonding两者的组合,因为只paring不bonding的应用情况非常少见。在不引起混淆的情况下,下文就不区分paring和bonding的区别,换句话说,我们会把paring和bonding两个概念等同起来进行混用。

SM(security manager),蓝牙协议栈的安全管理层,规定了跟蓝牙安全通信有关的所有要素,包括paring,bonding,以及下文提到的SMP。

SMP(security manager protocol),安全管理协议,SMP着重两个设备之间的蓝牙交互命令序列,对paring的空中包进行了严格时序规定。

OOB(out of band,带外),OOB就是不通过蓝牙射频本身来交互,而是通过比如人眼,NFC,UART等带外方式来交互配对信息,在这里人眼,NFC,UART通信方式就被称为OOB通信方式。

Passkey,又称pin码,是指用户在键盘中输入的一串数字,以达到认证设备的目的。低功耗蓝牙的passkey必须为6位。

Numeric comparison(数字比较),numeric comparison其实跟passkey一样,也是用来认证设备的,只不过passkey是通过键盘输入的,而numeric comparison是显示在显示器上的,numeric comparison也必须是6位的数字。

MITM(man in the middle),MITM是指A和B通信过程中,C会插入进来以模拟A或者B,并且具备截获和篡改A和B之间所有通信报文的能力,从而达到让A或者B信任它,以至于错把C当成B或者A来通信。如果对安全要求比较高,需要具备MITM保护能力,在SM中这个是通过认证(authentication)来实现的,SM中实现认证的方式有三种:OOB认证信息,passkey以及numeric comparison,大家根据自己的实际情况,选择其中一种即可。

LESC(LE secure connections),又称SC,蓝牙4.2引入的一种新的密钥生成方式和验证方式,SC通过基于椭圆曲线的Diffie-Hellman密钥交换算法来生成设备A和B的共享密钥,此密钥生成过程中需要用到公私钥对,以及其他的密码算法库。LESC同时还规定了相应的通信协议以生成该密钥,并验证该密钥。需要注意的是LESC对paring的其他方面也会产生一定的影响,所以我们经常会把LESC看成是一种新的配对方式。

Legacy paring,在LESC引入之前的密钥生成方式,称为legacy paring,换句话说,legacy paring是相对LESC来说的,不支持LESC的配对即为legacy paring(legacy配对)。

TK(Temporary Key,临时密钥),legacy paring里面的概念,如果采用just work配对方式,TK就是为全0;如果采用passkey配对方式,TK就是passkey;如果采用OOB配对方式,TK就是OOB里面的信息。

STK(short term key,短期密钥),legacy配对里面的概念,STK是通过TK推导出来的,通过TK对设备A和B的随机数进行加密,即得到STK。

LTK(long term key,长期密钥),legacy配对和LESC配对都会用到LTK,如前所述,LTK是用来对未来的连接进行加密和解密用的。Legacy paring中的LTK由从设备根据相应的算法自己生成的(LTK生成过程中会用到EDIV(分散因子)和Rand(随机数)),然后通过蓝牙空中包传给主机。LESC配对过程中,先通过Diffie-Hellman生成一个共享密钥,然后这个共享密钥再对设备A和B的蓝牙地址和随机数进行加密,从而得到LTK,LTK由设备A和B各自同时生成,因此LTK不会出现在LESC蓝牙空中包中,大大提高了蓝牙通信的安全性。

IRK(Identity Resolving Key,蓝牙设备地址解析密钥),有些蓝牙设备的地址为可解析的随机地址,比如iPhone手机,由于他们的地址随着时间会变化,那如何确定这些变化的地址都来自同一个设备呢?答案就是IRK,IRK通过解析变化的地址的规律,从而确定这些地址是否来自同一个设备,换句话说,IRK可以用来识别蓝牙设备身份,因此其也称为Identity information。IRK一般由设备出厂的时候按照一定要求自动生成。

Identity Address(设备唯一地址),蓝牙设备地址包括public,random static, private resolvable,random unresolved共四类。如果设备不支持privacy,那么identity address就等于public或者random static设备地址。如果设备支持privacy,即使用private resolvable蓝牙设备地址,在这种情况下,虽然其地址每隔一段时间会变化一次,但是identity address仍然保持不变,其取值还是等于内在的public或者random static设备地址。Identity Address和IRK都可以用来唯一标识一个蓝牙设备。

IO capabilities(输入输出能力),是指蓝牙设备的输入输出能力,比如是否有键盘,是否有显示器,是否可以输入Yes/No两个确认值。

Key size(密钥长度),一般来说,密钥默认长度为16字节,为了适应一些低端的蓝牙设备处理能力,你也可以把密钥长度调低,比如变为10个字节。

相关文章:

  • 图像处理之LSB替换隐写算法的实现
  • Express的基本使用app.post()app.get()res.send()
  • java 常用工具类
  • 【web-攻击web服务器】(13.2)易受攻击的服务器软件、Web 应用程序防火墙
  • @软考考生,这份软考高分攻略你须知道
  • MogDB 3.0.0 新特性——发布订阅
  • 记一次Spark 提交任务执行缓慢之问题解决了
  • softmax函数计算时减去一个最大值的原因
  • MogDB逻辑解码与pg_recvlogical
  • OS--学习笔记:进程管理
  • CentOS8 安装Yapi
  • Git 详细教程之四: Git 对 GitHub 的配置和基本操作
  • 海外众筹:产品出海kickstarter海外众筹流程
  • JVM阶段(4)-回收策略
  • 万字长文保姆级教你制作自己的多功能QQ机器人
  • 【面试系列】之二:关于js原型
  • Android优雅地处理按钮重复点击
  • JavaScript DOM 10 - 滚动
  • Node项目之评分系统(二)- 数据库设计
  • Object.assign方法不能实现深复制
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • react 代码优化(一) ——事件处理
  • Spring Cloud Feign的两种使用姿势
  • springboot_database项目介绍
  • Spring框架之我见(三)——IOC、AOP
  • 浮现式设计
  • 前嗅ForeSpider中数据浏览界面介绍
  • 前言-如何学习区块链
  • 跳前端坑前,先看看这个!!
  • 用Python写一份独特的元宵节祝福
  • #if 1...#endif
  • $ git push -u origin master 推送到远程库出错
  • $.ajax()参数及用法
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (七)c52学习之旅-中断
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (原創) 未来三学期想要修的课 (日記)
  • (转)h264中avc和flv数据的解析
  • (转)甲方乙方——赵民谈找工作
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net web项目 调用webService
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net中的设计模式——Factory Method模式
  • .skip() 和 .only() 的使用
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @Mapper作用
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [20190113]四校联考
  • [30期] 我的学习方法