一、前言
上一篇文章“手把手教你:解析 BLE 链路层 LL_ENC 指令与会话密钥生成原理”,中有对IV进行描述,那么这个IV到底是起什么作用的呢。因为我们后需要对BLE的Payload进行加解密,在加解密的时候会使用AES-CCM算法,这个算法会用到NONCE,NONCE里面就包含了IV,下面会此进行详细的讲解。
二、阅读说明
1、泰凌微芯片学习者,前期使用过该芯片。
2、能够知道怎么进行创建工程,下载代码。
3、有一块开发板,板上的芯片可以是8251,8253或者8258。
三、正文
1、使用的SDK使用的sdk和demo为该篇文章描述的“手把手教你:BLE设备如何和手机进行加密配对绑定”;
2、NONCE的组成
组成如下:
39bit的包计数器:每次连接从0开始计时,可以看图中的0~4个字节。
1bit的方向计数器:图中的第4字节的bit7,当主机发送时为1,当从机发送时为0。
8字节的IV:初始话向量,这篇“手把手教你:解析 BLE 链路层 LL_ENC 指令与会话密钥生成原理”文章中讲解,在此不再赘述。图中的5~12字节。
3、NONCE的作用用来参与消息完整性的计算和Payload的加解密。感兴趣的读者可以参考BLE 5.3 Vol 6 Part E: Low Energy Link Layer Security章节
五、结尾
本篇解释了IV在加密算法AES-CCM中的作用,下一篇将继续讲解配对第二阶段的指令。
我写了一个合集,不依赖 Nordic、泰凌、瑞萨等厂商商用 BLE 协议栈,从无线底层链路层入手,从零手写 BLE 广播扫描逻辑,拆解蓝牙广播包、信道切换、射频调度、广播数据解析完整流程,适合想吃透 BLE 底层、自主开发蓝牙工具、规避商用协议栈授权限制的嵌入式开发者。
38