蓝牙人在Windows的中间保护

Bluetooth man in the middle protection in Windows

本文关键字:中间 保护 Windows      更新时间:2023-10-16

我正在使用Windows API进行蓝牙本地编程。

我成功地将我的Windows PC与我的Android设备配对,但是当我在BluetoothAuthenticateDeviceEx函数中更改AUTHENTICATION_REQUIREMENTS参数时
from AUTHENTICATION_REQUIREMENTS::MITMProtectionRequiredGeneralBonding
to AUTHENTICATION_REQUIREMENTS::MITMProtectionRequired
我的代码是"失败"与我的Android设备配对。

通过"失败",我的意思是所有api都返回ERROR_SUCCESS代码,在Android手机中,我的Windows PC显示为"配对",但在我的Windows PC中,Android设备未添加到蓝牙设备。此外,如果我尝试使用我的Android手机并连接到我的Windows PC,配对过程将重新开始(我猜这是因为之前的配对没有成功完成)。

Windows代码如下:

int Authenticate(BLUETOOTH_DEVICE_INFO device)
{
      HBLUETOOTH_AUTHENTICATION_REGISTRATION hAuthentication = nullptr;
      DWORD err = BluetoothRegisterForAuthenticationEx(&device, 
                                                       &hAuthentication,
                                                       &::AuthenticationCallbackStatic, 
                                                       nullptr);
      if (ERROR_SUCCESS != err) { return -1; }
      // Changing last parameter to MITMProtectionRequired will cause to pairing 
      // complete unsuccessfully
      err = BluetoothAuthenticateDeviceEx(nullptr, 
                                          nullptr, 
                                          &device, 
                                          nullptr,
                                          MITMProtectionRequiredGeneralBonding); 
      if (ERROR_SUCCESS != err) { return -1; }
      return 0;
}

知道为什么这个参数会导致配对失败吗?

"配对"answers"Bonding"是有区别的。配对是在两个设备之间生成共享密钥(密钥),可以在当前会话的身份验证期间使用。

如果存储密钥,则两个设备绑定。

根据MSDN, MITMProtectionRequired是"认证的MITM要求",所以我理解这意味着只是配对而不是绑定。这就是看到ERROR_SUCCESS的方式,但键没有被存储。因此,后续连接需要配对。