Android 蓝牙 BLE SMP配对绑定加密流程详解 - 史上最详细

同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。
1、 什么是SMP
        SMP (Security Manager Protocol)即安全管理协议。SMP是 蓝牙用来进行安全管理的,定义了配对和Key (可以理解成密钥)的分发过程的实现,以及用于实现这些方法的协议和工具。SMP的内容主要是配对和Key的分发,然后用Key对链路或数据进行加密。这个Key至关重要,怎么生成、怎么由通信的双方共享,关系到加密的成败。因此蓝牙协议定义了一系列的复杂机制,用于处理和加密Key有关的操作。SMP被用在LE单模设备或蓝牙双模(BR/EDR/LE) 设备中。LE设备配对分为LE传统配对(LE Legacy Pairing)和LE安全连接配对(LE Secure Connection Pairing)两种方式。
        LE传统配对更关心的是在资源受限的设备里的安全特性。随着时间的推移,安全特性越来越重要,所以蓝牙4.2引入LE安全连接配对。两种配对方式的特点如下。
LE传统配对的特点如下。
●SMP针对资源(MIPS、 RAM、 Power consumption)非常受限的。设备上的安全性问题,同时需要考虑灵活性问题。
●SMP具有非对称性,Key的安全性完全取决于分发Key的一方。
●SMP是非对称的,想要高安全性的设备要实现更多的资源。

LE安全连接配对的特点如下。
●提供了与BR/EDR安全连接等同的安全

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
BLE蓝牙绑定和密码配对流程及代码详解: 一、蓝牙绑定流程BLE 蓝牙设备连接时,需要进行绑定操作,以确保设备间通信的安全性。蓝牙绑定流程如下: 1. 从主设备中发出绑定请求。 2. 从设备接收到绑定请求并回复同意绑定。 3. 主设备生成随机数并加密发送到从设备。 4. 从设备使用预设的加密算法对接收到的随机数进行解密,并将加密后的结果发送给主设备。 5. 主设备对接收到的加密结果进行校验,若校验通过,表示绑定成功。 二、密码配对流程BLE 蓝牙设备连接时,需要进行密码配对操作,以确保设备间通信的安全性。密码配对流程如下: 1. 从主设备中发出密码配对请求。 2. 从设备接收到密码配对请求并回复同意配对。 3. 主设备生成随机数并加密发送到从设备。 4. 从设备使用预设的加密算法对接收到的随机数进行解密,并将加密后的结果发送给主设备。 5. 主设备对接收到的加密结果进行校验,若校验通过,表示配对成功。 三、代码实现 下面是使用 Android BLE API 实现蓝牙绑定和密码配对的示例代码: ```java // 绑定流程 private void startBonding(BluetoothDevice device) { device.createBond(); } // 密码配对流程 private void startPairing(BluetoothDevice device) { device.setPairingConfirmation(true); } @Override public void onBondStateChanged(BluetoothDevice device, int state) { switch (state) { case BluetoothDevice.BOND_BONDING: Log.d(TAG, "正在绑定设备:" + device.getName()); break; case BluetoothDevice.BOND_BONDED: Log.d(TAG, "已绑定设备:" + device.getName()); break; case BluetoothDevice.BOND_NONE: Log.d(TAG, "未绑定设备:" + device.getName()); break; } } @Override public void onPairingRequest(BluetoothDevice device, int mode) { switch (mode) { case BluetoothDevice.PAIRING_VARIANT_PIN: Log.d(TAG, "需要输入 PIN 码"); // 输入 PIN 码 device.setPin(mPin.getBytes()); break; case BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION: Log.d(TAG, "需要确认 Passkey"); // 确认 Passkey device.setPairingConfirmation(true); break; case BluetoothDevice.PAIRING_VARIANT_CONSENT: Log.d(TAG, "需要确认配对"); // 确认配对 startPairing(device); break; case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PASSKEY: case BluetoothDevice.PAIRING_VARIANT_DISPLAY_PIN: Log.d(TAG, "显示 Passkey 或 PIN 码"); break; default: Log.e(TAG, "未知的配对模式:" + mode); break; } } ``` 以上代码仅供参考,实际实现可能会因为硬件设备和蓝牙协议版本的不同而有所差异。在实际开发中,还需要注意蓝牙设备的连接状态和信号强度等信息,并根据需要进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识分享小达人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值