Cas*_*jne 8 android bluetooth bluetooth-lowenergy xamarin
对于使用Xamarin(Android API 21及更高版本)的蓝牙项目,我想知道与蓝牙设备建立绑定是否常见.目前的要求是:
是否应该与此设备建立联系以"更好"识别(作为某种缓存)或"从头开始"重新连接到设备.这种情况有什么共同之处?因此,这不是"我可以保持联系"的问题,而是必须保持联系,甚至更好:什么是一个协作和工作,可靠的方案.
目前我使用这样的代码(result.Device.Name用于开发目的):
public override void OnScanResult([GeneratedEnum] ScanCallbackType callbackType, ScanResult result)
{
if (result.Device.Name == "??" &&
!_discovered &&
result.ScanRecord != null &&
result.ScanRecord.ServiceUuids != null &&
result.ScanRecord.ServiceUuids.Any(x => x.Uuid.ToString().ToUpper() == uuid))
{
lock (_locker)
{
_discovered = true;
_deviceList.Add(result.Device);
BluetoothDiscoverySucces?.Invoke(result.Device);
}
}
}
Run Code Online (Sandbox Code Playgroud)
You*_*eed 17
简短回答:正确,常见和可靠的情况是结合.绑定意味着连接是安全的,链接是可信的.这意味着您的本地设备通常会找到远程设备,即使其地址正在发生变化.出于安全和隐私原因,建议在蓝牙中进行配对/绑定.
答案很长:自推出以来,蓝牙规范的增量版本增加了一些功能,以提高蓝牙设备的安全性和隐私性.除非您已配对/绑定,否则许多设备将不允许您交换数据或正确跟踪它们(绑定和配对之间的区别在于绑定,交换的密钥存储在数据库中.)
在低功耗蓝牙中,配对/绑定过程包括三个阶段: -
第1阶段 - 配对功能交换
两个连接的设备交换其IO功能(例如,设备是否具有键盘),认证要求(例如,粘合或不粘合)和支持的密钥大小.
阶段2 - 身份验证和加密
使用加密算法生成密钥并用于加密链接(对于遗留和LESC配对,这是不同的,但它超出了此问题的范围).
第3阶段 - 密钥分配
在设备之间交换几个密钥,包括CSRK(连接签名解析密钥),IRK(身份解析密钥)和静态地址.
对你的问题特别重要的是IRK和地址.自蓝牙v4.0起,称为LE Privacy的功能允许设备不断更改其地址以降低其跟踪能力.恶意设备无法跟踪实现此功能的设备,因为它实际上看起来像是一系列不同的设备.为了解析地址,设备需要先配对/绑定.如果远程设备包含IRK,则它可以使用该设备和随机可解析地址来获取蓝牙设备的原始地址.
所以,超越你的标准: -
如果您要经常断开/重新连接,您可以与设备配对并存储密钥(即绑定).之后不再需要配对,因为在断开/重新连接时将使用相同的密钥来加密连接.
连接和绑定是两回事.无论是否实施绑定,重新连接都需要相同的时间.但是,一旦重新连接设备,将需要一些时间来重新加密连接.
这意味着该设备正在使用LE隐私功能.因此,您的设备应与其绑定,以便解析私有的可解析地址.
这通常是BLE的情况.这些设备通常可通过其地址识别.因此,如果您的设备先前已绑定,您将能够解析更改的地址并识别远程设备.
如果没有先配对,则无法实现加密连接(按照上述3个阶段).通过绑定,您可以将密钥存储在数据库中,从而确保将来可以使用它们来重新加密连接,而无需经过配对阶段.
我不确定这意味着什么,但与粘接的要求无关.
有关该主题的进一步阅读,我建议您访问蓝牙规范版本5.0,第3卷,第H部分,第2部分安全管理器(第2295页)
| 归档时间: |
|
| 查看次数: |
3169 次 |
| 最近记录: |