【问题标题】:Bluetooth Low Energy encryption and data safety低功耗蓝牙加密和数据安全
【发布时间】:2013-07-31 14:22:53
【问题描述】:

我需要通过智能手机(iOS 和 Android)和嵌入式设备(CC2540 芯片)之间的蓝牙低功耗 (BLE) 数据连接发送一些敏感数据。

由于我不认为手机上的应用程序代码不会被黑客入侵,因此我需要依靠 BLE 安全性将我的加密包从服务器传送到设备一次且一次(我必须假设任何第二次投递包裹的尝试都必须来自攻击者)。

我这几天一直在上网,想看看我的数据是否安全,以及在什么条件下。不幸的是,我无法为我的问题想出一个简单的答案。

  1. 如果我将手机与设备配对,我的数据是否安全? - 我想是的,虽然我知道配对过程本身存在缺陷,所以理论上一些中间人 (MITM) 可能会在配对过程中嗅探加密密钥,从而危及连接。

  2. 我需要将每台设备与多部手机配对(但一次只能与一部手机通信)。 pr的最大配对数是多少?设备? - 不幸的是,我需要将大量手机与我的设备配对。

  3. 我能否从设备中获取配对数据(长期密钥等)并将其存储在一些外部存储器中,以增加此限制。

  4. 我能否在不配对的情况下与设备建立安全的数据连接,或者在需要时重新配对? - 这个程序对于 MITM 攻击有多安全?

我似乎找不到任何可以明确回答这些问题的文件。任何想法或指示都将受到欢迎。

【问题讨论】:

    标签: android security bluetooth core-bluetooth bluetooth-lowenergy


    【解决方案1】:

    这是我的两分钱:

    1. AFAIK,BLE 配对/加密过程没有缺陷。然而,加密提供了三个级别的 MITM 保护:

      • 无,这使用已知密钥 == 0,因此如果窃听者在配对过程中捕获了您的所有数据包,他可以跟踪您的加密连接。
      • 低 MITM 保护,这是当您使用用户输入的密钥进行配对时,密钥
      • 高 MITM 保护,使用带外密钥。这将为您的加密提供完整的 128 位强度,即使捕获整个配对过程,窃听者也需要知道跟踪对话的密钥。由于 BLE 中没有密钥交换方法(至少是这样),因此这里最薄弱的一点是密钥分配,但这与在应用程序级别具有附加加密层时的问题相同。
    2. 这取决于实现。您的设备不必绑定,即与主机建立永久关系。如果设备未绑定,则没有状态说明早期连接(交换数据除外,但那是应用程序域,而不是 BLE 堆栈)。如果设备未绑定,则它们必须在下次连接时再次配对以交换受保护的数据。如果设备已绑定,则无需应用程序/用户交互即可继续加密连接,并具有与之前相同的安全级别。对于一次性连接的设备,绑定没有意义,因此您可以拥有一个无状态的实现,对连接的设备数量没有限制。对于多次连接,您还可以有一个无状态的实现,这取决于您如何分发/存储密钥,然后独立于 BLE。不过,此处不同选项的可用性取决于您使用的设备/BLE 堆栈实现,但规范允许所有这些。

    3. 如果您绑定并因此交换长期密钥等,这些可以根据您正在构建的 BLE 实现,以您喜欢的方式存储。

    4. 正如我在 2. 中所说,您可以建立安全(加密)连接而无需绑定。然后,设备需要在下次想要建立安全连接时再次配对。如果您由于某种原因不想/不能配对,那么您只能进行明文通信。

    【讨论】:

    • 嗨@Pappnese,您的观点与我们自己的发现非常吻合。目前,我们已经决定在 BT 协议栈之上添加自己的加密层,然后采用非绑定 BLE 通信协议。谢谢你的回答。
    • 谢谢,信息量很大。澄清一下:在 LE/Smart 中,没有等同于蓝牙安全简单配对,它使用 Diffie-Hellman 交换来避免被动密钥窃听?
    • 目前没有,但我听说它会在 4.2 规范中。
    • 我有一个相关的基本问题:BLE (4.0+) 上的加密实际上是设计强制的吗? IIRC,蓝牙 2.1 提供加密选项,因为存在非安全模式。
    【解决方案2】:

    我会试试这个。

    1) 我对配对过程的理解是一样的。如果数据足够敏感,我会在我的应用程序中添加我自己的独立加密层......

    2) 对于连接,BLE 协议仅限于每个设备同时使用一个主机,即使连接未绑定/配对。单个设备同时与多个主机建立连接的唯一方法是该设备以某种方式“假装”为多个设备。这是否可以完成将取决于硬件,这绝对不是使用设备的标准方法之一。即使您可以诱使硬件这样做,您也可能会遇到不可避免的问题,例如发生(几乎)重叠的连接间隔,这可能会导致您丢失数据甚至最终建立连接。

    设备与多台主机通信的另一种方式是定期断开连接,让另一台主机建立连接。 AFAIK,这种技术没有特殊的协议支持,所以除了使用定向广告之外,您可能无法控制下一个连接的主机以及连接的时间。

    另请参阅第 1 卷中的第 4.1.2 节,“Core_V4.0”蓝牙规范的 A 部分(例如,来自此处 https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=229737

    3) 很可能是的,细节会因供应商而异,但有上述限制。

    4) 无需绑定/配对即可建立连接。该连接将允许通信,但它将是没有任何安全性的纯文本。 AFAICS,做到这一点的唯一方法是在应用程序级别使用您自己的数据保护。

    【讨论】:

    • 嗨@jelle,感谢您的回答。恐怕我有点不清楚。任何时候都只能连接一个设备,但 BLE 主机应该能够与任何可能想要与之交谈的客户端安全地通信。我同意无论如何我们都需要额外的加密层......
    【解决方案3】:

    我假设 CC2450 设备使用 TI 堆栈。关于 CC2540 堆栈行为的一个很好的文档在 CC2540 Development Kit User Guide 中。这可能是 bluetooth.org 的 4.0 规范之后最好的文档

    1. 配对过程中使用的 6 位密码可能会阻止 MITM - 输入密码的时间为 30 秒。

    2. TI 堆栈将配对设备的数量限制为 8 个左右。这是因为重新建立连接所需的 CPU 和加密性能/资源。

    3. 将加密密钥移出 BT 设备会带来安全风险。总的来说,密钥管理是所有加密的致命弱点。

    4. 如果没有绑定,您将无法获得加密的读/写特征。请参阅 TI 用户指南的 4.6.1 - 它符合蓝牙 4.0 规范。

    【讨论】:

    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2018-01-29
    相关资源
    最近更新 更多