蓝牙配对没有用户确认

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

这个需求正是为什么createInsecureRfcommSocketToServiceRecord()被添加到从Android 2.3.3(API级别10)( SDK文档 )开始的BluetoothDevice …在此之前,没有SDK支持。 它被devise成允许Android连接到没有用于inputPIN码(如embedded式设备)的用户界面的设备,但是它可用于在没有用户PINinput的情况下在两个设备之间build立连接。

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

您也可以通过NFC进行短距离通信,但是这些硬件在Android设备上不太显眼。 绝对select一个,而不要尝试创build一个同时使用两个的解决scheme。

希望帮助!

PS在使用reflection之前,还有很多方法可以在许多设备上执行此操作,因为代码确实存在…但是我不一定会推荐这种方法用于大规模分布式生产应用程序。 看到这个StackOverflow 。

那么,这应该真的分成两部分:

  1. 你可以配对2蓝牙设备,而不需要通过蓝牙配对握手? 不,你不能。 这被纳入协议,所以没有办法解决这个问题。
  2. 你可以在没有用户界面的情况下执行握手吗? 是的,你可以:这只是代码。

我不确定你是如何在Windows的土地上做的,但是在* nix的土地上,有一些埋在Bluez堆栈中的function,可以让你收到关于何时出现新设备的通知,并且向它发送配对码(显然必须有这些function:那些是用户界面使用的)。 鉴于充足的时间和经验,我相信你可以想出如何编写你自己的蓝牙设置应用程序的版本:

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

所有这些都不必popup用户界面。

如果你继续写代码,我愿意为此付出代价。

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

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

据推测“无线devise”的答案涵盖了这个案例。

2)然后,如果配对需要的设备/应用程序:

2.1)在v2.1配对之前,这两个设备需要有匹配的密码/ PIN。 因此,无论是需要用户参与(input个人识别号码),还是需要知道PIN码的知识:要么在if pin callback send pin="1234"的应用程序中定义,要么在操作系统如BlueZ和Win7中智能化(请参见幻灯片20我的蓝牙在Windows 7文档 ),其逻辑如下: 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 (ie 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”,比如你的NFCbuild议。

希望有帮助…

是的,在规范中定义的理论上是可能的。 但是,目前还没有实际的实施可以做到这一点。

请参阅:NFC论坛连接交接技术规范http://www.nfc-forum.org/specs/spec_list/

从关于安全性的规范引用 – “切换协议要求传输networking访问数据和证书(载体configuration数据)以允许一个设备连接到由另一个设备提供的无线networking。 NFC设备和标签,在没有设备的合法所有者的认可的情况下窃听运营商configuration数据是困难的,但并非不可能的。在本规范的范围内,将运营商configuration数据传输到可以靠近的设备被认为是合法的“。

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

BT版本2.1或更高 – 模式4安全简单配对“正常工作”模式可以使用。 它使用椭圆encryption(不pipe是什么),并且非常安全,但是对于中间人攻击是开放的。 与旧的“0000”pin代码方法相比,它是光年前。 这不需要任何用户input。

这是根据蓝牙规范,但你可以使用什么取决于你的堆栈支持蓝牙标准的什么样的版本和你有什么API。

如果您询问是否可以在没有用户同意配对的情况下配对两台设备,则不能这样做,这是一项安全function。 如果您通过蓝牙进行配对,则无需通过NFC交换数据,只需通过蓝牙链接交换数据即可。

我不认为你可以通过NFC传递authentication数据包来规避蓝牙安全,但我可能是错的。