我正在使用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配对在我尝试从应用程序内经过身份验证的特征读取之前可能已经开始。
颤抖我可以做些什么来改善它?