SYD8801密码加密配对【安全参数的设置说明】

SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.syd-tek.com/


SYD8801密码加密配对

    SYD8801作为从机,按照规范说明可发起SecurityReq,然后主机将进入配对流程。

    SecurityReq函数定义如下:

    uint8_t SecurityReq(uint8_t flag, uint8_t mitm);

    其中flag和mitm属于规范中的内容,如下说明:

     这些都是协议栈的内容,一般不用关心,只要记得传入1,0即可。

    此篇博客是针对密码加密的情况,所以在配对过程中协议栈会上报一个事件来获取密码:

     这里设置密码为123456!

     加密成功后会进入上图的“else if(p_evt->evt_code == GAP_EVT_ENC_KEY)”分支!

如下为安卓手机的测试流程截图(注意这里有两次配对流程,第一次确认配对,第二次输入密码):



下面是IOS的配对流程:



这里上测试源代码:

http://download.csdn.net/download/chengdong1314/10237965




安全参数的设置说明

在ble_init协议栈初始化函数中会调用SetSecParams函数初始化安全参数,比如如下代码:

   struct smp_pairing_req sec_params;   

    /* security parameters */
    sec_params.io = IO_NO_INPUT_OUTPUT;
    sec_params.oob = OOB_AUTH_NOT_PRESENT;
    sec_params.flags = AUTHREQ_BONDING;
    sec_params.mitm = 0;
    sec_params.max_enc_sz = 16;
    sec_params.init_key = 0;
    sec_params.rsp_key = (SMP_KEY_MASTER_IDEN |SMP_KEY_ADDR_INFO);

    SetSecParams(&sec_params);

    其中smp_pairing_req结构体定义如下:

/*************************************************************************************************
*结构体名:gap_pairing_req
*成员: io    配对过程中的IO能力,为枚举GAP_IO_CAPABILITY成员
                oob    配过过程中是否需要ODB,为枚举GAP_OOB_FLAG成员
                flags 配对过程中是否需要绑定
                            Bonding_Flags |
                            b1b0          |   Bonding Type
                            --------------|------------------
                            00            |   No Bonding
                            01                         |     Bonding
                            10                         |   Reserved
                            11            |   Reserved
                mitm    配对过程中是否需要中间人保护set to one if the device is requesting    MITM protection,
                            otherwise it shall be set to 0
                rsvd    保留位
                max_enc_sz    配对过程中最大的密匙长度,The maximum key size shall be in the range 7 to 16 octets.
                init_key    配对过程中初始者(主机)分配的密匙
                rsp_key    配对过程中从机分配的密匙
*说明: SYD8801的安全参数在启动的时候调用api:SetSecParams进行设置,在配对开始的时候调用api:security_req开始配对流程,其中gap_s_security_req函数也有flags和mitm两个参数,这两个参数和安全参数里的参数有冲突,这里优先使用调用gap_s_security_req传入的函数
**************************************************************************************************/

struct smp_pairing_req{    uint8_t io;    uint8_t oob;    uint8_t flags:2;    uint8_t mitm:1;    uint8_t rsvd:5;    uint8_t max_enc_sz;    uint8_t init_key;    uint8_t rsp_key;};