我可以通过蓝牙配对两个设备而无需在用户界面中确认,接受配对此设备。我可以通过例如 NFC 交换一些额外的数据,然后通过蓝牙安全地将这两个设备配对,而无需任何额外的用户操作吗?
6 回答
这正是从 Android 2.3.3(API 级别 10)(SDK 文档createInsecureRfcommSocketToServiceRecord()
)开始添加的原因……在此之前没有 SDK 支持。它旨在允许 Android 连接到没有用于输入 PIN 码的用户界面的设备(如嵌入式设备),但它同样可用于在没有用户 PIN 输入的情况下在两个设备之间建立连接。BluetoothDevice
中的推论方法listenUsingInsecureRfcommWithServiceRecord()
用于BluetoothAdapter
接受这些类型的连接。这不是安全漏洞,因为这些方法必须成对使用。您不能使用它来简单地尝试与任何旧蓝牙设备配对。
您还可以通过 NFC 进行短距离通信,但该硬件在 Android 设备上不太突出。一定要选择一个,不要试图创建一个同时使用两者的解决方案。
希望有帮助!
PS 还有一些方法可以在 2.3 之前的许多设备上使用反射来执行此操作,因为代码确实存在......但我不一定会推荐这种大规模分布式生产应用程序。请参阅此StackOverflow。
好吧,这真的应该分为两部分:
- 您可以在不通过蓝牙配对握手的情况下配对 2 个蓝牙设备吗?不,你不能。这已被纳入协议,因此无法解决此问题。
- 您可以在没有用户界面的情况下执行握手吗?是的,你可以:这只是代码。
我不确定您在 Windows 领域是如何做到的,但在 *nix 领域中,Bluez 堆栈中隐藏了一些功能,可让您接收有关何时出现新设备的通知,并将配对代码发送给它(显然必须有这些功能:这些是用户界面使用的功能)。如果有足够的时间和经验,我相信您可以弄清楚如何编写自己的蓝牙设置应用程序版本:
- 检测到新设备到货
- 查看名称/蓝牙 mac 地址并检查一些内部数据库以使用配对代码。
- 发送配对码并完成操作
所有这些都无需弹出用户界面。
如果您继续编写代码,我很想亲自动手。
简短的回答:当我使用 OBEX 在设备之间发送文件时,我几乎不会被提示配对,所以这当然是可能的。
1)应用程序和设备本身都可以设置为需要/不需要认证模式,因此通常不需要配对。例如,大多数 OBEX (OPP) 服务器根本不需要任何身份验证,因此不需要配对/绑定。
大概“无线设计”的答案是涵盖那个案例。
2)然后如果设备/应用程序需要配对:
2.1) 在 v2.1 之前用于配对,那么两个设备需要具有匹配的密码/PIN。因此,这要么需要用户参与(输入 PIN),要么需要了解 PIN 的软件知识:要么在应用程序中定义,要么if pin callback send pin="1234"
在 BlueZ 和 Win7 等操作系统中智能(参见我的 Windows 7 中蓝牙文档中的幻灯片 20)逻辑如:if(remotedevice=headset) then expectedPin ="0000"
。不知道安卓是做什么的
2.2) 在 v2.1 中添加了安全简单配对 (SSP)。这将配对更改为:
if (either is pre-v2.1) then Legacy else if (Out-Of-Band channel) then OutOfBand else if (neither have "Man-in-the-Middle Protection Required") then (i.e. both have "Man-in-the-Middle Protection _Not_ Required") Just-Works else Depending on the two devices' "IO Capabilities", either NumericComparison or Passkey. Passkey is used when one device has KeyboardOnly -- and the peer device _isn't_ NoInputNoOutput. endif
来自32feet.NET 的 BluetoothWin32Authentication 用户指南,另请参阅 [ 1 ]中的 SSP 部分
因此,要自动配对需要“JustWorks”或“Out-of-Band”,例如您的 NFC 建议。
希望有帮助...
是的,按照规范的定义,理论上是可能的。然而,目前还没有实际的实现可以允许这样做。
参考:NFC Forum Connection Handover Technical Specification http://www.nfc-forum.org/specs/spec_list/
引用有关安全性的规范- “切换协议需要传输网络访问数据和凭据(运营商配置数据),以允许一个设备连接到另一个设备提供的无线网络。因为之间的通信需要非常接近NFC 设备和标签, 窃听运营商配置数据是困难的, 但并非不可能, 未经设备合法所有者的认可. 在本规范的范围内, 将运营商配置数据传输到可以靠近的设备被认为是合法的。”
BT 版本 2.0 或更低 - 您应该能够使用标准 PIN 码进行配对/绑定,以编程方式输入,例如 1234 或 0000。这不是很安全,但许多 BT 设备都会这样做。
BT 2.1 或更高版本 - 可以使用模式 4 安全简单配对“正常工作”模型。它使用椭圆加密(无论是什么)并且非常安全,但对中间人攻击是开放的。与旧的“0000”密码方法相比,它提前了数年。这不需要任何用户输入。
这是根据蓝牙规范,但您可以使用什么取决于您的堆栈支持的蓝牙标准版本以及您拥有的 API。
如果您询问是否可以在没有用户批准配对的情况下配对两台设备,不,它不能完成,这是一项安全功能。如果您通过蓝牙配对,则无需通过 NFC 交换数据,只需通过蓝牙链路交换数据即可。
我认为您不能通过通过 NFC 传递身份验证数据包来规避蓝牙安全性,但我可能是错的。