没有用户确认的蓝牙配对

时间:2011-05-04 14:56:18

标签: android bluetooth nfc

我可以通过蓝牙配对两台设备而无需在用户界面中确认,接受配对此设备。我可以通过NFC交换一些额外的数据,然后通过蓝牙安全地配对这两个设备而无需任何额外的用户操作吗?

6 个答案:

答案 0 :(得分:53)

此需求正是为什么createInsecureRfcommSocketToServiceRecord()从Android 2.3.3(API级别10)(SDK Docs)开始添加到BluetoothDevice的原因...之前没有SDK支持这个。它旨在允许Android连接到没有用户界面的设备来输入PIN码(如嵌入式设备),但它可用于在没有用户PIN输入的情况下在两个设备之间建立连接。

listenUsingInsecureRfcommWithServiceRecord()中的推论方法BluetoothAdapter用于接受这些类型的连接。这不是安全漏洞,因为这些方法必须成对使用。您不能使用它来简单地尝试与任何旧的蓝牙设备配对。

您还可以通过NFC进行短距离通信,但该硬件在Android设备上不那么突出。绝对选择一个,不要尝试创建一个使用两者的解决方案。

希望有帮助!

P.S。在使用反射的2.3之前,还有许多方法可以在许多设备上执行此操作,因为代码确实存在......但我不一定会建议将其用于大规模分布式生产应用程序。请参阅此StackOverflow

答案 1 :(得分:6)

嗯,这应该分为两部分:

  1. 您是否可以在不进行蓝牙配对握手的情况下配对2台蓝牙设备?不,你不能。这已经融入了协议,因此无法解决这个问题。
  2. 您可以在没有用户界面的情况下执行握手吗?是的,你可以:那只是代码。
  3. 我不确定你是如何在Windows环境中做到的,但在* nix land中有一些功能隐藏在Bluez堆栈中,可以让你收到有关新设备何时出现的通知,并将配对代码发送给它(显然在那里)必须是这些功能:那些是用户界面使用的)。如果有足够的时间和经验,我相信你可以找出如何以某种方式编写自己版本的蓝牙设置应用程序:

    • 检测到新设备已到达
    • 查看名称/蓝牙mac地址,并检查一些内部数据库以查找要使用的配对码。
    • 发送配对码并完成操作

    所有这些都无需弹出用户界面。

    如果你继续编写我喜欢的代码,我就可以了解它。

答案 2 :(得分:4)

简短回答:当我使用OBEX在设备之间发送文件时,我几乎从未被提示配对,所以它当然是可能的。

1)应用程序和设备本身都可以设置为需要/不需要身份验证模式,因此通常不需要配对。例如,大多数OBEX(OPP)服务器根本不需要任何身份验证,因此不需要配对/绑定。

据推测,“无线设计”的答案就是覆盖了这个案例。

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"这样的逻辑。不知道Android做什么

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建议。

希望有帮助...

答案 3 :(得分:2)

是的,理论上可以按规范定义。 但是,目前还没有实际的实施方法可以实现这一点。

参考:NFC论坛连接切换技术规范 http://www.nfc-forum.org/specs/spec_list/

引用有关安全的规范 - “切换协议要求传输网络访问数据和凭证(运营商配置数据),以允许一个设备连接到另一个设备提供的无线网络。由于NFC设备和标签之间的通信需要非常接近,没有设备的合法所有者的识别,载波配置数据的窃听是困难的,但并非不可能。在本说明书的范围内,将载波配置数据传输到可以近距离接近的设备被认为是合法的。“

答案 4 :(得分:0)

BT版本2.0或更低版本 - 您应该能够使用标准PIN码配对/绑定,以编程方式输入,例如1234或0000.这不是很安全,但许多BT设备都这样做。

BT版本2.1或更高版本 - 模式4安全简单配对可以使用“正常工作”模型。它使用椭圆加密(无论是什么)并且非常安全,但对Man In The Middle攻击开放。与旧的'0000'密码方法相比,它是未来几年。这不需要任何用户输入。

这是根据蓝牙规范,但您可以使用的内容取决于您的堆栈支持的蓝牙标准版本以及您拥有的API。

答案 5 :(得分:-2)

如果您询问是否可以在没有用户批准配对的情况下配对两台设备,则无法完成,这是一项安全功能。如果您通过蓝牙配对,则无需通过NFC交换数据,只需通过蓝牙链接交换数据。

我认为您不能通过NFC传递身份验证数据包来规避蓝牙安全性,但我可能错了。