gpt4 book ai didi

android - 使用二维码作为带外 (OOB) channel 的蓝牙安全简单配对 (SSP)

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:51 25 4
gpt4 key购买 nike

我有一个 Windows 7 应用程序,它使用 Stollmann SDK成功绑定(bind)PC与Android。蓝牙 MAC 地址、哈希和随机化器的双向交换通过 NFC 在带外进行:

application with qr code

很遗憾,Windows 应用程序的源代码无法在此处共享。在 Android 方面,不需要应用程序,安全简单配对 由操作系统执行(通过 HandoverManager ?)一旦带有 application/vnd.bluetooth.ep.oob 的 NDEF 消息 收到。

现在我正在尝试创建 an Android app ,它将使用单向身份验证通过扫描的二维码(而不是 NFC)执行 OOB 配对。

自定义二维码将显示在 PC 屏幕上(由 ZXing.Net 生成)并包含蓝牙 MAC 地址、哈希和随机数发生器。

但是 OOB 绑定(bind)似乎还没有在 Android 中实现 -

BluetoothAdapter.java :

/**
* Read the local Out of Band Pairing Data
* <p>Requires {@link android.Manifest.permission#BLUETOOTH}
*
* @return Pair<byte[], byte[]> of Hash and Randomizer
*
* @hide
*/
public Pair<byte[], byte[]> readOutOfBandData() {
if (getState() != STATE_ON) return null;
//TODO(BT
/*
try {
byte[] hash;
byte[] randomizer;

byte[] ret = mService.readOutOfBandData();

if (ret == null || ret.length != 32) return null;

hash = Arrays.copyOfRange(ret, 0, 16);
randomizer = Arrays.copyOfRange(ret, 16, 32);

if (DBG) {
Log.d(TAG, "readOutOfBandData:" + Arrays.toString(hash) +
":" + Arrays.toString(randomizer));
}
return new Pair<byte[], byte[]>(hash, randomizer);

} catch (RemoteException e) {Log.e(TAG, "", e);}*/
return null;
}

BluetoothDevice.java :

/**
* Start the bonding (pairing) process with the remote device using the
* Out Of Band mechanism.
*
* <p>This is an asynchronous call, it will return immediately. Register
* for {@link #ACTION_BOND_STATE_CHANGED} intents to be notified when
* the bonding process completes, and its result.
*
* <p>Android system services will handle the necessary user interactions
* to confirm and complete the bonding process.
*
* <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}.
*
* @param hash - Simple Secure pairing hash
* @param randomizer - The random key obtained using OOB
* @return false on immediate error, true if bonding will begin
*
* @hide
*/
public boolean createBondOutOfBand(byte[] hash, byte[] randomizer) {
//TODO(BT)
/*
try {
return sService.createBondOutOfBand(this, hash, randomizer);
} catch (RemoteException e) {Log.e(TAG, "", e);}*/
return false;
}

/**
* Set the Out Of Band data for a remote device to be used later
* in the pairing mechanism. Users can obtain this data through other
* trusted channels
*
* <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}.
*
* @param hash Simple Secure pairing hash
* @param randomizer The random key obtained using OOB
* @return false on error; true otherwise
*
* @hide
*/
public boolean setDeviceOutOfBandData(byte[] hash, byte[] randomizer) {
//TODO(BT)
/*
try {
return sService.setDeviceOutOfBandData(this, hash, randomizer);
} catch (RemoteException e) {Log.e(TAG, "", e);} */
return false;
}

我的问题:

由于 OOB 蓝牙配对在 Android 上比 NFC 更有效 - 您认为有一种(hackish)方法可以通过 QR 码来做同样的事情吗?

也许(疯狂的想法)通过向 HandoverManager 提供伪造的 NDEF 消息?

最佳答案

您无法伪造NFC 服务应用程序在检测到NFC 标签时实际发布的NFC 广播。由于这是 protected 广播,非系统应用无法广播 Intent 。

关于android - 使用二维码作为带外 (OOB) channel 的蓝牙安全简单配对 (SSP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31027469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com