在客户端设备上要求/实施Bluetooth PassKey PassCode

时间:2019-07-13 21:29:26

标签: bluetooth

每当另一台设备想要通过蓝牙连接到我的设备时,iOS或Android中是否都可以设置蓝牙密码密钥?

我的应用程序涉及一个连接到BLE服务器的BLE客户端,两个设备将在彼此之间传输数据。但是,传输的数据在安全性方面将非常敏感。因此,除了标准加密外,我的目标是在两个设备都进行了相互身份验证(例如,使用密码)之前不启动数据传输。

看来,蓝牙密码是设备制造商设置的东西,而不是用户可以配置的东西。如果是这样,并且没有密钥配对,是否可以接受的替代方法是要求在设备可以传输任何敏感数据之前(在设备配对之后)交换密钥?

1 个答案:

答案 0 :(得分:0)

在Android手机上,假设手机是GATT服务器(为客户端设备提供数据读取),则可以通过将其读取权限设置为PERMISSION_READ_ENCRYPTED_MITM来保护该特征中保存的数据。

例如,当您创建要在Android的蓝牙堆栈中注册的特征时,您便会

BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(YOUR_UUID, BluetoothGattCharacteristic.PROPERTY_READ, BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED_MITM) 

通过这种方式,任何想读取特征的人都需要先通过输入密码或比较两个数值来与手机建立安全绑定。配对的确切方法取决于两个设备的蓝牙堆栈进行协商(基于客户端上的可用IO)。

另一方面,如果您要访问的数据存储在第三个远程设备中,并且您不需要身份验证(绑定/配对)来读取数据,则无法访问固件。然后,您不能单方面从手机强制执行安全传输。