当前位置: 首页 > article >正文

别再死记硬背了!用一张图+代码示例,彻底搞懂蓝牙BLE配对的6种SMP流程

蓝牙BLE安全配对实战图解6种SMP流程与核心算法拆解每次看到蓝牙协议栈里那些晦涩的安全管理协议SMP文档就头疼别担心今天我们用工程师的思维来重新解构这个安全黑匣子。扔掉那些让人昏昏欲睡的文字说明我将带您用一张决策树状图和可运行的代码示例把BLE配对的6种SMP流程变成可视化的技术拼图。1. SMP协议的本质安全握手的三重奏想象两个陌生人在嘈杂的咖啡馆交换机密文件。他们需要1确认对方身份 2建立加密通道 3安全传输内容——这正是SMP协议的三个核心阶段。在BLE世界里这个流程被标准化为能力协商阶段设备间交换安全参数就像出示身份证密钥生成阶段通过密码学舞蹈产生临时或长期密钥相当于约定加密规则密钥分发阶段在加密通道中传递身份识别等敏感信息实际文件传递# 简化的SMP状态机伪代码示例 class SMPStateMachine: def __init__(self): self.state IDLE def handle_event(self, pdu): if self.state IDLE and pdu PAIRING_REQUEST: self.start_pairing() elif self.state FEATURE_EXCHANGE: self.negotiate_algorithm(pdu.io_capabilities) # 其他状态处理... def start_pairing(self): print(启动30秒超时计时器) self.timer threading.Timer(30.0, self.timeout_handler) self.timer.start()关键提示所有SMP交互都在固定的L2CAP信道0x0006上进行MTU大小取决于是否支持LE Secure Connections65字节 vs 23字节2. 配对流程决策树六种路径全景图决定SMP走向的三个关键参数安全连接支持LE Legacy Pairing 或 LE Secure ConnectionsIO能力键盘/显示屏/两者皆无OOB支持是否使用带外认证这些参数的组合形成了著名的六种配对方式配对类型适用场景安全等级典型用例Just Works无输入输出设备★☆☆☆☆蓝牙遥控器配对电视Passkey Entry一方有键盘一方有显示屏★★★☆☆手机配对智能锁OOB支持NFC等近场通信★★★★☆高端耳机快速配对Numeric Comparison双方都有显示屏★★★★★两个手机互相认证Passkey Entry (SC)安全连接下的密码输入★★★★★医疗设备安全配对OOB (SC)安全连接下的带外认证★★★★★企业级IoT设备部署graph TD A[开始配对] -- B{支持LE Secure Connections?} B --|是| C[LE Secure Connections] B --|否| D[LE Legacy Pairing] C -- E{IO能力与OOB} D -- F{IO能力与OOB} E --|双方显示| G[Numeric Comparison] E --|一方输入一方显示| H[Passkey Entry SC] E --|OOB可用| I[OOB SC] F --|无输入输出| J[Just Works] F --|一方输入一方显示| K[Passkey Entry] F --|OOB可用| L[OOB]3. 密码学引擎室核心算法函数详解3.1 Legacy Pairing的加密工具箱在传统配对中这几个函数扮演着关键角色c1函数用于生成确认值def c1(k, r, preq, pres, iat, rat, ia, ra): p1 preq pres bytes([iat]) bytes([rat]) ia ra p2 ia ra bytes([rat]) bytes([iat]) pres preq temp xor_128(r, p1) return aes_128(k, aes_128(k, temp) ^ p2)s1函数生成短期密钥STKdef s1(k, r1, r2): # 拼接r1的高64位和r2的低64位 r_combined (r1 0xFFFFFFFFFFFFFFFF0000000000000000) | (r2 0x0000000000000000FFFFFFFFFFFFFFFF) return aes_128(k, r_combined)技术细节Just Works模式下TK0Passkey Entry模式下TK是6位数字000000-999999OOB模式下TK是预共享的128位随机数3.2 Secure Connections的升级装备安全连接引入了更强大的椭圆曲线密码学P-256曲线和这些新武器f4函数用于配对确认def f4(u, v, x, z): message u v z return aes_cmac(x, message)f5函数生成LTK和MacKeydef f5(dhkey, n1, n2, a1, a2): t aes_cmac(bsalt, dhkey) # salt是固定值蓝牙SMP part1 aes_cmac(t, b\x00 bbtle n1 n2 a1 a2 b\x00\x01\x00) part2 aes_cmac(t, b\x01 bbtle n1 n2 a1 a2 b\x00\x01\x00) return part1, part2 # MacKey, LTK4. 实战案例从协议到代码的完整映射让我们以最常见的Just Works配对为例看看协议栈中实际发生了什么特征交换# Master发送Pairing Request pairing_req { io_cap: IO_CAP_NO_INPUT_NO_OUTPUT, oob_flag: OOB_AUTH_NOT_PRESENT, auth_req: AUTH_REQ_BONDING } # Slave回复Pairing Response pairing_res { io_cap: IO_CAP_NO_INPUT_NO_OUTPUT, oob_flag: OOB_AUTH_NOT_PRESENT, auth_req: AUTH_REQ_BONDING }认证阶段TK0# 双方计算并交换Confirm值 m_confirm c1(tk0, m_randos.urandom(16), preqpairing_req_bytes, prespairing_res_bytes, iat0, rat0, iamaster_addr, raslave_addr) # 交换随机数后验证 if local_confirm ! peer_confirm: raise SMPAuthenticationError(Confirm值不匹配)密钥生成# 生成STK用于加密链路 stk s1(tk0, s_randslave_rand, m_randmaster_rand) # 后续在加密通道中交换LTK等长期密钥 ltk generate_ltk() # 通常使用硬件随机数生成器在开发中遇到的经典问题Confirm值校验失败检查地址类型0公共地址1随机地址和字节序问题STK生成失败确认随机数是否正确传递和拼接。

相关文章:

别再死记硬背了!用一张图+代码示例,彻底搞懂蓝牙BLE配对的6种SMP流程

蓝牙BLE安全配对实战图解:6种SMP流程与核心算法拆解 每次看到蓝牙协议栈里那些晦涩的安全管理协议(SMP)文档就头疼?别担心,今天我们用工程师的思维来重新解构这个"安全黑匣子"。扔掉那些让人昏昏欲睡的文字…...

【Mojo+Python企业级混合编程实战指南】:20年架构师亲授3大高频场景落地方法论

第一章:Mojo与Python混合编程的企业级价值全景图Mojo 是一种专为 AI 原生系统设计的现代系统编程语言,兼具 Python 的表达力与 C/Rust 级别的性能。在企业级 AI 工程实践中,Mojo 并非旨在替代 Python,而是以“无缝互操作”为核心理…...

Wand-Enhancer技术解析与选型指南:解锁WeMod高级功能的完整路径

Wand-Enhancer技术解析与选型指南:解锁WeMod高级功能的完整路径 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款针对WeM…...

为什么你的C盘空间总是不够用?可能是Windows驱动文件在悄悄“发胖“

为什么你的C盘空间总是不够用?可能是Windows驱动文件在悄悄"发胖" 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 想象一下这样的场景:你的电脑C盘明明…...

Python AI推理延迟骤降62%的秘密:一张未公开的Cuvil架构设计图,含3大专利级调度模块

第一章:Python AI推理延迟骤降62%的秘密:一张未公开的Cuvil架构设计图,含3大专利级调度模块Cuvil 架构并非传统加速器堆叠方案,而是一种面向 Python 原生执行栈深度协同的异构推理引擎。其核心突破在于绕过 PyTorch/TensorFlow 的…...

Evo-1两阶段训练拆解:如何像“冻住”VLM backbone一样,保住你的模型语义不漂移?

Evo-1两阶段训练拆解:如何像“冻住”VLM backbone一样,保住你的模型语义不漂移? 当你尝试将一个预训练的视觉语言模型(VLM)适配到机器人控制任务时,是否遇到过这样的困境:模型在训练集上表现良…...

Codesys的CNC模块到底怎么用?手把手教你用WPF上位机联动,实现G代码解析与虚拟轴运动

Codesys CNC模块实战:WPF上位机与虚拟轴联动的G代码解析系统 1. 工业控制新范式:软硬件协同的虚拟调试方案 在智能制造和工业4.0背景下,控制系统开发正经历从传统硬件依赖到软件定义的转型。作为工业自动化领域的瑞士军刀,Codesys…...

深入解析PEB结构:为什么隐藏调试器能解决x64dbg的MS_VC_EXCEPTION问题

深入解析PEB结构:为什么隐藏调试器能解决x64dbg的MS_VC_EXCEPTION问题 调试器与反调试技术的博弈一直是Windows系统底层开发中的经典话题。当你在x64dbg中遇到406D1388或E06D7363这类异常时,可能已经踩中了调试检测的陷阱。本文将带你从PEB结构出发&…...

从DWG到GIS地图:手把手教你用Java提取坐标并导入PostgreSQL/PostGIS

从DWG到GIS地图:Java全链路坐标处理与PostGIS集成实战 在建筑信息模型(BIM)与地理信息系统(GIS)融合的大趋势下,DWG图纸中的几何数据正成为智慧城市建设的核心资产。作为长期从事空间数据处理的开发者&…...

DOMPurify实战:如何在Node.js后端安全处理用户HTML输入(附最新jsdom配置)

DOMPurify实战&#xff1a;如何在Node.js后端安全处理用户HTML输入&#xff08;附最新jsdom配置&#xff09; 当用户提交的HTML内容直接进入数据库时&#xff0c;就像给黑客开了扇后门。去年某知名博客平台因未过滤富文本评论&#xff0c;导致攻击者通过精心构造的<img srcx…...

使用LaTeX撰写基于Lingbot-Depth-Pretrain-VitL-14的学术论文:图表与算法排版

使用LaTeX撰写基于Lingbot-Depth-Pretrain-VitL-14的学术论文&#xff1a;图表与算法排版 写学术论文&#xff0c;尤其是涉及深度学习和计算机视觉模型的&#xff0c;比如你正在研究的Lingbot-Depth-Pretrain-VitL-14&#xff0c;最头疼的往往不是实验本身&#xff0c;而是如何…...

如何用PlugY实现暗黑破坏神2单机体验增强

如何用PlugY实现暗黑破坏神2单机体验增强 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 在暗黑破坏神2的单机冒险中&#xff0c;玩家常常面临储物空间不足、角色加点…...

Legacy iOS Kit终极指南:让旧款iOS设备重获新生的完整解决方案

Legacy iOS Kit终极指南&#xff1a;让旧款iOS设备重获新生的完整解决方案 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-K…...

告别Transformer高开销:用频域注意力(FMNet思路)为你的轻量化模型注入全局感知能力

频域注意力革命&#xff1a;如何在轻量化模型中实现全局感知而不牺牲效率 引言&#xff1a;轻量化模型的困境与突破 在移动端AI和边缘计算领域&#xff0c;模型轻量化一直是个永恒的话题。开发者们不断在模型精度和计算资源之间寻找平衡点&#xff0c;而传统CNN模型虽然计算效…...

OpenClaw技能开发入门:千问3.5-9B定制天气查询

OpenClaw技能开发入门&#xff1a;千问3.5-9B定制天气查询 1. 为什么需要自定义技能&#xff1f; 去年冬天&#xff0c;我经常需要同时查看多个城市的天气情况来安排出差行程。每次手动打开天气网站、输入城市名、截图保存的操作让我不胜其烦。直到发现OpenClaw支持自定义技能…...

用STM32CubeMX和TMC260驱动步进电机,这份PWM频率配置指南帮你避开新手常见坑

STM32CubeMX与TMC260步进电机驱动实战&#xff1a;PWM频率配置的黄金法则 第一次用STM32CubeMX配置TMC260驱动步进电机时&#xff0c;我盯着屏幕上那一堆定时器参数发愣——Prescaler、Period、Counter Mode...这些看似简单的数字背后&#xff0c;藏着让电机平稳运转或是疯狂抖…...

开关电源拓扑结构解析:从反激到正激的实战应用

1. 开关电源拓扑结构入门指南 第一次接触开关电源设计时&#xff0c;我被各种拓扑结构搞得晕头转向。直到有次把电源板烧冒烟了才明白&#xff0c;选错拓扑就像用菜刀砍柴——不是不能用&#xff0c;但效率低还危险。开关电源拓扑结构决定了电能转换的基本框架&#xff0c;就像…...

ADS工程化实践:AEL自定义函数库的创建与集成

1. 为什么需要AEL自定义函数库&#xff1f; 在射频电路设计中&#xff0c;我们经常会遇到重复计算的场景。比如计算微带线阻抗、滤波器参数、噪声系数等&#xff0c;每次都要重新输入公式不仅效率低&#xff0c;还容易出错。我刚开始用ADS时&#xff0c;就经常因为手误输错公式…...

IM1281B电量计模块避坑指南:从接线到数据解析的全流程实战

IM1281B电量计模块实战全解析&#xff1a;从硬件对接到数据处理的完整解决方案 在智能电表、能耗监测和物联网设备开发中&#xff0c;精确测量电能消耗是核心需求之一。IM1281B作为一款高性价比的单相电能计量模块&#xff0c;以其Modbus通信协议和直接电能脉冲输出功能&#x…...

Android购物商城APP实战:从零到一构建核心功能模块

1. 项目功能模块拆解与实现路径 一个完整的购物商城APP通常包含四大核心模块&#xff1a;用户系统、商品展示、购物车管理和订单处理。这就像搭建一个实体商店&#xff0c;需要先规划好门面&#xff08;登录注册&#xff09;、货架&#xff08;商品展示&#xff09;、购物篮&am…...

发动机阀系系统设计避坑指南:AVL-Excite中这10个元素配置最容易出错

发动机阀系系统设计避坑指南&#xff1a;AVL-Excite中这10个元素配置最容易出错 在发动机阀系系统的仿真建模中&#xff0c;AVL-Excite作为行业标杆工具&#xff0c;其强大的功能背后也隐藏着诸多配置陷阱。许多工程师在完成基础建模后&#xff0c;往往会在看似简单的参数设置上…...

PyTorch 2.8镜像精彩案例分享:使用AnimateDiff生成动漫风格短视频合集

PyTorch 2.8镜像精彩案例分享&#xff1a;使用AnimateDiff生成动漫风格短视频合集 1. 开箱即用的高性能深度学习环境 PyTorch 2.8深度学习镜像为创作者和开发者提供了一个强大的工具箱&#xff0c;特别适合需要生成高质量视频内容的场景。这个经过深度优化的环境基于RTX 4090…...

汇川PLC与IS620N伺服驱动实战:手把手教你完成EtherCAT网络配置与电机命名

汇川PLC与IS620N伺服驱动深度配置指南&#xff1a;从EtherCAT组态到电机精准控制 在工业自动化领域&#xff0c;伺服系统的稳定性和响应速度直接决定了设备性能的上限。汇川AM600系列PLC搭配IS620N伺服驱动组成的EtherCAT网络&#xff0c;正成为越来越多自动化工程师的首选方案…...

Windows 11终极优化指南:用Win11Debloat实现系统加速51%的免费方案

Windows 11终极优化指南&#xff1a;用Win11Debloat实现系统加速51%的免费方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to decl…...

【HTTP】HTTP协议核心体系:请求方法与状态码全结构化解析(附《思维导图》)

文章目录HTTP协议核心体系&#xff1a;请求方法与状态码全结构化解析一、核心基础概念1.1 HTTP方法的两大核心属性&#xff08;规范级定义&#xff09;1.2 HTTP状态码分类规则二、HTTP请求方法2.1 标准核心方法&#xff08;RFC 7231 定义&#xff09;2.1.1 只读类方法&#xff…...

提升openclaw开发效率:用快马一键生成算法调试与可视化工具

最近在优化openclaw机械爪控制算法时&#xff0c;发现调试过程特别耗时。每次修改参数后&#xff0c;都要重新编译代码、运行测试&#xff0c;还要手动记录数据。为了提升效率&#xff0c;我用InsCode(快马)平台快速搭建了一个可视化调试工具&#xff0c;效果出乎意料的好。分享…...

技术难题攻克指南:Retrieval-based-Voice-Conversion-WebUI常见问题全景解析

技术难题攻克指南&#xff1a;Retrieval-based-Voice-Conversion-WebUI常见问题全景解析 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieva…...

Fastboot Enhance:高效Android刷机工具与Payload管理平台

Fastboot Enhance&#xff1a;高效Android刷机工具与Payload管理平台 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 价值定位&#xff1a;重新定…...

从移动平均到IIR滤波:用Matlab filter函数实现数据降噪的完整指南(附对比实验)

从移动平均到IIR滤波&#xff1a;用Matlab filter函数实现数据降噪的完整指南&#xff08;附对比实验&#xff09; 在数据分析与信号处理领域&#xff0c;噪声污染是影响结果准确性的常见挑战。无论是来自传感器的物理干扰&#xff0c;还是数据传输过程中的随机波动&#xff0c…...

NSC_BUILDER:全能Switch文件处理工具的深度应用指南

NSC_BUILDER&#xff1a;全能Switch文件处理工具的深度应用指南 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encryption…...