问题标签 [pairing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 安全 BLE 配对 - 有可能吗?
我正在尝试制作一个真正安全配对的 BLE 设备。据我所知,一旦交换了“长期密钥”,传输加密(使用 AES)在所有版本的 BLE 中都是安全的。
低功耗蓝牙 4.1
BLE 4.1 和更早的版本使用对称加密,并且密钥 (PIN) 只有 6 位数字,因此被动窃听配对、暴力破解密钥并从中导出 LTK 是微不足道的。这似乎在设计上是不安全的,因为人们认为低功耗 BLE 设备没有足够的能力来进行非对称加密。
低功耗蓝牙 4.2
BLE 4.2 添加了“安全连接”。这显然也被破坏了,更重要的是它在 2008 年在蓝牙 2.1 中使用相同的配对方法时被破坏了!它并没有完全破坏配对 - 只有密码输入方法 - 你只学习密码,而不是 LTK。但如果每次配对尝试都没有更改密钥,它确实允许攻击者执行中间人攻击。
带外配对
Out-of-Band 配对方法将是一个很好的选择,然后我可以使用 QR 码或其他东西。但是,在 Android 或 iOS 上都没有公共 API 可以访问 OOB 方法。Android 支持通过 NFC 进行 OOB 配对,但 iOS 不支持,所以就这样了。
似乎剩下的唯一选择是实施自定义加密方案,但这是一项荒谬的工作。
我的问题是:
为什么蓝牙 SIG 在 BLE 4.2 中指定了 6 年前就已经知道不安全的配对方法?
是否有任何现有的 BLE 加密方案可以保护它?理想情况下是开源的并且经过充分测试,但可以是商业的。我还能使用 GATT 吗?
ios - iOS 上的可编程蓝牙 PIN
如果我通过某种带外方式(例如 QR 码)获取 BLE 设备的 PIN,是否可以通过编程方式告诉 iOS PIN,以便在连接时不会提示用户?
我相信在 Android 4.4+ 上使用setPin()
. iOS上是否有等价物?
android - 以编程方式与 Android 4.4+ 上的 BLE 设备配对
有没有人有一个完整的工作示例,说明如何以编程方式与在 Android 4.4 或更高版本上使用密钥输入(即 6 位 PIN)或数字比较的 BLE(不是蓝牙经典)设备配对?“以编程方式”是指我告诉 Android PIN - 不会提示用户。
SO上有很多类似的问题,但它们要么是a)关于Bluetooth Classic,b)旧的(之前setPin()
并且createBond()
是公开的),或者c)没有答案。
我的理解如下。
- 您连接到设备并发现其服务。
- 您尝试读取“受保护”特征。
- 设备返回身份验证错误。
- Android 以某种方式启动配对,然后你告诉它 PIN。
- 您现在可以读取特征。
我使用在 nRF51-DK 上运行的 mBed 创建了一个设备,并为其赋予了单一特性。
我像这样设置安全参数:
然后在我使用的特性中
现在,当我尝试使用Nordic Master Control Panel阅读它时,我会收到这样的配对请求通知:
我可以输入这个 PIN,然后 MCP 说我已绑定,并且可以读取特征。
但是,在我的应用程序中,我想避免让用户输入 PIN,因为我已经知道了。有没有人有一个完整的最近的例子来说明如何做到这一点?
编辑:顺便说一句,这是我在 SO 上找到的最相关的问题,但那里的答案似乎不起作用。
android - Android BLE如何应用劫持操作系统配对过程
我正在使用 BLE 设备,它需要在配对期间设置设备时间。在任何其他时间写入时间特性都不会有效地设置时间。
目前我正在使用安卓操作系统的蓝牙管理器进行配对。并且通过广播意图将配对进度通知给我的应用程序。
我的问题是如何将代码注入到上面注释的位置以完成日期时间设置?显然,Android OS 蓝牙管理器并没有在其整个配对过程中设置时间。Android 是否允许两个应用程序(操作系统蓝牙管理器和我的应用程序)在单个连接会话中写入远程 gatt?
bluetooth-lowenergy - Android 6,BLE 设备的身份验证问题,访问 LinkKey 位
我有一个关于 android 6 和 BLE 兼容性的问题。
我的应用程序对受保护的特征发起读取请求,该请求启动配对显示以输入适当的密码。使用正确的密码,如果 android < 6.0,智能手机和 ble 设备就可以很好地绑定
我也尝试过使用 android 6.0.1,但它一直给我同样的消息“由于 PIN 或密码不正确而无法配对”
这不是权限问题,因为我已经通过 ACCESS_COARSE_LOCATION 请求获得了职位权限。
似乎是配对请求中的 LinkKey 位有问题。我需要访问它并阻止它,因为 ble 设备被配对请求中的附加位混淆(因为它使用蓝牙 4.0 而不是 4.2)。
知道怎么做吗?
c# - 自动接受蓝牙配对请求 C#
我正在研究两台计算机之间的蓝牙通信。我正在使用一个开源库名称32feet.net。我没有大部分的工作。我已经申请了两台电脑互相聊天。但是为了开始通信,我需要从作为客户端的第一台计算机和作为服务器的第二台计算机发送连接请求,我需要手动接受配对请求。发送配对请求很好。但我不想手动接受请求。我希望我的应用程序自动接受请求并 开始通信。有什么办法吗?如果是,那么我需要做什么。我可以在安全上妥协如果我必须。提前致谢
连接接受代码。
qt - 蓝牙配对失败后 BLE 断开连接
Linux Raspbian Jessie Lite,Bluez 5.40。我有一个 GATT 服务器和我自己的用于传入“标准”蓝牙连接(即 A2DP)的代理。
我可以成功“连接”到 GATT 服务器,但如果用户不接受配对确认(来自 BT),我会收到以下错误:
qt.bluetooth.bluez:无法创建配对“org.freedesktop.DBus.Error.NoReply”
正如预期的那样,但几秒钟后BLE连接也会断开。我想知道这是否是正确的行为。我认为BLE和BT连接是相互独立的。
android - Android中的BLE配对
我想在我的应用程序中将 android 设备与 ble 设备配对。但是每当我在连接到 ble 设备后调用 createbond () 时,我都会收到类似配对被拒绝或配对失败的回复,因为密码/密码不正确。但我什至没有问输入密码?请帮帮我
ios - iOS中的蓝牙配对:如何判断是否会出现配对对话框?
我正在使用 Apple 的核心蓝牙示例代码(此处,稍作修改)来扫描低功耗蓝牙设备并连接到我想要的设备。在第一次连接时,这会打开 iOS 配对对话框。此外,如果设备被遗忘,然后再次扫描并连接,则会再次弹出配对对话框。
对话框不是在[central connectPeripheral]
被调用时出现,而是在第一次调用[peripheral setNotifyValue:YES forCharacteristic:c]
or时出现[peripheral writeValue:data forCharacteristic:c]
。
有没有办法判断配对对话框是否会在它出现之前出现?(即操作系统是否存储了特定外围设备的配对信息?)
在我执行任何可能会弹出对话框的调用之前,我需要知道对话框是否会出现,这样我就可以向用户显示一些说明。
ios - iOS 中的蓝牙配对:如何创建自定义配对对话框?
当连接到在 iOS 中使用密钥配对方法的设备时,操作系统会在必要时显示配对对话框。我见过几个使用自定义对话框的应用程序。我认为他们在连接到设备之前显示了这一点,然后以某种方式使用连接到设备时输入的密码绕过操作系统对话框。
如何使用自定义对话框进行配对?
或者,如果我知道密码(在代码中),我怎样才能避免完全显示配对对话框?