Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无需用户确认的蓝牙配对_Android_Bluetooth_Nfc - Fatal编程技术网

Android 无需用户确认的蓝牙配对

Android 无需用户确认的蓝牙配对,android,bluetooth,nfc,Android,Bluetooth,Nfc,我可以通过蓝牙配对两个设备而无需在用户界面中确认这一点吗。我是否可以通过NFC交换一些额外的数据,然后通过蓝牙安全地配对这两台设备,而无需任何额外的用户操作?如果您询问是否可以在用户未批准配对的情况下配对这两台设备,则不可以,这是一项安全功能。如果您通过蓝牙配对,则无需通过NFC交换数据,只需通过蓝牙链路交换数据即可 我不认为通过NFC传递身份验证数据包可以规避蓝牙安全,但我可能错了。是的,按照规范的定义,理论上这是可能的。 然而,到目前为止,还没有任何实际的实施方案能够做到这一点 参考:NFC

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

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


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

是的,按照规范的定义,理论上这是可能的。 然而,到目前为止,还没有任何实际的实施方案能够做到这一点

参考:NFC论坛连接移交技术规范

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

这正是为什么在Android 2.3.3(API级别10)()之前,没有SDK支持将
CreateSecurerCommsockettoServiceRecord()
添加到
BluetoothDevice
中的原因。它的设计目的是允许Android在没有输入PIN码的用户界面的情况下连接到设备(如嵌入式设备),但它同样适用于在没有用户PIN输入的情况下在两台设备之间建立连接

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

你也可以通过NFC进行短程通信,但这种硬件在Android设备上并不突出。一定要选一个,不要试图创建一个同时使用这两个选项的解决方案

希望有帮助


另外,在2.3版本之前的许多设备上也有使用反射的方法,因为代码确实存在……但我不一定建议大规模分布式生产应用程序使用这种方法。看看这个。

好吧,这应该分为两部分:

  • 您可以在不通过蓝牙配对握手的情况下配对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)中定义智能,其逻辑类似于:
    if(remotedevice=headset),然后expectedPin=“0000”
    。不知道安卓做什么

    2.2)在v2.1中添加了安全简单配对(SSP)。将配对更改为:

    从中,另请参见[]中的SSP部分

    所以,要想让配对成为非强制性的,需要“JustWorks”或“带外”,比如你的NFC建议


    希望对您有所帮助…

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

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


    这是根据蓝牙规范制定的,但您可以使用什么取决于您的协议栈支持的蓝牙标准和API。

    闻起来像是安全漏洞,尽管我确信蓝牙技术有很多漏洞。不过我不确定这是否合法,你的应用程序很可能会从Android Market中删除。嗨,你能告诉我,如果有兄弟的话
    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