【发布时间】:2011-05-04 14:56:17
【问题描述】:
我是否可以通过蓝牙将两个设备配对而无需在用户界面中确认,接受配对此设备。我是否可以通过 NFC 等方式交换一些额外数据,然后通过蓝牙安全地将这两个设备配对,而无需任何额外的用户操作?
【问题讨论】:
-
闻起来像安全漏洞,尽管我确信蓝牙技术有很多漏洞。不过我不确定这是否合法,您的应用程序很可能会从 Android Market 中删除。
我是否可以通过蓝牙将两个设备配对而无需在用户界面中确认,接受配对此设备。我是否可以通过 NFC 等方式交换一些额外数据,然后通过蓝牙安全地将这两个设备配对,而无需任何额外的用户操作?
【问题讨论】:
这正是从 Android 2.3.3(API 级别 10)(SDK Docs) 开始将 createInsecureRfcommSocketToServiceRecord() 添加到 BluetoothDevice 的原因...在此之前没有 SDK 支持。它旨在允许 Android 连接到没有用于输入 PIN 码的用户界面的设备(如嵌入式设备),但它同样可用于在没有用户 PIN 输入的情况下在两台设备之间建立连接。
BluetoothAdapter 中的推论方法listenUsingInsecureRfcommWithServiceRecord() 用于接受这些类型的连接。这不是安全漏洞,因为这些方法必须成对使用。您不能使用它来简单地尝试与任何旧蓝牙设备配对。
您还可以通过 NFC 进行短距离通信,但这种硬件在 Android 设备上不太突出。一定要选择一个,不要试图创建一个同时使用两者的解决方案。
希望有帮助!
附:还有一些方法可以在 2.3 之前的许多设备上使用反射来执行此操作,因为代码确实存在……但我不一定会推荐这种用于大规模分布式生产应用程序的方法。看到这个StackOverflow。
【讨论】:
嗯,这真的应该分成两部分:
我不确定您在 Windows 领域是如何做到的,但在 *nix 领域中,Bluez 堆栈中隐藏了一些函数,可让您接收有关何时出现新设备的通知,并将配对代码发送给它(显然在必须是这些功能:那些是用户界面使用的)。如果有足够的时间和经验,我相信您可以弄清楚如何编写自己的蓝牙设置应用程序版本:
全部无需弹出用户界面。
如果您继续编写代码,我很想亲自动手。
【讨论】:
简短回答:当我使用 OBEX 在设备之间发送文件时,我几乎不会被提示配对,所以这当然是可能的。
1) 应用程序和设备本身都可以设置为需要/不需要身份验证模式,因此通常不需要配对。例如,大多数 OBEX (OPP) 服务器根本不需要任何身份验证,因此不需要配对/绑定。
大概“Wireless Designs”的答案是涵盖那个案例。
2) 如果设备/应用需要配对:
2.1) 在 v2.1 之前的配对中,两个设备需要具有匹配的密码/PIN。因此,这要么需要用户参与(输入 PIN),要么需要了解 PIN 的软件知识:要么在应用程序 if pin callback send pin="1234" 中定义,要么在 BlueZ 和 Win7 等操作系统中的智能(参见 Slide 20 at my Bluetooth in Windows 7 doc),其逻辑如下: 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's BluetoothWin32Authentication user guide,另请参阅 [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 传递身份验证数据包来规避蓝牙安全性,但我可能错了。
【讨论】: