bluetooth-lowenergy - 从随机私有可解析地址获取 BLE MAC
问题描述
我想将 Android 设备(客户端)连接到外部 BLE 设备(服务器)。我有几个关于私有随机可解析地址机制的问题。
- 据我从BLE核心规范了解,可以使用身份解析密钥来判断是否使用此密钥生成了地址,但是它不能用于解析对等方的原始BLE MAC地址。是对吗?
- 有没有办法获取原始 BLE MAC 地址,同时仍然在服务器端使用私有随机可解析地址?也许它是绑定信息的一部分?
- 如果只有服务器使用私有随机可解析地址而不是客户端,我可以解决问题吗?这会破坏隐私保护,私有随机可解析地址机制提供吗?
最后,我想要一个 BLE 连接,它使用私有随机可解析地址来确保隐私,并且仍然能够在我的服务器上获取客户端的原始 BLE MAC 以供内部使用。
如果有人能回答我的问题,我将不胜感激。
最好的大卫
解决方案
When bonding, zero, one or both devices can send Resolving keys if negotiated so. For each device that sends Resolving key (IRK), the Identity Address is also always sent. This contains the original Bluetooth Device address and can be either public or static random. It's this address that only bonded devices know.
The idea of the privacy feature is to never use the original Bluetooth device address in Link Layer packets but instead a randomly generated one that is changed every x minutes (usually 15). This way, if it advertises regularly, someone can't track it since it disappears after 15 min. However if you have the corresponding IRK then you can determine if the IRK matches or not. If it matches you also know the original Bluetooth Device address since your bond data contains both the IRK and original address. But if you throw away that address then you can't recover the original address, even if you have the IRK.
If only one of two devices uses random resolvable address, then the one with resolvable address can't be tracked by a non-bonded device and the one that does not use a random resolvable address can be tracked.
推荐阅读
- html - CSS - 如何在表单输入中每 3 个字符放置一个空格?
- c# - 不存在 LayerHost 的 Blazor Fluent UI 下拉问题
- javascript - 转到给定的 URL(如果我们不在那里),显示表单并滚动到它
- javascript - 重构验证处理和消息传递
- javascript - Content-Security-Policy 问题 Google Cloud Function
- python - jupyter notebook 中包的输出列表
- flutter - Flutter Dio 将 MultipartFile 对象动态添加到 Map
- javascript - 如何使用长度和宽度Javascript返回矩形的面积
- kotlin - 使用内联函数 kotlin
- r - 如何对列表中具有相同名称的数据框求和?