This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2640蓝牙密码配对出现的漏洞

Other Parts Discussed in Thread: CC2640, CC2541

问题现象:CC2640作为蓝牙发起设备,设置为需要密码配对但不绑定模式(密码设置为123456),分别采用IOS和Android蓝牙APP进行测试,现象如下:

1. 当使用IOS系统中蓝牙APP——LightBlue进行连接CC2640设备时,IOS手机端弹出配对框,此时必须输入密码才能与设备正常连接通讯,但这个输入的密码只要包含了正确的密码就可以连接,正确密码为“123456”,但我输入如“0123456”、“12345678”、“0123456789”等这样的密码均可以正常连接通讯。

2. 当使用Android系统中蓝牙APP进行连接CC2640设备时,Android手机端选择不输入任何密码,此时也可以正常连接该设备,通讯也正常。

请问这两个现象是什么原因导致,怎么解决啊?

  • 连接跟配对是独立的,无论配对是否正确,连接是正常的。

    方便把你的配置发出来吗?使用时如果禁止了IO capacity,会使用just works完成配对

  • 这是配置:

    // Setup the GAP //BY ZCX TGAP_CONN_PAUSE_PERIPHERAL参数更新请求
    GAP_SetParamValue(TGAP_CONN_PAUSE_PERIPHERAL, DEFAULT_CONN_PAUSE_PERIPHERAL);

    // Setup the GAP Peripheral Role Profile
    {
    // For all hardware platforms, device starts advertising upon initialization
    uint8_t initialAdvertEnable = TRUE;

    // By setting this to zero, the device will go into the waiting state after
    // being discoverable for 30.72 second, and will not being advertising again
    // until the enabler is set back to TRUE
    uint16_t advertOffTime = 0;

    uint8_t enableUpdateRequest = DEFAULT_ENABLE_UPDATE_REQUEST;//BY ZCX使能请求更新
    uint16_t desiredMinInterval = DEFAULT_DESIRED_MIN_CONN_INTERVAL;//BY ZCX最小连接间隔
    uint16_t desiredMaxInterval = DEFAULT_DESIRED_MAX_CONN_INTERVAL;//BY ZCX最大连接间隔
    uint16_t desiredSlaveLatency = DEFAULT_DESIRED_SLAVE_LATENCY;//BY ZCX从潜伏期
    uint16_t desiredConnTimeout = DEFAULT_DESIRED_CONN_TIMEOUT;//BY ZCX监督超时

    // Set the GAP Role Parameters
    GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t),
    &initialAdvertEnable);//BY ZCX 广播使能
    GAPRole_SetParameter(GAPROLE_ADVERT_OFF_TIME, sizeof(uint16_t),
    &advertOffTime);//BY ZCX 广播关闭时间

    GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData),
    scanRspData);//BY ZCX 扫描请求数据
    GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);//BY ZCX 广播数据

    GAPRole_SetParameter(GAPROLE_PARAM_UPDATE_ENABLE, sizeof(uint8_t),
    &enableUpdateRequest);//BY ZCX 从机连接参数更新使能
    GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t),
    &desiredMinInterval);//BY ZCX 最小连接时间间隔
    GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t),
    &desiredMaxInterval);//BY ZCX 最大连接时间间隔
    GAPRole_SetParameter(GAPROLE_SLAVE_LATENCY, sizeof(uint16_t),
    &desiredSlaveLatency);//BY ZCX 从机潜伏
    GAPRole_SetParameter(GAPROLE_TIMEOUT_MULTIPLIER, sizeof(uint16_t),
    &desiredConnTimeout);//BY ZCX 最大耐心等待时间????????????
    }

    // Set the GAP Characteristics
    GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName);

    // Set advertising interval
    {
    uint16_t advInt = DEFAULT_ADVERTISING_INTERVAL;//BY ZCX 广播时间间隔

    GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MIN, advInt);//BY ZCX 在限制发现模式下最小广播时间间隔
    GAP_SetParamValue(TGAP_LIM_DISC_ADV_INT_MAX, advInt);//BY ZCX 在限制发现模式下最大广播时间间隔
    GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MIN, advInt);//BY ZCX 永久广播模式下最小广播时间间隔
    GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MAX, advInt);//BY ZCX 永久广播模式下最大广播时间间隔
    }

    // Setup the GAP Bond Manager
    {
    uint32_t passkey = 123456; // passkey "000000"
    // uint8_t pairMode = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;//BY ZCX 等待配对请求
    uint8 pairMode = GAPBOND_PAIRING_MODE_INITIATE;
    uint8_t mitm = TRUE;
    uint8_t ioCap = GAPBOND_IO_CAP_DISPLAY_ONLY;//BY ZCX 只有显示
    uint8_t bonding = TRUE;

    GAPBondMgr_SetParameter(GAPBOND_DEFAULT_PASSCODE, sizeof(uint32_t), &passkey);//BY ZCX 默认密码
    GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &pairMode);//BY ZCX 配对模式
    GAPBondMgr_SetParameter(GAPBOND_MITM_PROTECTION, sizeof(uint8_t), &mitm);
    GAPBondMgr_SetParameter(GAPBOND_IO_CAPABILITIES, sizeof(uint8_t), &ioCap);
    GAPBondMgr_SetParameter(GAPBOND_BONDING_ENABLED, sizeof(uint8_t), &bonding);//BY ZCX 开启配对功能
    }


    // Initialize GATT attributes
    GGS_AddService(GATT_ALL_SERVICES); // GAP
    GATTServApp_AddService(GATT_ALL_SERVICES); // GATT attributes
    DevInfo_AddService(); // Device Information Service

  • TI 员工,你好:

    请问下“禁止了IO capacity,会使用just works完成配对”,如何配置做才会出现这个情况,

    也就是说如何禁止了IO capacity?

  • 连接与配对是两件事情,连接在配对之前。

    不输入密码而能读写特征值,这是因为你的从机代码没有把特征值加密导致的。

    详情看我个性签名档的博客地址,《CC2541之配对与绑定》。

  • 那请问下,“正确密码为“123456”,但我输入如“0123456”、“12345678”、“0123456789”等这样的密码均可以正常连接通讯;但如果输入不包含正确密码,如“234656”这样的密码就会正常显示密码错误。”,这个问题是如何导致的?

  • 不用管,特征值加密了就能正常。上面文章自己看。

  • TI员工,你好:

    我的问题依然存在,希望指点下。你看看我的配置怎么导致IO capicity禁止的吧。

    谢谢