无需用户确认即可通过 NFC 进行蓝牙 OOB 切换(或:Android Beam 的工作原理)

and*_*eas 5 android bluetooth nfc android-beam

我正在尝试在 Android 智能手机和 Linux 主机之间实现类似 Android-Beam 的行为。Android 智能手机(Galaxy Note 3、Android 4.4.2)接触连接到 Linux 主机的 NFC Dongle 并通过 NFC 交换蓝牙运营商数据,这样它就可以连接到同样连接到 Linux 主机的蓝牙 Dongle。

现在的问题是,Android 智能手机总是询问用户(我)是否真的想与蓝牙 Dongle 配对。在两个 Android 手机之间的 Android Beam 中,不会显示此用户确认,用户只需单击内容(即图片)即可发送它(这是我想要达到的行为)。我正在使用“nfctool”来嗅探 Android 手机传入的握手请求消息(请参阅http://pastebin.com/Dr0D0nqn)。根据 NFC 论坛的“使用 NFC 的蓝牙安全简单配对”文档(参见http://members.nfc-forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf第 19 页),此握手请求应包含简单配对哈希和一个简单的配对随机化器,

所以我的问题是:

  • 首先,Android Beam 到底是使用 Secure Simple Pairing with OOB 还是其他机制?为什么两个 Android 设备之间的 Android Beam 可以在未确认配对的情况下工作?
  • 如果使用的是 SSP,为什么 HR 消息中缺少 SSP Hash 和 Randomizer?这可能是为什么我的配对需要用户确认的原因?
  • 如果 Android 使用另一种机制,那么 HR 消息大致是什么样子的?他们是否在握手请求中使用特殊类型名称(除了“application/vnd.bluetooth.ep.oob”)或其他任何内容,从而绕过用户对 BT 配对的确认?
  • 是否有任何可用的 Android Beam 技术文档(目前我找不到任何文档)?Android 开发人员的 NFC 指南 ( http://developer.android.com/guide/topics/connectivity/nfc/nfc.html ) 对 Android Beam 没有太大帮助。

任何帮助深表感谢 :)

and*_*eas 4

我终于找到了这个问题的解决方案,并回答了我的大部分问题:

  • 是的,Android 使用 SSP,但 Hash 和 Randimizer 不是强制性的,因此不必将它们包含在 NDEF HR/HS 消息中。
  • Android使用类型名称为“application/vnd.bluetooth.ep.oob”的 HR 消息,这是正确的。
  • 如果一台设备确认配对过程,这对于 SSP 来说似乎就足够了。所以我的问题的解决方案是,将Linux主机的IO能力设置为“DisplayYesNo”,然后自动确认授权请求。这样,Linux 主机会伪造用户输入,而 Android 手机将不再要求用户确认。实现这一点的一种快速(但有点肮脏)的方法是更改​​ BlueZ 的“简单代理”脚本来确认每个授权请求。