1. 白名單機制
- 白名單(white list)是BLE協議中最簡單、直白的一種安全機制。
- 所謂的白名單,就是一組藍牙地址。
- 通過白名單,可以只允許特定的藍牙設備(白名單中列出的)掃描(Scan)、連接(connect)我們。
- 也可以只掃描、連接特定的藍牙設備(白名單中列出的)。
2.2 LE Clear White List Command,將controller中的白名單清空
/*******************************************************************************
* @fn LL_ClearWhiteList
*
* @brief Clear white list
*
* input parameters
*
* @param None
*
* output parameters
*
* @param None.
*
* @return Command Status.
*/
extern bStatus_t LL_ClearWhiteList( void );
該命令的格式為:
OCF |
Command parameters |
Return Parameters |
0x0010 |
|
Status |
Status,命令執行的結果,0為success。
2.3 LE Add Device To White List Command,將指定的設備添加到白名單
/*******************************************************************************
* @fn LL_AddWhiteListDevice
*
* @brief Add a device address into white list ( support 16 MAX )
*
* input parameters
*
* @param addrType - Type of device address
* @param devAddr - first address of device address
*
* output parameters
*
* @param None.
*
* @return Command Status.
*/
extern bStatus_t LL_AddWhiteListDevice( u8 addrType, u8 *devAddr );
該命令的格式為:
OCF |
Command parameters |
Return Parameters |
0x0011 |
Address_type(1 byte) |
Status |
Address_type,設備的地址類型[1],0為Public Device Address,1為Random Device Address。
Address,設備的地址。
Status,命令執行的結果,0為success。
2.4 LE Remove Device From White List Command,將指定的設備從白名單中移除的命令
/*******************************************************************************
* @fn LL_RemoveWhiteListDevice API
*
* @brief Remove a device address from white list
*
* input parameters
*
* @param addrType - Type of device address
* @param devAddr - first address of device address
*
* output parameters
*
* @param None.
*
* @return Command Status.
*/
extern bStatus_t LL_RemoveWhiteListDevice( u8 addrType, u8 *devAddr);
該命令的格式為:
OCF |
Command parameters |
Return Parameters |
0x0012 |
Address_type(1 byte) |
Status |
Address_type,設備的地址類型[1],0為Public Device Address,1為Random Device Address。
Address,設備的地址。
Status,命令執行的結果,0為success。
最后需要說明的是,當controller處於以下三個狀態的時候,以上命令除"LE Read Resolving List Size Command"外,均不能執行:
正在advertising;
正在scanning;
正在connecting。
3. 白名單使用策略有關的命令
BLE設備在發起Advertising、Scanning或者Connecting操作的時候,可以通過Set Advertising Parameters、Set Scan Parameters或者LE Create Connection Command,設置Advertising、Scanning或者Connecting的過濾策略(Filter_Policy),具體如下:
3.1 Advertising時的白名單策略
LE Set Advertising Parameters Command的命令格式為:
OCF |
Command parameters |
Return Parameters |
0x0006 |
… |
Status |
該命令的其它參數請參考[2],Advertising_Filter_Policy的含義如下:
0x00,禁用白名單機制,允許任何設備連接和掃描。
0x01,允許任何設備連接,但只允許白名單中的設備掃描(scan data中有敏感信息?)。
0x02,允許任何設備掃描,但只允許白名單中的設備連接。
0x03,只允許白名單中的設備掃描和連接。
代碼中添加白名單,在void HidEmu_Init( ) 設備初始化中
uint8 mac0[6]={0x9d,0xa4, 0xe3, 0x7a, 0xac, 0x6d};//指定mac地址
uint8 macType=1; //指定地址類型
LL_AddWhiteListDevice(macType,mac0); //添加白名單mac
uint8 filter_policy = GAP_FILTER_POLICY_WHITE_CON;//允許任何設備掃描,但只允許白名單中的設備連接。
GAPRole_SetParameter( GAPROLE_ADV_FILTER_POLICY, sizeof( uint8 ), &filter_policy );//設置白名單
測試效果,僅白名單的mac地址主機可以搜索連接該從機,其他BLE主機只能掃描,無法連接。
參數選擇還有如下幾種可以,默認是不開白名單的
3.2 Scanning時的白名單策略(未寫實現實例)
LE Set Scan Parameters Command的命令格式為:
OCF |
Command parameters |
Return Parameters |
0x000B |
… |
Status |
Scanning_Filter_Policy的含義如下:
0x00,禁用白名單機制,接受所有的廣播包(除了那些不是給我的directed advertising packets)。
0x01,只接受在白名單中的那些設備發送的廣播包(除了那些不是給我的directed advertising packets)。
0x02,和白名單無關,不再介紹。
0x03,接受如下的廣播包:在白名單中的那些設備發送的廣播包;廣播者地址為resolvable private address的directed advertising packets;給我的給我的directed advertising packets。
注3:Scanning時的白名單策略有點奇怪,既然是主動發起的,要白名單的意義就不大了吧?
3.3 Connecting時的白名單策略(未寫實現實例)
LE Create Connection Command的命令格式為:
OCF |
Command parameters |
Return Parameters |
0x000D |
… |
Status |
Initiator_Filter_Policy的含義如下:
0x00,禁用白名單機制,使用Peer_Address_Type and Peer_Address指定需要連接的設備。
0x01,連接那些在白名單中的設備,不需要提供Peer_Address_Type and Peer_Address參數。