蓝牙安全模式之加密

蓝牙安全模型涉及配对、绑定、设备验证、加密和消息完整性等五个核心功能。加密主要由链路层控制,连接建立后,主机可以请求启动加密,通过一系列步骤如IV和SKD的交换、LL ENC_REQ PDU、LE长期密钥请求及响应等,最终实现安全的加密通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蓝牙安全模型包括五个不同的安全功能:配对,绑定,设备身份验证,加密和消息完整性。

•配对:创建一个或多个共享密钥的过程。

•绑定:存储在配对期间创建的密钥以在后续连接中使用以便形成可信设备对的行为。

•设备验证:验证两个设备具有相同的密钥

•加密:消息机密性

•消息完整性:防止消息伪造

LE加密的过程主要由链路层控制。建立连接后,链路层可以根据主机的请求对数据包启用加密操作。过程如下:

1)主机A发送LE Start Encryption HCI命令以请求链路层启动加密。在此过程中,交换两个参数,IV和SKD。

### Android 设备上的蓝牙安全模式配置 #### 启用和管理蓝牙权限 为了确保应用程序能够访问蓝牙功能并执行必要的安全操作,在应用的 `AndroidManifest.xml` 文件中声明适当的权限至关重要。对于蓝牙通信,通常需要以下权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <!-- 针对 Android 12 (API level 31) 及以上 --> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/> <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/> ``` 这些权限允许应用程序发现其他蓝牙设备以及与其配对。 #### 请求用户启用蓝牙 当应用程序首次尝试使用蓝牙服务时,应该通过启动一个意图来提示用户手动开启蓝牙,而非直接调用 `enable()` 方法,这样可以提供更好的用户体验[^3]。 ```java Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); ``` 这种方法尊重用户的意愿,并且遵循了良好的设计实践。 #### 安全连接加密 在低功耗(BLE)场景下,一旦建立了物理连接,链路层会根据主机的要求处理后续的数据包加密工作[^4]。这意味着开发者不需要深入理解具体的加密算法实现细节;只需要关注于发起正确的命令以触发这一流程。 具体来说,要创建一个受保护的安全连接,可以通过设置合适的参数来进行配对过程中的身份验证级别调整。例如,在建立经典蓝牙连接时,可以选择性地指定是否需要MITM防护(中间人攻击防御),从而提高安全性。 #### 维护已知设备列表 `CachedBluetoothDevice` 类用来维护当前可见或曾经配对过的远程蓝牙设备的信息集合。这个类提供了接口用于向此集合中添加新设备或将不再使用的设备移除[^1]。保持最新的可信设备清单有助于防止未授权接入的风险。 #### 获取远端设备详情 每当涉及到特定外部硬件的操作前,应当先利用 `BluetoothDevice` 对象查询目标装置的相关属性,比如名称、MAC地址等基本信息,同时也可检查两者间的绑定关系状态以便进一步确认双方的身份合法性[^2]。 ```java String deviceName = remoteDevice.getName(); String macAddress = remoteDevice.getAddress(); int bondState = remoteDevice.getBondState(); ``` 上述代码片段展示了如何读取远端蓝牙设备的关键识别信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值