Android蓝牙低能耗Pairign

Android蓝牙低能耗Pairign,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,我有点搞不懂这个词。我了解到BLE配对过程有三个选项,我感兴趣的是密钥条目 我的目标是在现场安装一个传感器,Android应用程序将扫描并找到这个传感器,然后它将请求与传感器配对,然后它们才能交换数据。用户应用程序在手机或平板电脑上运行 BLE配对与Bluetooth Classic相同吗?我的意思是,Android API BluetoothDevice.setPin是否同时用于BLE和Classic,而驱动程序将在引擎盖下完成其余工作 我很困惑,因为我在某处读到,对于BLE,我可以设置PIN

我有点搞不懂这个词。我了解到BLE配对过程有三个选项,我感兴趣的是密钥条目

我的目标是在现场安装一个传感器,Android应用程序将扫描并找到这个传感器,然后它将请求与传感器配对,然后它们才能交换数据。用户应用程序在手机或平板电脑上运行

BLE配对与Bluetooth Classic相同吗?我的意思是,Android API BluetoothDevice.setPin是否同时用于BLE和Classic,而驱动程序将在引擎盖下完成其余工作


我很困惑,因为我在某处读到,对于BLE,我可以设置PIN或密码短语,但BT Classic只接受4位PIN。

在BLE中配对只是设置加密链接的一种方式。设备需要在加密密钥上达成一致,它们可以通过以下方式来实现:just works(将密钥设置为全零)、passkey entry(最多六位数)或out-of-band(密钥通过NFC或其他渠道分发)

如果使用密钥,则意味着“窥探者”无法与传感器配对,除非他能看到设备上的密钥。(打印或在显示器上)

您还可以将配对与绑定相结合,在这种情况下,设备在加密链接后分发密钥,从而可以在不必租用密钥的情况下重新连接到同一设备

然后,您希望在传感器上设置数据库,以便仅允许通过加密链接读取传感器数据。(您不希望您的窥探者简单地连接到设备并自己读取数据)

这种方法的一个问题是pass key条目只使用6位数字。这还不足以真正保护你免受他人窃听。密码输入后生成的密钥可以在毫秒内强制执行,所有商用蓝牙嗅探器都会这样做,这是其正常操作的一部分。不过,他们必须嗅探配对过程才能做到这一点,因此,如果在设备绑定时没有人窃听,通常情况下,您的设备是好的


此外,使用带外数据也是安全的,因为您无法轻易强制使用随机128位AES密钥。

在BLE中配对只是设置加密链接的一种方法。设备需要在加密密钥上达成一致,它们可以通过以下方式来实现:just works(将密钥设置为全零)、passkey entry(最多六位数)或out-of-band(密钥通过NFC或其他渠道分发)

如果使用密钥,则意味着“窥探者”无法与传感器配对,除非他能看到设备上的密钥。(打印或在显示器上)

您还可以将配对与绑定相结合,在这种情况下,设备在加密链接后分发密钥,从而可以在不必租用密钥的情况下重新连接到同一设备

然后,您希望在传感器上设置数据库,以便仅允许通过加密链接读取传感器数据。(您不希望您的窥探者简单地连接到设备并自己读取数据)

这种方法的一个问题是pass key条目只使用6位数字。这还不足以真正保护你免受他人窃听。密码输入后生成的密钥可以在毫秒内强制执行,所有商用蓝牙嗅探器都会这样做,这是其正常操作的一部分。不过,他们必须嗅探配对过程才能做到这一点,因此,如果在设备绑定时没有人窃听,通常情况下,您的设备是好的


此外,使用带外数据也是安全的,因为您无法轻松强制使用随机128位AES密钥。

据我所知,BTLE中未使用PIN类型的密钥。传统蓝牙设备使用固定PIN密钥,该密钥已硬编码到设备中或由应用程序输入。在下一轮蓝牙中,这种配对方法被SSP(安全简单配对)所取代。BTLE来得晚,只使用SSP。SSP中的密钥(当中间人保护启用时)由蓝牙软件随机生成,通常处于非常低的级别。一个SSP选项是“just works”,整个密钥生成是内部的。对用户来说很好,但中间人(MITM)攻击也是可能的。因此,最终,对于蓝牙LE应用程序,您将永远不会使用4位PIN

因此,在Android上与BTLE设备配对的方式与配对标准蓝牙设备的方式完全相同。如果BTLE设备使用的SSP选项超出了“just works”,您将看到一个弹出菜单,要求您

  • 验证设备上显示的号码和/或提供号码 必须在设备上进行验证(是-否,仅显示组合)

  • 要求您输入显示在设备上的数字 和/或显示必须在设备(键盘)上输入的数字

  • 内置配对功能适用于BTLE和BT设备,尽管在引擎盖下的机制非常不同。BTLE设备发送客户端设备扫描的广告(BTLE“发现”),而BT设备在查找设备时扫描来自客户端的传输(BT发现)

    或者,可以使用BluetoothAdapter.startedScan(LeScanCallback回调)方法来扫描仅限BTLE的设备。此方法将为您提供一个BTLE设备列表,您可以选择并尝试连接这些设备。在这种情况下,您的应用程序需要在需要时进行配对。通常在BTLE设备上不需要配对,直到尝试启用通知或指示。服务发现、读取设备信息服务和其他花絮通常不需要配对,如果内存正常,就永远不需要配对来进行服务发现

    因此,为了让我的应用程序更轻松,我链接到标准Android提供的工具,用于发现/配对任何需要配对的设备,以及那些需要配对的BTLE设备