解析SmartBond SDK6.0.24:BLE配对、绑定与加密机制及配置要点
在BLE蓝牙低功耗开发过程中,配对、绑定、加密是保障蓝牙通信安全的核心环节,很多开发者容易将三者混为一谈,在瑞萨SmartBond SDK 6.0.24开发过程中,区分三者逻辑,掌握配对机制与配置文件,对蓝牙安全功能实现至关重要。
一、分清配对、绑定、加密三者的区别
配对(Pairing):两台BLE设备互相协商安全能力,完成身份校验,生成本次连接使用的加密密钥。加密(Encryption):链路层利用已经生成的密钥,对当前连接传输的数据做加密保护。绑定(Bonding):存储配对产出的LTK、IRK、CSRK以及对端设备身份信息,设备断电重连之后,可依靠保存的密钥直接恢复加密连接,无需重复配对。
三者可以组合出多种连接状态:
不配对、不绑定:通信全程明文传输,每次连接都是明文;
配对、不绑定:当前连接可以开启加密,设备断开重启后,再次连接需要重新执行配对流程;
配对并绑定:当前连接加密,断电重连时,直接读取保存的LTK密钥快速恢复加密链路。
在SmartBond SDK 6.0.24中,是否开启绑定,由user_security_conf.auth里的GAP_AUTH_BOND位控制。只有该标记置位,配对成功后,SDK才会调用app_easy_security_bdb_add_entry()函数,把绑定信息存入本地。该段逻辑代码位于app_default_handlers.c和app_bond_db.c文件内。
二、SDK支持的两套BLE配对机制
SmartBond SDK6.0.24提供Legacy Pairing与**LE Secure Connections(LESC安全连接)**两套配对方案,底层算法、密钥生成逻辑完全不同。
1. Legacy Pairing传统配对
传统配对不使用ECDH椭圆曲线算法。通信双方协商得到临时密钥TK,再结合双方随机数生成STK短期密钥,依靠STK加密本次配对过程。
如果开启绑定功能,配对第三阶段会分发LTK、EDIV、Rand、IRK、CSRK等密钥,用于后续重连。
在这套模式中,LTK密钥由应用层代码app_sec_gen_ltk生成,开发者可以设置密钥长度、随机数、EDIV值,源码位置在app_security.c文件中。
2. LE Secure Connections(LESC安全连接)
LESC采用P‑256 ECDH椭圆曲线密钥交换算法。两台设备互相交换公钥,本地私钥配合对方公钥计算得到DHKey,协议栈结合随机nonce衍生MacKey以及LTK长期密钥。
需要注意,该模式下的密码输入、数字比较功能,作用是校验ECDH公钥交换过程有没有中间人篡改,并不是直接把6位数字扩展成为LTK密钥。
SDK协议栈完整实现P‑256公私钥处理、数字比较、Passkey20轮比特校验、LTK与DHKey校验等逻辑。LESC产生的LTK通过GAPC_LTK_EXCH事件上报给应用,SDK依靠EDIV等于0来区分LESC生成的LTK,并存入安全环境变量中。相关接口定义存放于smpc_api.h、smpc.h头文件。
三、多层配置共同决定最终BLE安全行为
BLE安全模式不是由单一宏定义控制,而是多个配置文件多层叠加生效,开发时务必确认工程编译实际加载的芯片配置头文件(DA14531/DA14535/DA14585对应不同配置头)。主要配置文件功能如下:
| 配置文件 | 核心作用 |
|---|---|
| da145xx_config_basic.h | 控制是否编译Application Security安全模块、外部Flash存储、加密存储功能 |
| da145xx_config_advanced.h | 开关LESC安全连接、TRNG真随机数、ChaCha20伪随机数发生器 |
| user_config.h | 配置IO能力、OOB、认证请求、密钥长度、密钥分发策略、最低安全等级 |
| user_callback_config.h | 注册配对、TK交互、LTK处理、配对完成的回调函数 |
实际开发调试的时候,需要同步检查编译开关、宏配置、业务回调三者,才能得到预期的配对、绑定加密效果。
总结:BLE安全开发,先要理清配对、加密、绑定的概念边界,根据产品安全需求选择Legacy或者LESC配对方式,逐层核对配置头文件,参考
ble_app_security示例工程,完成蓝牙安全功能开发。
声明:本站内容均为原创,转载或引用本文请注明出处并保留原文链接。
