(SM)安全管理之配对和绑定

本文详细介绍了蓝牙设备配对的过程,包括配对信息交换、链路认证及密钥分配三个阶段,并解释了如何通过配对算法生成随机数及确认值来确保安全性。最后讲述了如何保存配对过程中产生的密钥及相关身份信息。

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

1.配对

起初未提供安全性的两个设备如果希望做一些安全性的工作,首先必须彼此配对。

配对有三个不同的阶段:配对信息交换、链路认证和密钥分配。

1.1配对信息交换

从设备发出配对请求消息、主设备发送配对响应消息。

一旦交换了配对请求和配对响应消息,两个设备随后便进入配对过程的第二阶段。

1.2认证

利用配对请求和配对响应消息所携带的信息,两个设备得以确定适合的配对算法。

设备各自生成一个随机数,并利用方程计算一个确认值。


两个设备随机交换随机数和确认值并进行校对。

假设一切都确认无误,在认证中交互的随机数将用来计算STK,然后STK值将在链路层加密规程中用于加密链路。

1.3密钥分配

连接一旦利用了STK加密,就可以分配所需的密钥了。密钥每次分配一个。

可以分配的密钥:LTK、IRK和CSRK

2.绑定

绑定指的是将密钥及相关身份信息保存到安全数据库中。






<think>好的,我现在需要帮助用户查找PHY6222蓝牙芯片在主机从机配置中的绑定方法。用户之前已经提供了一些参考资料,我需要结合这些引用内容,以及之前的对话历史,来构建一个全面的回答。首先,回顾用户的问题,用户明确询问PHY6222的主机从机配置方法,特别是绑定设置。之前的回答中,我详细介绍了绑定的核心步骤、代码示例、配置参数调试技巧,但可能侧重于从机角度。现在用户需要同时了解主机从机的配置,因此需要补充主机端的配置方法。查看用户提供的引用,引用[1]提到配对绑定的过程,包括加密连接、认证设备、生成密钥等步骤,并提到手机端删除配对设备的方法。引用[2]讨论了沁恒蓝牙芯片的主机使用流程,包括扫描、连接、服务发现等步骤,这可能对主机配置有帮助。引用[3]提到了PHY6222的绑定函数gapBondMgrBondReq,这可能涉及具体的API调用。引用[4]提到PHY6230的绑定信息存储问题,虽然芯片不同,但可能对PHY6222的存储机制有参考价值,比如使用OTP或非易失存储。 接下来需要整合这些信息。主机的绑定流程通常包括启动配对请求、处理配对响应、存储绑定信息等步骤。从机的配置可能包括设置安全参数、响应配对请求、存储LTK等。需要确保主机从机在配对参数(如IO能力、认证需求)上一致,否则会导致配对失败。 根据引用[3]中的函数gapBondMgrBondReq,这可能是在从机端发起绑定请求的API,需要查看其参数设置,例如connHandle、role等。引用[2]中的主机流程提示,主机需要遍历服务特征,并启用notify/indicate,这可能与绑定后的加密通信有关。 另外,引用[4]中提到PHY6230没有存储器但可以绑定,可能PHY6222也使用了类似的机制,比如在OTP中存储密钥或使用芯片内部的非易失存储区域。在配置存储回调时,需要正确实现存储加载函数,确保绑定信息持久化。用户可能遇到的问题包括配对参数不匹配、存储失败、加密密钥生成错误等。需要提供调试建议,如使用HCI抓包工具检查配对流程,验证NV存储是否成功写入密钥,以及错误代码的处理方法。 最后,生成相关问题时,应考虑用户可能进一步的问题,比如如何调试主从机绑定失败、如何修改加密参数、绑定信息存储位置等,确保覆盖用户可能的需求。</think>### PHY6222蓝牙主从机绑定配置方法详解 针对PHY6222芯片的蓝牙主从机绑定配置,需分别考虑主机端从机端的协议栈配置及交互流程。以下是基于安全管理(SM)GAP层的实现方法[^1][^3]。 --- #### 一、从机绑定配置 1. **安全参数初始化** 在从机端设置配对模式密钥分发策略: ```c sm_config_t slave_config = { .io_capability = SM_IO_CAPABILITY_NOINPUTNOOUTPUT, // 无输入输出能力 .auth_req = SM_AUTHREQ_BONDING | SM_AUTHREQ_SECURE_CONNECTION, .max_key_size = 16, // AES-128加密 .distribute_keys = SM_DISTRIBUTE_ENC_KEY // 分发加密密钥 }; sm_set_config(&slave_config); ``` 2. **绑定请求触发** 在连接建立后调用绑定API: ```c // 当连接建立时触发绑定 void on_connect(uint16_t conn_handle) { gapBondMgrBondReq(conn_handle, BOND_IDX_PRIMARY, BOND_FLAG_START_ENC, ROLE_PERIPHERAL, 1); // 启动加密 } ``` --- #### 二、主机绑定配置 1. **主机扫描与配对** 主机端需在发现服务后启动配对流程: ```c // 发现服务回调函数 void on_service_discovered(uint16_t conn_handle) { sm_send_pair_req(conn_handle); // 发送配对请求 } ``` 2. **密钥验证处理** 实现MITM(人机交互)验证逻辑: ```c // 处理配对密码输入 void sm_passkey_entry(uint32_t passkey) { sm_passkey_confirm(g_conn_handle, passkey, 1); // 确认密码 } ``` --- #### 三、主从机交互参数匹配表 | 参数 | 主机配置 | 从机配置 | 匹配要求 | |-----------------------|------------------------|------------------------|-----------------------| | IO Capability | DISPLAYYESNO | NOINPUTNOOUTPUT | 交叉兼容模式[^1] | | Encryption Key Size | 16 | 16 | 必须相等 | | Bonding Flag | BOND_PERMANENT | BOND_PERMANENT | 相同标志 | | Key Distribution | ENC_KEY\|ID_KEY | ENC_KEY | 主机包含从机分发项 | --- #### 四、关键代码实现 ```c /* 主机端绑定存储实现 */ void host_store_bond_info(uint8_t addr[6], bond_info_t info) { if(info.enc_key.size == 16) { // 验证密钥长度 nv_store(addr, &info.enc_key, 16); // 存储LTK } } /* 从机端加密启动 */ static void start_le_encryption(uint16_t conn_handle) { le_start_encryption(conn_handle, &stored_ltk, SECURITY_MODE_1, LEVEL4); // 安全级别4 } ``` --- #### 五、调试验证方法 1. **绑定状态监测** 使用协议栈提供的状态码验证绑定结果: $$ \text{绑定状态} = \begin{cases} 0x00 & \text{成功} \\ 0x05 & \text{认证失败} \\ 0x0F & \text{密钥大小不匹配} \end{cases} $$ 2. **密钥存储验证** 通过SWD调试接口读取NV存储区域,确认LTK(长期密钥)的存储格式符合$128\text{bit}$结构[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值