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.

[参考译文] CC2541:启用/禁用配对模式

Guru**** 2589300 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/592406/cc2541-enable-disable-pairing-mode

器件型号:CC2541

你(们)好

我对"GapBondMgr"的参数有点困惑。 或者至少我认为它在那里。

我的设备是一个没有显示的外围设备。 我有一个按钮。 我将 SimpleBLEPeripheral 用作起点。

我的要求如下:

1) 1)要进行新配对、用户需要先按按钮。 然后、该器件应该可见、并允许"只工作"配对。 器件应允许连接。

2) 2)如果用户未按下按钮、则器件应允许来自之前绑定的中央器件的连接、但不允许进行新的配对。

我做了以下定义:

uint32密钥= 0;//密钥"000000"
uint8线对模式= GAPBOND_Pairing_mode_wait_for_Req;
uint8 MIPTM = false;
uint8 ioCap = GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT;
uint8绑定= true;

new_adv_enable_status=true;
GAPRole_SetParameter (GAPROLE_advertise_enabled、sizeof (uint8)、new_adv_enabled_status);

这允许连接和配对。
我没有找到如何允许连接、但禁用新的配对

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ophirti、

    在成功保存绑定后、您可能希望更改配对模式-在新的连接建立期间、您必须使用 GAPBondMgr_GetParameter API 来获取绑定数。 然后检查该数字、以确保其大于1、如果按下按钮。 然后、如果允许配对、则使用 GAPBondMgr_SetParameter 将配对模式设置为 GAPBOND_Pairing_mode_no_pairing。

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。

    我按照您的建议执行了操作(设置 GAPBOND_Pairing_mode_no_pairing)。
    现在、当从我的手机进行配对时、它会按预期工作

    (在设置 GAPBOND_Pairing_mode_no_pairing 时拒绝配对、在设置 GAPBOND_Pairing_mode_wait_for_Req 时允许配对)

    但是!

    我使用 Windows (8.1版)时遇到了一些非常奇怪的问题。

    配对始终有效! 无论设置如何。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ophirti、

    听得好!

    有趣的是、您能否提供窗口问题的监听器捕获?

    Windows 计算机可能始终需要加密、因此会发出请求。 (应该已被拒绝、但一个捕获将揭示完整的故事)

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我使用完全相同的板和相同的固件进行了2次捕获。
    我使用了 TI"SmartRF 协议数据包监听器"

    1) win81_pairing.psd -显示与 Windows 8.1的配对过程

    2) 2) Android_Rejection.psd -在 Android 中显示拒绝

    我在该论坛中没有看到上传文件的选项、因此我在我们的公司服务器中放置了一个 zip 文件。
    您可以通过以下链接下载带有2个 PSD 的 zip 文件:

    www.megatone.com/.../BTCapture.zip

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    快速看一下这两个捕获-其中除了广播数据。

    尝试重新捕获、或者可能获取不同的嗅探器(如一线或 ellisys)并上传它们。

    关于上传到论坛、您需要单击"使用富格式"按钮以访问增强的发布屏幕。 (包括上传文件的功能)

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我进行了大量的调试、我认为 BLE 堆栈中有一个很大的安全漏洞。 我建议您认真检查一下。

    以下是我的调查结果:

    我按如下方式设置 GAPBOND_Pairing_mode_no_pairing:

    uint8配对模式= GAPBOND_Pairing_mode_no_pairing;
    GAPBondMgr_SetParameter( GAPBOND_Pairing_mode,sizeof ( uint8 ),&pairMode );

    BLE 框架的行为如下所示:

    在 gapbondmgr.c 文件中、函数 GAPBondMgr_ProcessGAPMsg
    起始部分为:

      案例 GAP_Pairing_REQ_EVENT:

    一切都按预期工作。 此部件正在调用、它应该:

    void GAP_TerminateAuth (pkt->connectionHandle、SMP_PAING_FAILED_NOT_SUPPORTED);

    之后、它永远不会继续。

    如果从 Windows 8.1进行连接、所有这一切都无关紧要!!!!!!
    Windows 8.1忽略绑定部件、然后继续而不绑定。 BLE 框架接受它并继续响应。

    另一方面、如果我尝试从 Android 进行连接、则没有问题。 Android 拒绝继续。

    在我看来,这里有一个安全漏洞。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您描述的 w.r.t Win 8.1行为与蓝牙规范一致、而不是"BLE 堆栈中的安全漏洞"。 在 BLE 中、安全性是可选的。  如果您担心安全性、我建议在 GATT 表中配置相关的安全权限。 如果配对/绑定尚未完成、这将阻止访问这些特征。

    祝你一切顺利

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。
    配置 BLE 堆栈的正确方法是什么、以便满足以下要求:

    1) 1)仅在按下电路板上的按钮后才允许配对
    2) 2)配对设备的连接始终有效。

    现在、如果使用 Windows 8.1、我看不到任何解决方案。
    由于以下情况、您建议使用"特征"的"安全权限"的解决方案不够好:

    1) 1)用户打开设备、不要按下按钮。 因此、该器件处于"GAPBOND_Pairing_mode_no_pairing"模式。
    2)用户未阅读我的手册(因为这是最终用户所做的)、并从 Windows 8.1进行配对
    3)配对成功。

    从现在开始、最终用户永远不会猜测他无法与器件通信的原因。 从他的角度来看,他的确进行了配对。 但这是错误配对。 不允许使用安全权限读取特征的配对。