目录
2.1. HCI_Authentication_Requested命令格式
3.2. 安全简单配对模式(Secure Simple Pairing Mode)启用时的事件生成
3.4. HCI_Authentication_Complete事件
HCI_Authentication_Requested命令主要用于在蓝牙设备之间建立安全连接时,请求对远端设备进行认证。这是蓝牙安全机制的一部分,确保只有经过认证的设备才能建立连接并交换数据。
一、命令概述
在蓝牙通信中,安全性是一个非常重要的考虑因素。通过认证过程,可以验证设备的身份,防止未经授权的设备接入网络,从而保护数据的机密性和完整性。
当主机(Host)决定与某个远端蓝牙设备进行通信时,可能会发送HCI_Authentication_Requested命令给蓝牙控制器(Controller)。这个命令包含了要认证的连接的连接句柄(Connection_Handle),用于指定哪个连接需要进行认证。
一旦接收到这个命令,蓝牙控制器会尝试与远端设备进行认证。涉及到一系列复杂的交互,包括交换认证信息、验证身份等。如果认证成功,控制器会向主机发送一个认证完成事件(Authentication Complete Event),表明远端设备已经成功通过认证,可以建立安全连接。
如果认证失败,控制器通常不会自动断开连接。这时,主机需要决定是否继续尝试认证,或者断开与远端设备的连接。
二、命令格式及参数说明
2.1. HCI_Authentication_Requested命令格式
HCI_Authentication_Requested命令的格式遵循蓝牙核心规范中定义的HCI命令格式。
通常包括以下几个部分:
- Opcode(操作码):2字节。指示命令的类型。对于HCI_Authentication_Requested命令,操作码为
0x0411
。 - Parameter_Total_Length(参数总长度):1字节。表示命令参数的总长度。对于HCI_Authentication_Requested命令,参数总长度为
0x02
(即2个字节)。 - Parameters(参数):可变长度(根据Parameter_Total_Length确定),对于HCI_Authentication_Requested命令,只有一个参数:
- Connection_Handle(连接句柄):2字节。指定要认证的蓝牙连接
2.2. Connection_Handle
Connection_Handle用于唯一标识ACL连接或某些情况下的SCO连接的句柄。该句柄是在连接建立时由蓝牙控制器分配的,并用于后续的HCI命令和数据包中,以指定要操作的具体连接。
- 有效性:虽然
Connection_Handle
是一个16位的值,但根据蓝牙核心规范,通常只有其中的12位是有效的。意味着在实际使用中,某些高位不被使用。 - 范围限制:
Connection_Handle
的值必须在0x0000
到0x0EFF
的范围内。如果尝试使用超出此范围的值,蓝牙控制器可能会返回一个错误状态。
三、生成事件及参数说明
HCI_Authentication_Requested
命令本身没有直接返回的参数。主机在发送该命令后,不会立刻接收到像传统函数调用那样带有明确返回值的数据来知晓命令执行情况,而是需要通过后续控制器发送的各类事件来获取相关信息,以此判断命令执行的进度和最终结果。
3.1. HCI_Command_Status事件
当控制器(Controller)接收到 HCI_Authentication_Requested
命令时,首先会向主机发送 HCI_Command_Status
事件。这个事件主要起到告知主机命令已被接收的作用,主机可以通过解析该事件来确认命令是否成功送达控制器,不过此时还不能得知命令是否真正执行成功以及后续认证流程的具体情况,只是一个初步的反馈。
3.2. 安全简单配对模式(Secure Simple Pairing Mode)启用时的事件生成
3.2.1. HCI_Link_Key_Request事件
如果安全简单配对模式被启用,控制器会生成HCI_Link_Key_Request事件。这个事件表示与特定蓝牙设备的连接需要一个链接密钥(Link Key)。
3.2.2. 主机回复与事件后续
此时,后续的操作取决于主机回复的命令:
- 如果主机没有对应的链接密钥,它会回复HCI_Link_Key_Request_Negative_Reply命令。此时,将启动安全简单配对过程。