白名单(white list)是BLE协议中最简单、直白的一种安全机制。其原理很简单,总结如下(前面的分析文章中都有介绍):
所谓的白名单,就是一组蓝牙地址;通过白名单,可以只允许特定的蓝牙设备(白名单中列出的)扫描(Scan)、连接(connect)我们,也可以只扫描、连接特定的蓝牙设备(白名单中列出的)。
例如,如果某个BLE设备,只需要被受信任的某几个设备扫描、连接,我们就可以把这些受信任设备的蓝牙地址加入到该设备的白名单中,这样就可以有效避免其它“流氓设备”的骚扰了。
从设备程序中 ble_advertising.h 中涉及到白名单的有两个函数。如下:
1、设置白名单
2、取消白名单广播,可以被任意主设备扫描、连接。初次广播时记录广播模式,所以取消白名单重新广播也是这个广播模式。
dm基础上修改。
未添加白名单管理:
每次新设备连接都触发配对请求(手机弹窗:蓝牙配对请求),即使是大于最大绑定数量(DEVICE_MANAGER_MAX_BONDS)也触发,只是超出部分的加密信息不保存而已,但是配对还是成功的。这种情况就是已保存的设备再次连接是不会再触发配对请求。
添加白名单管理后:
添加白名单后 大于最大绑定数量(DEVICE_MANAGER_MAX_BONDS)就不能再连接(手机弹窗:配对不成功),然后就断开连接。就是只有已绑定成功的
设备才能连接,其他的设备都不能连接。所以其他设备要绑定 就先要擦除ps内的信息。
1、配置白名单数量,最好是和 (DEVICE_MANAGER_MAX_BONDS) 一样。
2、使能白名单功能。
options.ble_adv_whitelist_enabled = BLE_ADV_WHITELIST_ENABLED;
3、白名单请求处理
case BLE_ADV_EVT_WHITELIST_REQUEST:
{
ble_gap_whitelist_t whitelist;
ble_gap_addr_t * p_whitelist_addr[BLE_GAP_WHITELIST_ADDR_MAX_COUNT];
ble_gap_irk_t * p_whitelist_irk[BLE_GAP_WHITELIST_IRK_MAX_COUNT];
whitelist.addr_count = BLE_GAP_WHITELIST_ADDR_MAX_COUNT;
whitelist.irk_count = BLE_GAP_WHITELIST_IRK_MAX_COUNT;
whitelist.pp_addrs = p_whitelist_addr;
whitelist.pp_irks = p_whitelist_irk;
err_code = dm_whitelist_create(&m_app_handle, &whitelist);
APP_ERROR_CHECK(err_code);
err_code = ble_advertising_whitelist_reply(&whitelist);
APP_ERROR_CHECK(err_code);
break;
}