我正在为ESP32写一些代码(C++),以充当BLE信标。问题是这样的:为了安全起见,iPhone不会发送其真实的MAC地址,而是发送随机生成的MAC地址。我感到困惑的是,您如何知道它是否是您之前配对过的设备?

假设我检测到一个新的BLE MAC地址,然后查看制造商数据,可以确定它是Apple设备(前2个字节为“4C”)。

现在,我需要知道我之前是否已与该设备配对,以便可以让ESP32发起操作(为简单起见,我们只说打开一个LED)。如果该MAC地址在已知设备列表中,那么我可以继续,否则,我将其忽略。

问题是,如果iPhone没有放弃真实的MAC地址,则检测到的MAC地址将永远不会匹配任何内容。由于这是一种安全情况,因此我确定用于生成那些MAC地址的算法是未知的。

需要说明的是:此代码是为ESP32编写的,不是iPhone的而不是

最佳答案

实际上,除非您与设备配对并建立联系,否则不可能告诉您以前是否曾见过该设备。与设备配对后,将交换长期密钥,并将其用于快速重新建立连接。

这是设计使然。 MAC地址最初是唯一的,但这允许跟踪未经许可的人员和设备。您可以在以下ESP-IDF指南中阅读有关此内容的更多信息:

  • GATT security server walkthrough
  • GATT security client walkthrough
  • 10-08 13:48