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.

[参考译文] CC2652R7:GATT 读取身份验证不足(iOS 设备)

Guru**** 2589265 points
Other Parts Discussed in Thread: BLE-STACK, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1122013/cc2652r7-gatt-read-authentication-is-insufficient-ios-device

器件型号:CC2652R7
Thread 中讨论的其他器件:BLE-STACKSysConfig

您好!

我的项目基于 simple_peripheral 示例、我使用的 SDK 是 simplelink_cc13xx_cc26xx_sdk_5_40_00_40。

我的一些特征具有 GATT_permissing_encrypt_read 权限。 我的 bond_mgr 参数如下所示。 因此、根据以下参数、我将使用 justworks 配对方法。

PAIR_param_cmd.PAIR_MODE = GAPBOND_Pairing_mode_wait_for_Req;
PAIR_param_cmd.MIPTM = false;
PAIR_param_cmd.io_cap = GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT;
PAIR_param_cmd.bond_mode = BLE_bonding_enabled;
pair_param_cmd.secure_connection =仅 GAPBOND_SECURE_CONNECT_ONLY;

  从 Android 应用成功配对后、我能够使用 GATT_permissing_encrypt_read 权限读取特征

尝试使用 iOS 应用时出现问题。 iOS 应用程序在获得读取请求的身份验证不足后自动启动配对。 在 iphone 上弹出一个配对并成功进行配对。 即使在我尝试读取特征后、我也会得到 错误域=CBATTErrorDomain Code=5"验证不足"。 两个相位。 请就此向我提供帮助。

此外、我在下面的发行说明中看到了类似的问题修复。 它是否与此相关?

software-dl.ti.com/.../release_notes_ble3stack_3_02_00_49.html

BLESTACK-2535 在 LE 安全连接验证阶段2完成后、需要加密的 GATT 过程可能会错误地返回不充分的身份验证

此致、

Madhudhan

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

    大家好、Madhusudhan、

    感谢您的查询、我已通知 BLE 团队、他们应尽快与您联系。

    此致、
    Ryan

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

    大家好、Madhusudhan、

    我相信您看到的是预期行为。 有关  详细信息、请参阅 e2e.ti.com/.../cc2640-successful-pairing-using-le-secure-connections-just-works-but-cannot-read-data。

    [引用 userid="518081" URL"~/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1122013/cc2652r7-gatt-read-authentication-is insuffice-ios-device">我在下面的发行说明中也看到了类似的问题修复。 它是否与此有关?

    在使用不同 BLE-STACK (而非 BLE5-STACK)的不同器件上报告了此错误。 它不相关。

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

    尊敬的 Ammar:

    我的方案不同、在提供的参考中、它们使用  GATT_permit_AUTHN_Read、而其不工作是预期行为。 但在我的示例中 、我使用  GATT_permissing_encrypt_read 权限、仅对其有效、配对应起作用。 奇怪的是、它在 Android 上运行正常、我只在 iOS 上遇到问题。

    此致、

    Madhudhan

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

    您好!

    我再次进行测试、GATT 读取也在 Android 中失败。 我捕获并附加了 snoop 日志。

    此致、

    Madhudhan

    e2e.ti.com/.../6355.btsnoop_5F00_hci.zip

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

    大家好 、Madhusudhan、

    我目前无法打开您的监听器捕获、并已请求打开捕获所需的软件。 对此、我深表歉意。

    我不确定基于 Just Works 配对的未加密连接期间加密读取是否正常。 让我对此进行调查。 经过快速测试、我能够在您突出显示的修改安全设置后、根据 simple_peripheral 读取我们的默认特征5。 我使用的 LightBlue 应用请求了配对会话、绑定已成功保存、但在读取特征时、我只会看到"无值"。 如果这种方法有效、我的期望是、当我们尝试读取时、我们会看到正确的值。

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

    尊敬的 Ammar:

    Justworks 对连接进行加密、因此  GATT_permit_encrypt_read 应该起作用。 我使用 nrf connect 应用程序测试了 simple_peripheral 示例特征5、它正常工作。 我不知道它为什么不适用于基于 simple_peripheral 示例的自定义项目。 我在这两种情况下捕获了 snoop 日志、并附加了该日志。 我认为没有区别,但在我的情况下,它还不起作用。 请仔细阅读日志、并在这方面为我提供帮助。

    e2e.ti.com/.../Wireshark_5F00_Logs.zip

    下面是显示问题的自定义项目监测日志框架的屏幕截图。

    下面是 simple_peripheral 示例 项目 snoop 日志帧的屏幕截图、该日志帧工作正常。

    此致、

    Madhudhan

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

    大家好、Madhusudhan、

    为清楚起见、默认 simple_peripheral 项目(未修改) 使用密码配对设置加密连接。 这意味着它将开箱即用。 当我修改设置以匹配您提供的设置时、NRF 连接也会出现"验证不足"错误。

    我将查看您提供的日志、并在星期四之前回复。

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

    尊敬的 Ammar:

    很抱歉、我没有提到它、但我修改了 simple_peripheral 示例项目以使用 justworks 配对、它适用于 nrf connect 应用。 但它不能与我的自定义项目配合使用。

    此致、

    Madhudhan

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

    大家好、Madhusudhan、

    遗憾的是、在对 SysConfig 进行上述更改后、我无法让 simple_peripheral 从简单外设读取特征5 (未进行代码更改)。 我在3部手机(iPhone 13、Pixel 6 Pro 和 Samsung S7)上重现了"验证不足"错误。

    您是否有 Ellisys 或 Frontline 嗅探器日志可共享? 解析 snoop 日志后、我看到在这两种情况下配对都将运行到完成。

    我确实认为这是预期行为。 您能否检查是否已对 simple_peripheral 进行了任何其他更改(此外、请验证 simple_gatt_profile.c 文件是否未修改)?

    请确保在每次测试期间删除手机上的绑定信息、因为如果在读取特征时使用过期的绑定信息、这可能会影响行为。

    如果可能、您能否共享修改后的 simple_peripheral 项目的十六进制文件以便我可以在我的末尾尝试?

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

    H Ammar、

    没有 Ellisys 或 Frontline 嗅探器。 如果 您已经浏览 了这两个 snoop 日志、您可以在这两个日志中看到、读取特征首先失败、配对后读取请求在 simple_peripheral 示例日志中成功、在我的自定义项目中失败。 我确信它不会出现预期行为、因为从 snoop 日志中可以清楚地看到它在示例项目中工作、在我的自定义项目中不工作。 此外、我们还在不同供应商的不同芯片上运行相同的应用、并且其工作正常。

    我对 simple_peripheral 示例仅作了3处更改。 最大连接数为1、禁用 MIPTM 并将 IO 功能更改为无显示或输入器件。 我验证了没有对示例项目进行其他更改。

    我将使用 simple_peripheral tirtos ticlang 示例项目。 我已附加下面的 hex 文件。

    e2e.ti.com/.../simple_5F00_peripheral_5F00_LP_5F00_CC2652R7_5F00_tirtos_5F00_ticlang.zip

    此致、

    Madhudhan

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

    大家好、Madhusudhan、

    您能总结一下您使用的 SDK 版本、IDE (和版本)、SysConfig、XDCTools 等吗? 在我们的环境中、似乎存在一个漏洞、我无法构建类似的二进制文件、只需进行上述更改。

    您是否还可以在 SysConfig 中启用 ECC 调试密钥并重新发送 hex 文件? 通过这种方式、我可以使用监听器查看加密流量。

    感谢您的耐心。

    我仍然无法在我的末尾重现此行为 但是、使用您的 hex 文件、我能够成功写入特征。  此后、我已经获取了 Ellisys 的日志、其中记录了您的十六进制文件的行为以及我开箱生成的行为(当然、您也进行了更改)。 乍一看、我也看到加密请求和响应被交换。 然后我无法读取特征。 我还与我们的开发人员联系、以获得更多指导。

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

    尊敬的 Ammar:

    我使用 的是 Code Composer Studio 版本:11.1.0.00011、您可以在下面找到其余的版本信息。

    我已启用 ECC 调试密钥并附加了以下十六进制文件。

    e2e.ti.com/.../simple_5F00_peripheral_5F00_LP_5F00_CC2652R7_5F00_tirtos_5F00_ticlang_5F00_ECC_5F00_Debug.zip

    我正在使用 nrf connect 应用程序读取 char 5、它会在第一次读取请求返回不充分的身份验证后自动启动配对、配对后读取请求成功。 您可以在我共享的 snoop 日志中看到所有这些内容。

    此致、

    Madhudhan

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

    尊敬的 Ammar:

    最后、我发现了这个问题、并能够读取加密特性。 在   我的自定义项目中、我将 GAPBOND_SECURE_CONNECTION 的值从 GAPBOND_SECURE_CONNECT_ONLY 更改为 GAPBOND_SECURE_CONNECTION_allow。 我不知道它如何影响加密特征读取请求。 你能解释我吗? 当  GAPBOND_SECURE_CONNECTION 设置为 GAPBOND_SECURE_CONNECT_ONLY 时、配对成功、因为它是安全连接、但读取请求失败。 我认为这是堆栈中的一个问题。 请根据 GAPBOND_SECURE_CONNECTION 值向我解释为什么栈针对读取请求的行为不同。

    此致、

    Madhudhan

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

    大家好、Madhusudhan、

    很高兴您能够解决该示例和自定义项目之间的差异。

    这是设置 GAPBOND_SECURE_CONNECTION 时对 GATT 读取的影响。

    当 GAPBOND_SECURE_CONNECTION 设置为 GAPBOND_SECURE_CONNECT_ONonly 时、只有 SC 配对与128位密钥一起使用。  当链路经过身份验证时、如果出现以下情况、主机将返回不充分的身份验证:

    • 没有可用于连接的 LTK 或 STK (如果是这种情况、主机报告连接未加密)
    • 如果发生了未经身份验证的配对、但需要进行身份验证的配对(启用 SC、这仅意味着堆栈的状态标志必须为 false;而不是 MIPTM 标志设置错误)
    • 如果以上不是原因、即 发生了 LE 传统配对。 但是、如果上述设置为已启用 SC、我不会看到这是有效的情况。

    我已联系我们的设计人员来调查此问题、以清除并验证我们的观察结果。 我将在收到团队的回复后立即跟进。

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

    尊敬的 Ammar:

    感谢您解释设置 GAPBOND_SECURE_CONNECTION 时对 GATT 读取的影响。 但 上述情况不适用于我的问题、就像我的情况一样:

    提供 LTK 或 STK

    2.这是未经身份验证的配对,不需要身份验证

    3.未发生 LE 传统配对。 这是 LE 安全连接配对。

    因此、我认为这是堆栈中的一个问题。 此外、解决后、我希望切换回  GAPBOND_SECURE_CONNECT_ONLY、因为我不希望在自定义项目中允许传统配对。

    此致、

    Madhudhan

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

    尊敬的 Ammar:

    您是否有任何更新?

    此致、

    Madhudhan

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

    大家好、Madhusudhan、

    我将为我们的团队创建一个 TT、以调查此问题、但很遗憾无法评论他们的时间表。 目前、请继续解决方法。

    这里的一个关键因素是、我无法在示例项目中重现此行为。 您能否向我发送一个项目工作区的 zip 文件、以便我可以看到我缺少的内容? 这将使我能够在我的最后对此进行进一步调查、并有助于加快进度。

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

    尊敬的 Ammar:

    根据要求、我附上了工作和非工作示例项目 zip。 这两个项目的唯一区别是、不工作的 情况下、GAPBOND_SECURE_CONNECTION 设置为 GAPBOND_SECURE_CONNECT_ONLY。

    e2e.ti.com/.../2308.Simple_5F00_Peripheral_5F00_Working.zip

    e2e.ti.com/.../7384.Simple_5F00_Peripheral_5F00_Failing.zip

    此致、

    Madhudhan

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

    谢谢 Madhusudhan、我将介绍一下。

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

    尊敬的 Ammar:

    Madhusudhan 是我的同事、我们正在共同致力于这个项目。 我一直在使用他描述的变通办法进行测试、并发现了另一个问题。 堆栈指示配对已完成、我们不再收到"5"错误、但当尝试读取设置为"GATT_permit_encrypt_read"的某些特征时、我们从 Android 设备接收到"error 137"。 将特征更改为"GATT_permit_read"可使读取成功。 我怀疑此问题具有相同的根本原因、但希望提供相关信息、以防其有助于缩小范围。

    Steve

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

    您好、Steve / Madhu、

    我试图通过编译提供的项目来重现此问题、但无法阅读特征。 在等待开发团队跟进以验证预期行为时、我将尝试更多测试。

    后退一步、加密特征的用途是什么? 我很好奇、因为 在使用 Just Works 配对的情况下、使用 GATT_permit_encrypt_read 的情况并不常见。

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

    我没有参与此产品的设计、因此我不确定为什么要为实现做出某些选择。 由于存在可用性问题、我们将在当前设计中使用 TI 器件替换不同的 BLE 解决方案、因此我们一直在按当前原样配置所有内容、以最大限度地减少对现有移动应用、测试工具等的影响

    我知道、当不将特征设置为加密时、Android 上的操作效果很好、但当我们这样做时、iOS 不再配对、因为没有"身份验证不足"消息来触发配对。 这会带来问题、因为如果未配对的设备在经过足够的时间完成配对后重复尝试通信、设备中的状态机会终止连接。 我们是否有其他方法可以强制在 iOS 上进行配对、而不将特征设置为加密? 需要审查这一长期的可接受性,但至少这将使我们能够在我们的发展方面取得一些进展。

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

    您好、Steve、

    感谢您的深入见解。 我向你保证,我将把这作为我的首要任务,并在所有合适的人中出现了漏洞。 我又给他们点了一个回复。

    [引用 userid="521167" URL"~/support/wireless-connectivity/bluetooth-group/f/bluetooth-forum/1122013/cc2652r7-gatt-read-authentication-is不足-ios-device/4185473#4185473"]我们是否有另一种方法强制在 iOS 上进行配对而不将特征设置为加密/引用]

    这实际上可以在 SysConfig 中通过将"配对模式"设置为"启动配对请求"来完成。

    让我们离线同步解决此问题、在我们发现这些问题时、我将通过进一步的见解更新该主题。

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

    尊敬的 Ammar:

    我发现、我的同事 Steve 报告的另一个问题也是由于 在代码的不同部分中将安全连接设置为 GAPBOND_SECURE_CONNECT_ONLY 造成的。 因此、基本上我们只有一个问题、即如果我们将 GAPBOND_SECURE_CONNECTION 的值设置为 GAPBOND_SECURE_CONNECT_ONLY、则加密特性的读取/写入将不起作用。

    此致、

    Madhudhan

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

    大家好、Madhusudhan、

    感谢您提供更多详细信息。 我在我的结尾发现了该问题、并能够再现您看到的行为。

    简而言之、堆栈会报告此错误、因为它会将 Just Works 配对会话视为未经身份验证。 启用安全连接时、堆栈需要经过身份验证的会话。 一位同事在这个 相关的 e2e 回复中很好地解释了这种行为

    我们当然可以离线讨论这一点。 现在、我要将此主题标记为 TI 认为已解决。 如果由于我们的离线讨论而出现错误报告、我将更新此主题。

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

    要跟踪此主题:

    我已经提交了一个错误通知单来解决此问题、因为启用安全连接后、规范不明确要求进行身份验证会话。 此问题将在未来的 SDK 版本中解决。