白名單(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;
}