• 正文
  • 相关推荐
申请入驻 产业图谱

手把手教你:解析 BLE 链路层 LL_ENC 指令与会话密钥生成原理

5小时前
39
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、前言

链路层LL_ENC_REQ和LL_ENC_RSP指令在第一次进行配对的时候,数据结构里面会携带彼此设备的会话密钥分散因子和初始化向量,这两个参数对之后在加解密的时候会进行参与,本篇主要是对LL_ENC_REQ和LL_ENC_RSP做一个总结,并解释为什么这两条指令中的数据会对加解密产生影响。

二、阅读说明

1、泰凌微芯片学习者,前期使用过该芯片。

2、能够知道怎么进行创建工程,下载代码。

3、有一块开发板,板上的芯片可以是8251,8253或者8258。

三、正文

1、使用的SDK使用的sdk和demo为该篇文章描述的“手把手教你:BLE设备如何和手机进行加密配对绑定”;

2、配对第二阶段所处的位置

如上图红色框出来的,这个是配对第二阶段,在第二阶段的时候我们使用的是Just Works方式,见上图红色圈出来的。

3、链接层时序所处的位置

如上图所示,链接层的时序位置处于配对第二阶段的最后面,在主从机计算完了STK的后面。

4、LL_ENC_REQ和LL_ENC_RSP在链接层时序中所处的位置

5、LL_ENC_REQ和LL_ENC_RSP的数据结构5.1、LL_ENC_REQ的数据结构

    LL_ENC_REQ的操作码:0x03Rand:64 bitsEDIV:16 bitsSKDm:主机的会话密钥分散因子IVm:主机的初始化向量

5.2、LL_ENC_RSP的数据结构

    LL_ENC_RSP的操作码:0x04SKDs:从机的会话密钥分散因子IVs:从机的初始化向量

6、组合成会话密钥分散因子(SDK)和初始化向量(IV)

6.1、会话密钥分散因子(SDK)会话密钥分散因子(SKD):该值由主机的LL_ENC_REQ指令和从机的LL_ENC_RSP指令中的SKDm和SKDs组成,两则合并而成,例如:SKDm和SKDs为:

SKDm (LSO to MSO) :0x13:0x02:0xF1:0xE0:0xDF:0xCE:0xBD:0xAC:
SKDs (LSO to MSO) :0x79:0x68:0x57:0x46:0x35:0x24:0x13:0x02:

SKD为:

SKD (LSO to MSO) :0x13:0x02:0xF1:0xE0:0xDF:0xCE:0xBD:0xAC:0x79:0x68:0x57:0x46:0x35:0x24:0x13:0x02:

备注:该SKD是用于后续生成会话密钥SK的,该SK是用于给AES-CCM使用的。SKD的组成方式为从机的SKDs是最高位,主机的SKDm为低位。
6.2、初始化向量(IV)初始化向量(IV):该值由主机的LL_ENC_REQ指令和从机的LL_ENC_RSP指令中的IVm和IVs组成,两则合并而成,例如:IVm和IVs为:

IVm (LSO to MSO) :0x24:0xAB:0xDC:0xBA
IVs (LSO to MSO) :0xBE:0xBA:0xAF:0xDE

IV为:

IV (LSO to MSO) :0x24:0xAB:0xDC:0xBA:0xBE:0xBA:0xAF:0xDE

备注:该IV是用于后续的AES-CCM加密使用的,该算法是用于给链路层数据加密用的。IV的组成方式为从机的IVs是最高位,主机的IVm为低位。

7、计算会话密钥(SK)该会话密钥(SK)的作用是给后续的加密算法AES-CCM提供密钥,其中AES-CCM算法是用来给后续的链路层进行加密的。使用算法如下:

上图中的e是AES128算法,其中只要数据key和明文就能得到密文,其中我们要计算会话密钥,那么key使用的是之前第二阶段配对计算得到的STK,铭文(plaintextData)就是第6小节计算出来的会话密钥分散因子SKD:SK = e(STK,SKD)例如:STK = 0x4C68384139F574D836BCF34E9DFB01BF (MSO to LSO)SKD = 0x0213243546576879ACBDCEDFE0F10213 (MSO to LSO)SK = 0x99AD1B5226A37E3E058E3B8E27C2C666 (MSO to LSO)AES128在线计算网址:https://www.toolhelper.cn/SymmetricEncryption/AES

五、结尾

本篇分析了链路层LL_ENC_REQ和LL_ENC_RSP中指令中SDKm,SDKs的作用,并分析了如何生成会话密钥SK,下一篇将讲解下IV的作用我写了一个合集,不依赖 Nordic、泰凌、瑞萨等厂商商用 BLE 协议栈,从无线底层链路层入手,从零手写 BLE 广播扫描逻辑,拆解蓝牙广播包、信道切换、射频调度、广播数据解析完整流程,适合想吃透 BLE 底层、自主开发蓝牙工具、规避商用协议栈授权限制的嵌入式开发者。

相关推荐