在BLE蓝牙低功耗开发过程中,配对、绑定、加密是保障蓝牙通信安全的核心环节,很多开发者容易将三者混为一谈,在瑞萨SmartBond SDK 6.0.24开发过程中,区分三者逻辑,掌握配对机制与配置文件,对蓝牙安全功能实现至关重要。

一、分清配对、绑定、加密三者的区别

配对(Pairing):两台BLE设备互相协商安全能力,完成身份校验,生成本次连接使用的加密密钥。加密(Encryption):链路层利用已经生成的密钥,对当前连接传输的数据做加密保护。绑定(Bonding):存储配对产出的LTK、IRK、CSRK以及对端设备身份信息,设备断电重连之后,可依靠保存的密钥直接恢复加密连接,无需重复配对。

三者可以组合出多种连接状态:

  1. 不配对、不绑定:通信全程明文传输,每次连接都是明文;

  2. 配对、不绑定:当前连接可以开启加密,设备断开重启后,再次连接需要重新执行配对流程;

  3. 配对并绑定:当前连接加密,断电重连时,直接读取保存的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示例工程,完成蓝牙安全功能开发。