一、前言
本篇将结合抓包数据和蓝牙协议文件,讲解配对的第二阶段链接层主机发送的LL_ENC_REQ指令。
二、阅读说明
1、泰凌微芯片学习者,前期使用过该芯片。
2、能够知道怎么进行创建工程,下载代码。
3、有一块开发板,板上的芯片可以是8251,8253或者8258。
三、正文
1、使用的SDK使用的sdk和demo为该篇文章描述的“手把手教你:BLE设备如何和手机进行加密配对绑定”;
2、配对第二阶段所处的位置
如上图红色框出来的,这个是配对第二阶段,在第二阶段的时候我们使用的是Just Works方式,见上图红色圈出来的。
3、链接层时序所处的位置
如上图所示,链接层的时序位置处于配对第二阶段的最后面,在主从机计算完了STK的后面。
4、LL_ENC_REQ所处的位置
5、LL_ENC_REQ命令在蓝牙协议中的解释
- LL_ENC_REQ的操作码:0x03Rand:64 bitsEDIV:16 bitsSKDm:主机的会话密钥IVm:主机的初始化向量
备注:Rand和EDIV,只有在重连接的时候才会使用,第一次配对的时候不会被使用。SKDm和IVm,是用来给后续的加密算法AES-CCM的使用的,这里只传输的是主机的这两个值,后续从机也会传输这两个值的,到时候需要配合着一起使用,本篇文章暂不涉及这块,之后的文章会涉及。
6、LL_ENC_REQ空中抓包数据
- 操作码:0x03Random Number:也就是协议里面的Rand,该值为0Encrypted Diversifier:也就是协议里的EDIV,值为0Master Session Key Diversifier:协议里面的SKDm,值为8966774459615725574Master Session Initialization Vector:协议里面的IVm,值为1301957319
五、结尾
本篇分析了配对流程中第二阶段中链接层LL_ENC_REQ,下一篇将分析从机的LL_ENC_RSP指令。
我写了一个合集,不依赖 Nordic、泰凌、瑞萨等厂商商用 BLE 协议栈,从无线底层链路层入手,从零手写 BLE 广播扫描逻辑,拆解蓝牙广播包、信道切换、射频调度、广播数据解析完整流程,适合想吃透 BLE 底层、自主开发蓝牙工具、规避商用协议栈授权限制的嵌入式开发者。
137