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.

[参考译文] CC2340R5:在 TI CC2340 上拦截 BLE 配对请求的实施建议

Guru**** 2905440 points

Other Parts Discussed in Thread: CC2340R5

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1632947/cc2340r5-implementation-advice-for-intercepting-ble-pairing-request-on-ti-cc2340

器件型号: CC2340R5

尊敬的 TI 支持团队:

我谨代表我的客户发送此邮件、他目前正在使用 TI CC2340 (BLE5-Stack) 为医疗产品开发一个项目。

他们对 BLE 安全和配对过程有定制要求、我想征询您对官方最佳实践的建议。

【应用场景和要求】
客户希望保持对配对过程的动态控制。 其预期流程如下:
当手机  向设备 (CC2340) 发送配对请求时、他们希望设备上的应用层“截取“此请求。 然后、应用程序层将动态评估当前系统状态、并决定执行以下任一操作:

  1. 接受配对: 设备以 配对响应进行回复、从而允许配对过程正常继续。

  2. 拒绝配对: 设备以 错误代码 (例如不支持配对或其他特定错误代码)进行回复、以立即中止配对。

【信息请求】
为帮助客户在应用层实现这种动态拦截和决策、请提供以下见解:

  1. 正式建议(最佳做法):
    TI 在 CC2340 上实现此目的的建议方法是什么? BLE 栈是否提供用于此特定用途的标准 API/回 调?

  2. 预防措施和潜在风险:
    在引入这种动态截获机制时、他们是否有任何具体的考虑? (例如,潜在影响,状态机管理或未来 SDK 更新的兼容性问题)。

  3. 参考资源:
    您是否有任何演示类似场景的参考代码、示例项目或应用手册?

感谢您的时间和支持。 我期待与客户分享您的专业建议。

此致、

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

    您好、

    感谢您联系我们。 F3 SDK 提供了几种在应用程序级别处理配对请求的方法。 您可以通过以下 API 拒绝所有配对、而不是开始处理所有配对请求:

    // To REJECT all incoming pairing requests:
    uint8_t noPairing = GAPBOND_PAIRING_MODE_NO_PAIRING;  // 0x00
    GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &noPairing);
    
    // To ACCEPT incoming pairing requests again:
    uint8_t waitForReq = GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;  // 0x01
    GAPBondMgr_SetParameter(GAPBOND_PAIRING_MODE, sizeof(uint8_t), &waitForReq);

    BLEAPPUTIL 框架确实可以为您处理很多这方面的工作。 收到配对请求后、您将收到可决定接受或拒绝配对尝试的特定事件。 这可以通过  BLEAPPUTIL_PAIRING_STATE_STARTED 事件中的 GAP_TerminateAuth () 函数来完成。  当收到配对请求时会收到 BLEAPPUTIL_PAIRING_STATE_STARTED 事件、以便您可以单独处理每个请求。  

    我不会预见到这种方法有什么具体问题。

    我建议从 basic_ble 开始并查看 app_pairing.c 文件。 类似于以下代码片段的内容可能是一个很好的起点(App_isSystemReadyForPairing 将是用于检查状态的自定义函数)

            case BLEAPPUTIL_PAIRING_STATE_STARTED:
            {
                // Pairing request received — evaluate system state now
                if (!App_isSystemReadyForPairing())
                {
                    // Abort the pairing with a spec-compliant error code
                    GAP_TerminateAuth(pData->connHandle,
                                      SMP_PAIRING_FAILED_NOT_SUPPORTED);
                }
                break;
            }

    此致、

    1 月

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

    尊敬的 TI 支持团队

    感谢您的答复。

    基于支柱、

    如何在客户端(配对 DHKey 检查)和服务器(配对 DHKey 检查)之间插入检查点?

    祝你一切顺利

    Baboo

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

    嗨、Baboo、

    您能解释一下设置检查点的目的是什么吗? 可能无法在该精确点放置断点。 您可以在发送配对请求后添加断点、但您可能无法保证在服务器响应之前它尚未执行。

    此致、

    1 月

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

    您好、Jan

    我的目标是避免 iphone 绑定 信息  与外围设备不同步

    步骤如下所示

    1.[iphone]开始安全连接配对 (nRfconnect)

    2.【外设】用户可能有 2 个选择(在 BLE 超时周期内)

               2.1 用户等待一段时间按下按钮,然后确认并 SMP 继续运行,保存绑定信息      、完成连接

               2.2 用户等待一段时间按下按钮   、然后拒绝和 SMP 拒绝      、 保存绑定信息、可能断开连接

    步骤 2 需要在生成绑定信息之前进行检查、否则 iphone 会保存它、但外设不保存它会导致重新连接被拒绝。

    祝你一切顺利

    Baboo

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

    嗨、Baboo、

    对延迟深表歉意。 CC2340R5 端收到配对事件后、您可能会拒绝配对、这会导致 iPhone 无法保存绑定。  

    此致、

    1 月

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

    您好、Jan、

    感谢您的反馈。

    我们 代表 Baboo 跟进此主题 、以确保我们清楚地了解他们即将开展的项目的实施细节。

    Baboo 目前正处于  为新设计评估 CC2340R5 的重要阶段。

    可靠管理配对过程并确保绑定同步的能力是其产品用户体验的关键要求。 

    如果我们可以确认此“等待确认“流程在 F3 协议栈上得到完全支持和可解算、将正式评估 CC2340R5 在这个新项目中的采用情况。

    为帮助我们得出结论、请提供以下方面的更具体技术指导:

    1. 截取点:  GapBondMgr (例如,通过 pairStateCB)内 、哪个事件允许应用  生成任何绑定数据或将任何绑定数据提交到 NV 存储器之前截取配对请求?

    2. 保持 SMP 流程: 在等待物理按钮按压时、建议使用什么方法来“暂停“配对流程? 在此期间(SMP 超时之前)、连接必须保持稳定。

    3. 正确的 API 使用: 一旦用户通过按下按钮提供手动确认、应使用哪个 API 来恢复并“接受“或“拒绝“流程? 对于 F3 栈、 GAPBonds Mgr_Passcode 是否 是处理此问题的预期方法?

    如果您可以提供一个简短的代码片段或将我们指向 basic_ble 示例中的相关部分、则可以极大地加快 Baboo 的评估过程。

    我们感谢您的专业知识,并期待您的指导,这将有助于我们的平台选择。

    此致、

    Mike

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

    您好、Jan、  

    我非常希望就这一主题提供任何指导或评论。

    非常感谢您抽出宝贵的时间并持续提供支持!

    此致、

    Mike

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

    您好、Jan

    可能需要以下两点的更多详细信息、您能提供更多说明吗、谢谢!

    1. 暂停机制: 如何在外设等待物理按键确认配对时保持连接并防止超时。
    2. 特定 API 命令: 应调用哪个确切的 API 来在手动干预后恢复、接受或拒绝配对过程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    对延迟深表歉意。 有关所提问题的一些信息、请参阅以下内容:

    截取点:  GapBondMgr 内 (例如通过 pairStateCB) 、哪个事件允许应用  生成任何绑定数据或将任何绑定数据提交到 NV 内存之前截取配对请求?

    BLEAPPUTIL_PAIRING_STATE_STARTED 是正确的事件。 它在发送配对响应之前从 gapbondmgr.c 发送、这是最早可能的拦截点、未向 NV 写入任何内容。 作为参考、仅当 BLEAPPUTIL_PAIRING_STATE_Bond_SAVED 触发(这是配对序列中的最后一个事件)时才提交 NV

     暂停 SMP 进程:在等待物理按钮按压时、建议采用什么方法来“暂停“配对过程? 在此期间(SMP 超时之前)、连接必须保持稳定。

    等待确认流程的正确机制是密码回调(BLEAPPUTIL_PASD_TYPE 处理程序)。 堆栈在密钥交换阶段(在配对请求/响应之后、配对完成之前和任何 NV 写入之前)调用此回调。 关键的是,堆栈在此点无限期地等待,直到调用 Mgr_Passcode (),因此在用户交互时连接保持正常。

    要触发密码回调、请将 IO 功能配置为需要用户交互的模式。 对于外设上的简单按钮确认流程、GAPBOND_IO_CAP_DISPLAY_YS_NO 与 iOS 进行数字比较(LE 安全连接)、这是推荐用于医疗产品的方法。 GAPBOND_IO_CAP_keyboard_only 是另一种选择(密钥输入)。

    在 SYSCFG 中、确保将 IO 功能设置为允许输入和显示。  在密码回调中:不要直接调用 Mgr_Passcode ()。 将事件发布到您的应用程序任务并返回。 应用任务随后会等待 GPIO 按钮事件、然后再调用 Mgr_Passcode ()。 SMP 协议有 30 秒的超时 (GAP_PARAM_SM_TIMEOUT、默认值为 30,000ms)、因此必须在该窗口内按下按钮。

    正确的 API 用法: 一旦用户通过按下按钮提供手动确认、应使用哪个 API 来继续并“接受“或“拒绝“流程? 对于 F3 栈、 GAPBonds Mgr_Passcode 是否 是处理此问题的预期方法?

    是的、GAPBondr Mgr_Passcode () 是此流程的预期 API。

    • 接受(用户按确认):GAPBondr Mgr_Passcode rsp (connHandle、Success、numComparison)—传递 pData->numComparison(如果数字比较处于活动状态);如果使用固定代码输入 Passkey、则传递 0。
    • 拒绝(用户按 REJECT 或 SMP 超时):GAPBondr Mgr_Passcode rsp (connHandle、SMP_PAIRING_FAILED_PASSE_ENTRY_FAILED、0

    当您以失败状态通过 GAPBonds Mgr_Passcode 拒绝时、堆栈会向 iPhone 发送 SMP 配对失败的 PDU。 iPhone 不应保存任何债券记录。 这直接解决了 Baboo 的同步问题:由于配对从未完成,两端都没有绑定数据。