繁体   English   中英

Android蓝牙低功耗配对

[英]Android Bluetooth Low Energy Pairign

我对BLE有点困惑。 我读到BLE配对过程有三个选项,我感兴趣的是Passkey Entry。

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

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

我很困惑,因为我读到的地方,对于BLE我可以设置PIN或密码,但BT Classic只接受4位数PIN。

BLE中的配对只是设置加密链接的一种方式。 设备需要就加密密钥达成一致,他们通过工作 (将密钥设置为全零), 密钥输入 (最多六位数)或带外 (通过NFC或其他通道分配的密钥)来实现此目的。

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

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

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

这种方法的一个问题是密钥条目仅使用6位数。 这还不足以真正保护你免受窃听。 密钥输入后生成的密钥可以在几毫秒内强制执行,所有商用蓝牙嗅探器都将其作为正常操作的一部分。 然而,他们必须嗅探配对程序才能做到这一点,所以如果没有人在设备被绑定时进行窃听,那么你通常会很好。

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

据我所知,在BTLE中没有使用PIN类型的密钥。 传统蓝牙设备使用固定的PIN密码,该密码硬编码到设备中或由应用程序输入。 在下一轮蓝牙中,这种配对方法被SSP(安全简单配对)取代。 BTLE稍后出现并仅使用SSP。 SSP中的密钥(当启用中间人保护时)由蓝牙软件随机生成,通常处于相当低的水平。 一个SSP选项是“正常工作”,整个密钥生成是内部的。 对用户来说很棒,但是对于中间人(MITM)攻击是可能的。 因此,最终,对于您的蓝牙LE应用程序,您永远不会使用4位数的PIN。

因此,与Android上的BTLE设备配对可以与一对标准蓝牙设备完全相同。 如果BTLE设备使用的是“正常工作”之外的SSP选项,您将获得一个弹出菜单,要求您使用

  1. 验证设备上显示的数字和/或提供您必须在设备上验证的号码(是 - 否和仅显示组合)

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

内置的配对功能适用于BTLE和BT设备,尽管事实上它们的机制非常不同。 BTLE设备发送客户端设备扫描的广告(BTLE'发现'),而BT设备在寻找设备时扫描来自客户端的传输(BT发现)。

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

因此,为了使我的应用程序的生活更轻松,我链接到标准的Android提供的工具,用于发现/配对需要配对的任何设备以及那些不需要配对的BTLE设备(并且有许多这样的设备)我使用startLeScan()API并对其中一个“已发现”设备执行BluetoothDevice.connectGatt()。 如果我使用这种方法并且设备实际上需要配对,我将收到安全错误。 从理论上讲,我应该可以使用Android提供的配对API然后与设备配对。 不幸的是,我无能的编程技巧导致我还没有成功地正确实现它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM