我对BLE有点困惑。我读到BLE配对过程有三个选项,我感兴趣的是Passkey Entry。
我的目标是在现场安装传感器,Android应用程序将扫描并找到此传感器,然后它会在传输数据之前请求与传感器配对。用户应用程序可以在手机或平板电脑上运行。
BLE配对与蓝牙经典相同吗?我的意思是用于BLE和Classic的Android API BluetoothDevice.setPin,驱动程序将在引擎盖下完成其余工作吗?
我感到很困惑,因为我读到的地方对于BLE,我可以设置PIN码或密码短语,但BT Classic只接受4位数的PIN。
答案 0 :(得分:2)
BLE中的配对只是设置加密链接的一种方式。设备需要就加密密钥达成一致,他们可以通过正常工作(将密钥设置为全零),密钥条目(最多六位数)或带外(通过NFC或其他渠道分发的密钥)。
如果您使用密钥,则表示" snooper"除非他能看到设备上的密钥,否则无法与传感器配对。 (打印或在显示器上)
您还可以将配对与绑定结合起来,在加密链接后设备可以分配密钥,从而可以重新连接同一设备而无需租用密钥。
然后,您需要在传感器上设置数据库,以便只允许通过加密链接读取传感器数据。 (你不希望你的窥探者简单地连接到设备并自己读出数据。)
这种方法的一个问题是密钥条目仅使用6位数。这还不足以真正保护你免受窃听。密钥输入后生成的密钥可以在几毫秒内强制执行,所有商用蓝牙嗅探器都将其作为正常操作的一部分。然而,他们必须嗅探配对程序才能做到这一点,所以如果没有人在设备被绑定时进行窃听,那么你通常会做好事。
同样使用带外数据是安全的,因为您无法轻易强制使用随机的128位AES密钥。
答案 1 :(得分:1)
据我所知,BTLE中没有使用PIN类型的密钥。传统蓝牙设备使用固定的PIN密码,该密码硬编码到设备中或由应用程序输入。在下一轮蓝牙中,这种配对方法被SSP(安全简单配对)取代。 BTLE稍后出现并仅使用SSP。 SSP中的密钥(当启用中间人保护时)由蓝牙软件随机生成,通常处于相当低的水平。一个SSP选项就是“正常工作”。并且整个密钥生成是内部的。对用户来说很棒,但是对于中间人(MITM)攻击是可能的。因此,最后,对于您的蓝牙LE应用程序,您将永远不会使用4位数的PIN。
因此,与Android上的BTLE设备配对可以与一对标准蓝牙设备完全相同。如果BTLE设备使用SSP选项超出'只是工作',您将获得一个弹出菜单,要求您
验证设备上显示的号码和/或提供号码 您必须在设备上验证(是 - 否和仅显示组合)
要求您输入设备上显示的数字 和/或显示您必须在设备上输入的数字(键盘)
内置配对功能适用于BTLE和BT设备,尽管引擎盖下的机制非常不同。 BTLE设备传输客户端设备扫描的广告(BTLE' discovery'),而BT设备在寻找设备时扫描来自客户端的传输(BT发现)。
或者,可以使用BluetoothAdapter.startLeScan(LeScanCallback回调)方法扫描仅限BTLE的设备。此方法将为您提供BTLE设备列表,然后可以选择并尝试连接。在这种情况下,您的应用程序需要在需要时处理配对。通常,在尝试启用通知或指示之前,BTLE设备上不需要配对。服务发现,阅读设备信息服务和其他花絮通常不需要配对,如果内存为我服务,则永远不需要配对进行服务发现。
为了让我的应用程序更轻松,我链接到标准Android提供的工具,用于发现/配对需要配对的任何设备以及那些不需要配对的BTLE设备(并且有许多此类设备)我使用startLeScan()API并对其中一个发现的'执行BluetoothDevice.connectGatt()。设备。如果我使用这种方法并且设备实际上需要配对,我将收到安全错误。从理论上讲,我应该可以使用Android提供的配对API然后与设备配对。不幸的是,我无能的编程技巧导致我还没有成功地正确实现它。