2017-02-17 777 views
-1

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

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

问题1:我的理解是,我的理解是安全信息的交换是自动发生的,在我的代码中没有任何事情可以使它发生?

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

问题3a:在Android设备上,如何查询连接以找出两个BLE设备达成一致的安全功能?

问题3B:同3A但iOS装置

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

问题4:为了保持BLE连接尽可能安全,绑定的“最佳实践”是什么?

+0

可能最好在[信息安全](http://security.stackexchange.com)中提出。 – zaph

+0

除非您请求加密,否则数据未加密。在iOS上访问加密属性将触发一个配对对话框,要求用户输入PIN码。 – Paulw11

回答

1

1)BLE安全性是一件复杂的事情,如果您不是这方面的专家,最好确保您构建应用程序的堆栈正在为您执行此操作。在Android上(也是在iOS上,我想)内置堆栈会在你启动它之后立即为你做配对,但是在你自定义的“冰球”你必须自己确保 - 或者实现一个正确执行此操作的蓝牙堆栈(推荐)。 2)如果实施是正确的,则确保加密,是的。 3)我不能详细地告诉你,但是当你启动配对时,应该有来自蓝牙堆栈的响应;也许在返回参数中,你可以找到这些信息(但我不知道这一点,它强烈依赖于你使用的API)。 4)如果除了一个按钮(可以看作是/否选项,其中“是”是按下按钮而“否”不按下按钮),如果冰球没有显示和没有输入可能性,你配对的可能性非常有限。表示为I/O功能,将其定义为“NoInputNoOutput”(请参阅​​CoreSpec v4.2,第3卷,H部分,第2.3.2章),因此它总是会导致未经身份验证的连接(请参阅表7 CoreSpec v4.2,第3卷,C部分,第5.2.2.6章)。这并不意味着连接没有加密(实际上是这样),但是您没有针对Man-in-the-Middle attacks的保护。

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

+0

Thanks #Nebr,你有没有检查过security.stackexchange.com?我在那里发布了一些后续问题(在#zaph的评论之后),但我不确定很多人是该网站的成员 –