iOS SMP配对请求不存在';t集SC位

iOS SMP配对请求不存在';t集SC位,ios,bluetooth-lowenergy,Ios,Bluetooth Lowenergy,我正在使用iPhone XR连接到我的Linux 4.9/Bluez 5.50外围设备,并希望使用Bluetooth 4.2的安全连接配对。 在我的设备上,有几个特征需要验证,配对代理设置为“DisplayYesNo”。在发现iPhone上的服务和特性后,我第一次阅读了一个特性。正如预期的那样,会弹出一个蓝牙配对对话框,但我必须输入一个密钥(显示在外设显示屏上),而不是要求我比较号码。 通过Linux端的btmon,我可以看到,在Linux发出“身份验证不足”响应后,iPhone会发送SMP配对

我正在使用iPhone XR连接到我的Linux 4.9/Bluez 5.50外围设备,并希望使用Bluetooth 4.2的安全连接配对。 在我的设备上,有几个特征需要验证,配对代理设置为“DisplayYesNo”。在发现iPhone上的服务和特性后,我第一次阅读了一个特性。正如预期的那样,会弹出一个蓝牙配对对话框,但我必须输入一个密钥(显示在外设显示屏上),而不是要求我比较号码。 通过Linux端的
btmon
,我可以看到,在Linux发出“身份验证不足”响应后,iPhone会发送SMP配对请求,但不会设置SC位。每件事都能始终如一地工作,但我本以为iPhone会启动与支持SC的配对

在启用SC的情况下运行配对有一种相当脆弱的方法:建立连接后,Bluez的“电池”插件在Linux端运行,发现iPhone上的“电池服务(0x180f)”并尝试读取其特征。iPhone会以自身身份验证不足错误进行响应,Linux(作为外围设备)会发送一个带有SC位集的SMP安全请求,然后iPhone会发出带有SC位集的SMP配对请求,从而导致两端的数字比较和公钥交换等。 我现在可以“强制”第二种行为,在成功连接后立即在iOS应用程序中设置任意延迟(3秒…),然后再启动服务、特征发现和读取特征。这样一来,电池插件导致的SC配对很可能在我尝试读取应用程序中经过身份验证的特征之前就已经开始了

颤栗我能做些什么来改善它