ESP32 C3开发实战 -7(BLE加密连接Bond)
在一些特定物联网产品,有时会遇到对BLE的GATT访问进行加密
先来看下BLE加密连接流程图
扫描&连接->安全请求->配对处理->生成加密key->链路加密,完成链路加密连接
实例项目开发时候,需要几个步骤来完成
1,BLE组件对应的SMP项设置:开启加密配对,加密连接,保存bond key到NVS
2,在这里使用:Just work bond。
ble host config:配置为:BLE_HS_IO_NO_INPUT_OUTPUT,无需输入pair key,
nimble_host_config_init
ble_hs_cfg.sm_io_cap = BLE_HS_IO_NO_INPUT_OUTPUT;//无输入,无输出设备
ble_hs_cfg.sm_bonding = 1;
ble_hs_cfg.sm_mitm = 0;
ble_hs_cfg.sm_our_key_dist |= BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID;
ble_hs_cfg.sm_their_key_dist |= BLE_SM_PAIR_KEY_DIST_ENC | BLE_SM_PAIR_KEY_DIST_ID;
3,GATT层访问安全设定,读写需加密ENC
GATT的读写权限加密设定为:BLE_GATT_CHR_F_READ_ENC和BLE_GATT_CHR_F_WRITE_ENC
* GATT services table */
staticconststructble_gatt_svc_defgatt_svr_svcs[]= {
/* Heart rate service */
{.type = BLE_GATT_SVC_TYPE_PRIMARY,
.uuid = &heart_rate_svc_uuid.u,
.characteristics =
(structble_gatt_chr_def[]){
{/* Heart rate characteristic */
.uuid = &heart_rate_chr_uuid.u,
.access_cb =heart_rate_chr_access,
.flags = BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_INDICATE |
BLE_GATT_CHR_F_READ_ENC,
.val_handle = &heart_rate_chr_val_handle},
{
0,/* No more characteristics in this service. */
}}},
/* Automation IO service */
{
.type = BLE_GATT_SVC_TYPE_PRIMARY,
.uuid = &auto_io_svc_uuid.u,
.characteristics =
(structble_gatt_chr_def[]){
/* LED characteristic */
{.uuid = &led_chr_uuid.u,
.access_cb =led_chr_access,
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_WRITE_ENC,
.val_handle = &led_chr_val_handle},
{0}},
}
{
0,/* No more services. */
},
};
