蓝牙低功耗加密和数据安全

Fra*_*ank 15 security android bluetooth core-bluetooth bluetooth-lowenergy

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

由于我不认为手机上的应用程序代码是安全的,所以我需要依赖BLE安全来将我的加密包从服务器传送到设备一次而且只有一次(我必须假设任何第二次尝试)提供包,必须来自攻击者).

几天后我一直在浏览网络,以确定我的数据是否安全,以及在哪些条件下.不幸的是,我无法对我的问题提出简单的答案.

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

  2. 我需要将每个设备配对多个电话(但一次只能与一个电话通信).什么是配对的最大数量pr.设备? - 不幸的是,我需要将相当多的手机配对我的设备.

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

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

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

oyh*_*ovd 11

这是我的两分钱:

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

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

  3. 如果您绑定并因此交换长期密钥等,这些可以依赖于您正在构建的BLE实现,然后根据您的喜好进行存储.

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