【问题标题】:BLE (Bluetooth Low Energy) Pairing and BondingBLE(低功耗蓝牙)配对和绑定
【发布时间】:2017-07-07 15:37:48
【问题描述】:

我们正在设计一个通过 BLE 进行通信的小型硬件设备(称为“puck”),以及一个供 Android 和 iOS 与之通信的应用程序。我们有一个应用程序(用 C#/Xamarin 编写)连接到冰球,它们正在连接和来回发送数据。

根据this web site,当第一次建立蓝牙连接时,两个设备“配对”,这意味着它们交换了安全信息。

问题 1:我的理解是否正确,即安全信息的交换是自动发生的,我不需要在我的代码中做任何事情来导致它发生?

问题 2:我是否保证通信(在初始交换安全信息,包括密钥之后)将被加密?

问题 3a:在 Android 设备上,如何查询连接以了解两个 BLE 设备同意的安全功能?

问题 3b:与 3a 相同,但在 iOS 设备上

冰球没有显示器(几个 LED 和一个按钮),因此无法显示用于绑定的 PIN。计划是让用户在移动应用程序中启动绑定,通过 BLE 连接发送一些命令;作为响应,冰球将以某种模式闪烁其灯光并等待用户按下按钮。如果在某个超时时间内按下按钮,则应该进行绑定。

问题 4:为了使 BLE 连接尽可能安全,绑定的“最佳做法”是什么?

【问题讨论】:

  • 最好在Information Security问。
  • 除非您请求加密,否则数据不会加密。在 iOS 上,访问加密属性将触发一个配对对话框,要求用户输入 PIN。

标签: android bluetooth bluetooth-lowenergy


【解决方案1】:

1) BLE 安全是一件复杂的事情,如果您不是这方面的专家,最好确保您构建应用程序的堆栈为您执行此操作。在 Android 上(我想也在 iOS 上)内置堆栈会在您启动它后立即为您配对,但在您自定义构建的“冰球”上,您必须自己确保这一点 - 或实施正确执行此操作的蓝牙堆栈(推荐)。

2) 如果实现正确,则保证加密,是的。

3) 我不能详细告诉你,但是当你启动配对时,应该有来自蓝牙堆栈的响应;也许在返回参数中,您可以找到这些信息(但我不知道,这很大程度上取决于您使用的 API)。

4) 如果冰球没有显示,也没有输入可能性,只能通过按钮(可以看作是/否选项,其中“是”是按下按钮,而“否”不是按下它),您的配对的可能性非常有限。表示为 I/O 能力,这被定义为“NoInputNoOutput”(参见 CoreSpec v4.2, Vol.3, Part H, chap. 2.3.2),因此它总是会导致未经身份验证的连接(参见表 7 CoreSpec v4.2,Vol.3,C 部分,第 5.2.2.6 章)。这并不意味着连接没有加密(实际上是加密的),但是您没有针对Man-in-the-Middle attacks 的保护。

检查冰球上的按钮是否被按下可能是一项额外的安全措施,但请注意,如果攻击者想要与您的应用配对,则可以伪造“按下按钮”消息。

【讨论】:

  • 谢谢#Nebr,您是否查看过security.stackexchange.com?我在那里发布了一些后续问题(在#zaph 发表评论之后),但我不确定有多少人是该网站的成员
猜你喜欢
  • 2016-06-14
  • 2015-05-05
  • 2021-10-27
  • 1970-01-01
  • 2013-08-14
  • 2013-01-12
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多