【0x0012】HCI_Delete_Stored_Link_Key命令详细解析

【0x0012】HCI_Delete_Stored_Link_Key命令详细解析

在蓝牙通信协议中,HCI(Host Controller Interface)是用于主机和蓝牙控制器之间的通信接口。它定义了一系列命令、事件和数据传输格式,使得主机与蓝牙模块能够高效地进行交互。HCI_Delete_Stored_Link_Key命令是HCI命令中的一种,主要用于删除已存储的链接密钥。在蓝牙设备配对过程中,设备间的链接密钥(Link Key)用于加密通信,保证数据的安全性。该命令通常在设备解绑或重新配对时使用。

1. HCI_Delete_Stored_Link_Key命令概述

命令代码:0x0012

功能:删除设备存储的所有链接密钥。

此命令主要用于删除存储在蓝牙设备中的特定或所有链接密钥。链接密钥是蓝牙设备在配对过程中生成的加密密钥,目的是在后续通信中提供安全的加密通道。如果需要清除这些链接密钥,或者设备不再需要与某些设备的配对信息时,可以通过发送该命令来清理这些密钥。

2. 命令参数解析

HCI_Delete_Stored_Link_Key命令的参数结构非常简单,通常包括以下内容:

参数 描述 类型
Link Key 目标设备的链接密钥,指定需要删除的链接密钥。如果为空(0x00),则表示删除所有已存储的链接密钥。 16字节数组
BD_ADDR 目标设备的蓝牙地址(BD_ADDR)。指定要删除其链接密钥的设备的地址。如果不指定(0x00),则表示删除所有设备的链接密钥。 6字节数组
Number of Keys 需要删除的链接密钥的数量。通常如果删除所有密钥,可以设置为0。 1字节

解释:

  • Link Key:这是一个16字节的数组,存储了与某个蓝牙设备配对时生成的链接密钥。如果想要删除某个特定设备的链接密钥,可以指定该设备的链接密钥;如果想删除所有已存储的链接密钥,则可以将此字段设为0。
  • BD_ADDR:这是目标设备的蓝牙地址。通过指定设备地址,可以仅删除与特定设备的链接密钥。如果设置为0,意味着删除所有设备的链接密钥。

3. 命令格式与数据流

命令格式

0x01 - Command Header
0x0012 - Command Opcode
0x00 - Parameter Total Length (即没有传递参数时的默认长度)
BD_ADDR - 6字节设备地址
Link Key - 16字节链接密钥

解释:

  • 0x01:命令头,指示该命令为HCI命令。
  • 0x0012:命令码,指示删除已存储的链接密钥。
  • 0x00:参数总长度(如果没有任何参数传递,则为0)。
  • BD_ADDR:目标设备的蓝牙地址,指定要删除链接密钥的设备。
  • Link Key:16字节的链接密钥,或者设置为0表示删除所有密钥。

4. HCI命令的返回与响应

命令成功执行后,蓝牙控制器会返回相应的事件。对于HCI_Delete_Stored_Link_Key命令,返回的事件通常为HCI_Command_Status_Event,该事件包含命令执行的状态。如果删除操作成功,返回值为0(HCI_SUCCESS)。如果出现错误(例如目标设备地址无效),会返回其他错误码。

返回的事件格式:

0x0F - Event Header
0x0C - Event Code (HCI_Command_Status_Event)
0x00 - Status

5. 常见应用场景

  • 设备解绑:当用户选择从设备的配对列表中移除某个设备时,使用该命令清除该设备的链接密钥,以便下次重新配对时能够生成新的密钥。
  • 隐私保护:在某些情况下,设备可能希望删除所有已存储的链接密钥,以增强隐私性,防止未授权的设备访问。
  • 蓝牙重置:在进行蓝牙模块重置或初始化时,可以使用此命令清理存储的所有链接密钥。

6. 操作流程

  1. 发送命令
    • 主机设备发送HCI_Delete_Stored_Link_Key命令到蓝牙控制器。
    • 如果需要删除特定设备的链接密钥,主机设备需要传递该设备的BD_ADDRLink Key
  2. 执行命令
    • 蓝牙控制器接收到命令后,开始删除存储的链接密钥。如果命令参数指示删除所有密钥,则清除所有链接密钥;如果只删除指定设备的链接密钥,则清除该设备的密钥。
  3. 返回结果
    • 删除操作完成后,蓝牙控制器将通过HCI_Command_Status_Event事件反馈命令执行的结果。
    • 如果操作成功,返回HCI_SUCCESS,如果发生错误,返回相应的错误码。

7. 常见错误与解决

错误码 描述 解决方法
0x01 设备未找到(No Link Key Found) 确认是否有存储该设备的链接密钥,或尝试重新配对
0x02 不支持的操作(Unsupported Operation) 检查蓝牙控制器是否支持该命令
0x03 无效的蓝牙地址(Invalid BD_ADDR) 确保目标设备的蓝牙地址正确

8. 总结

HCI_Delete_Stored_Link_Key命令是蓝牙协议栈中一个常用的命令,用于删除已存储的链接密钥,保障设备间通信的隐私性与安全性。该命令可以删除所有存储的链接密钥,也可以删除特定设备的链接密钥。在设备解绑、隐私保护等场景中具有重要的应用价值。

THE END