【问题标题】:How to prevent unauthorized users from connecting to Arduino BLE device?如何防止未经授权的用户连接到 Arduino BLE 设备?
【发布时间】:2020-06-21 00:19:45
【问题描述】:

我正在查看 Arduino 的 BLE 演示:

https://github.com/dzindra/BLE-iOS-demo/blob/master/esp32blinky/esp32blinky.ino

我注意到没有“身份验证/授权”或明确的“连接代码”。

代码包括创建服务和特征,并宣传它们。充其量你可以看到客户端连接时触发的以下回调:

class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      Serial.println("Connected");
    };

    void onDisconnect(BLEServer* pServer) {
      Serial.println("Disconnected");
    }
};

我想知道人们遵循什么方法来确保用户只有在他们是所有者时才能连接到 Arduino 的 BLE(例如,按下按钮以“触发”连接模式)等...

在更深入的搜索中,我发现: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLETests/Arduino/security/BLE_server/BLE_server_passkey/BLE_server_passkey.ino

另一个示例显示了作为客户端的 ESP32 如何向服务器进行身份验证:

https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLETests/Arduino/security/BLE_client/BLE_client_passkey/BLE_client_passkey.ino

两者似乎都是两个 ESP32 如何充当客户端/服务器并相互验证的好例子。但是,我将如何让我的 iPhone 进行身份验证?我使用以下 iPhone 示例来简单地连接而无需身份验证。

事情似乎有点“骇人听闻”,想知道是否有关于如何通过身份验证连接到 Arduino BLE 的权威答案?

编辑:基本上,我不想阻止随机人连接到我的 BLE 设备。我不需要更多的东西(我不需要加密)。我只是想防止随机的人连接到我的设备,并破坏我的智能手机与我的 BLE 设备的连接。

【问题讨论】:

  • 除非您想使用 pin 码配对,否则您无法真正阻止连接。建立连接后,您可以将身份验证构建到更高级别的协议中。
  • @Paulw11 但是如何防止随机的人扫描我的 BLE 设备并连接?当我的智能手机连接到我的 BLE 设备时,它不会强制断开连接吗?
  • 不,如果您的手机已连接,则它们无法连接(假设您的设备一次只支持一个连接)新的(尝试的)连接不会强制断开现有的连接。如果你没有连接,那么他们可以。如果您需要绑定,那么他们需要知道 PIN 码才能交换密钥并创建绑定。
  • @Paulw11 所以如果有人在我之前连接,那么我无法连接到我的设备?如何使用 PIN 码阻止其他人连接?
  • 您需要在外围设备中实现绑定和加密。具体如何操作取决于您的硬件。您可以做的另一件事是在您的代码中构建某种交换,以便在连接后它们是应用程序和外围设备之间的某种挑战/响应。如果挑战失败,您可以强制断开连接。请注意,如果没有加密,此质询/响应很容易受到监控,因此它应该是动态的,而不是固定的。

标签: ios swift arduino bluetooth-lowenergy swift5


【解决方案1】:

似乎无论您使用什么机制来验证有效连接,问题仍然存在,如果您的 BLE 设备实际上是使用广告数据包来传递数据,那么当有人尝试连接时,直到您断开未经授权的连接,广告数据包传输被打断。 我利用一个小的机会将正确的值写入寄存器,否则会重置连接。

【讨论】:

  • 您是否使用加密来保护值不被嗅探?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 2014-05-29
相关资源
最近更新 更多