蓝牙人在Windows的中间保护
Bluetooth man in the middle protection in Windows
我正在使用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的方式,但键没有被存储。因此,后续连接需要配对。
相关文章:
- 2D数组来自文本输入,中间有空格
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 为什么在保护模式下继承升级不起作用
- 访问被拒绝后,c++中的故障保护代码
- C++:无法访问声明的受保护成员
- 为什么您需要C++头文件的包含保护
- lock_guard是否保护返回值
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 继承和友元函数,从基类访问受保护的成员
- 为什么派生类的好友不能使用受保护的成员?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 递归形成字符串中所有数字字符的中间和?
- 链表错误的中间
- 公共/私有/受保护是否会更改内存中结构的排列?
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- C2011: 'Card':"类"类型重新定义(尽管使用了包含保护并且没有在文件中重新定义.cpp类)
- 在父类中公开受保护的构造函数
- 如何从其他结构访问受保护的结构变量
- C++标头保护语法和标头放置
- 蓝牙人在Windows的中间保护