尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
BLE SMP 抓包实战
BLE SMP 基础BLE SMP 抓包实战 —— LESC Passkey Entry 逐包判读一、配对触发与特性交换Phase 11.1 Security Request0x0b1.2 Pairing Request0x011.3 Pairing Response0x02二、LESC 认证与密钥生成Phase 22.1 Pairing Public Key0x0c2.2 Pairing Confirm / Random0x03 / 0x04× 20 轮2.3 Pairing DHKey Check0x0d三、加密建立与密钥分发Phase 33.1 加密建立3.2 密钥分发一、配对触发与特性交换Phase 1Phase 1 确定由哪一方发起配对、交换双方的能力与安全需求、决定配对方式。后续的密钥生成方式与密钥分发范围均在此阶段确定。1.1 Security Request0x0b报文含义“我希望建立一条 Level 4LESC 认证 加密的链路请发起配对。”字段值判读L2CAP Length21 字节opcode 1 字节AuthReqOpcode0x0bSecurity RequestAuthReq0x0d外设的安全要求绑定 认证MITM LESCSecurity Request只能由从设备Peripheral发出它的作用只是提示真正发起配对的第一步Pairing Request只能由中央Central发出。AuthReq 0x0d的含义0x0d 0000 1101 │ ││ └─ bit0 Bonding 1 要求绑定 │ │└─── bit2 MITM 1 要求认证 │ └──── bit3 SC 1 支持 LESC └────── bit5 CT2 0 不涉及 BR/EDR板子在连接建立后立刻请求 Level 4于是任何达不到 Level 4 的配对都会被协议栈自动拒绝。1.2 Pairing Request0x01报文结构┌──────┬───────────────┬──────────┬─────────┬──────────┬─────────┬─────────┐ │ Code │ IO Capability │ OOB flag │ AuthReq │ MaxKeySz │ InitKey │ RespKey │ │ 0x01 │ 0x04 │ 0x00 │ 0x2d │ 0x10 │ 0x0f │ 0x0f │ └──────┴───────────────┴──────────┴─────────┴──────────┴─────────┴─────────┘字段值判读IO Capability0x04Keyboard, Display手机既能显示也能输入有屏幕有键盘OOB Data Flag0x00没有带外数据 → 走不了 OOB 配对AuthReq0x2dBonding MITM SC CT2典型 Android 手机Max Enc Key Size16可接受最长 128 bit 密钥Initiator Key Dist0x0f手机愿意分发全部 4 种密钥Responder Key Dist0x0f希望外设也分发全部 4 种这里只是声明意愿实际分发范围取双方声明与本机策略的交集最终由 Pairing Response 定稿。1.3 Pairing Response0x02与 Pairing Request 逐字段对比字段Request手机Response板子差异说明IO Capability0x04KeyboardDisplay0x00Display Only板子只有屏幕没有键盘AuthReq0x2d0x0d差0x20 CT2 位板子是纯 BLEMax Key Size1616一致Initiator Key Dist0x0f全要0x02只要 IRK板子把 “手机要分发的内容” 收敛到只剩 IRKResponder Key Dist0x0f全要0x00不分发任何密钥板子不向手机分发任何密钥板子的Responder Key Distribution 0x00意味着 Phase 3 里外设不会发任何密钥报文 —— 所以后面只能看到手机的Identity Information (0x08)和Identity Address Information (0x09)。而Initiator Key Distribution 0x02只要 IRK意味着 手机只需给出 IRK 身份地址用于让板子解析手机未来使用的随机地址RPA。二、LESC 认证与密钥生成Phase 2Phase 2 双方交换公钥以计算共享的 DHKey再通过 Passkey 完成认证最后以 DHKey Check 相互校验 —— 本阶段结束时双方已各自持有相同的密钥材料。2.1 Pairing Public Key0x0c手机的公钥发起方板子的公钥响应方报文结构┌──────┬────────────────────────────┬────────────────────────────┐ │ Code │ Public Key X │ Public Key Y │ │ 1B │ 32 B │ 32 B │ └──────┴────────────────────────────┴────────────────────────────┘Public Key X/Y各 32 字节P-256 椭圆曲线的临时公钥X、Y 两个坐标合起来才是一个点也就是一把公钥单看 X 或单看 Y 都没有意义双方各发一把。这两个报文的作用手机私钥 a → 公钥 A a·G ──── A ────► 板子 板子私钥 b → 公钥 B b·G ──── B ────► 手机 ↓ 双方各自计算 DHKey a·B b·A ab·G2.2 Pairing Confirm / Random0x03 / 0x04× 20 轮这两个报文是一对「承诺—揭示」报文用途是 在不把 Passkey 发到空口的前提下让双方确认对方知道同一个 Passkey。报文作用内容Pairing Confirm0x03承诺先把本轮的随机数 “锁住”但不公开16 字节校验值Pairing Random0x04揭示再把该随机数公开供对方验算16 字节随机数本轮 nonce一轮完整的往返双方各自生成一个 16 字节随机数本轮 nonce本机私有、不发送。把「本轮 nonce」当作密钥把「双方公钥的 X 坐标 Passkey 的本轮 1 位」当作消息算出一个 16 字节校验值 —— 作为Confirm发出对方即使收到这个校验值也无法反推出 nonce。双方把本轮 nonce 明文发出 —— 即Random报文双方用「收到的 nonce 自己的 Passkey 位」重算一次与对方先前发来的Confirm比对相等 → 对方确实持有同一个 Passkey 位不等 → 立即Pairing Failed。顺序不可颠倒 —— 先承诺、后揭示只有先发Confirm后发RandomConfirm才能在 nonce 未知时成为不可伪造的承诺若先揭示 nonce攻击者就能枚举仅 1 位的 Passkey 并伪造Confirm验证即失效。为什么是 20 轮?6 位十进制数字的信息量是 20 bit999999 0xF423F协议按每轮验证 1 位来处理因此走 20 轮。抓包实例第 1 轮Confirm / Random手机 → 板子Confirm板子 → 手机Confirm手机 → 板子Random板子 → 手机Random2.3 Pairing DHKey Check0x0d作用双方各自算出 DHKey 后用它计算校验值互发一次确认两边算出的 DHKey 一致。手机 → 板子板子 → 手机DHKey Check 本身不传输 DHKey传的是基于 DHKey 的校验值。三、加密建立与密钥分发Phase 3密钥分发必须在已加密的链路上进行因此时间顺序上先出现链路加密建立随后才是密钥报文 —— 本阶段结束时绑定所需的信息已由双方保存。3.1 加密建立配对谈好密钥之后真正打开加密的是链路层Link LayerLL_ENC_REQ0x03—— 中央侧参数字段长度本抓包的值含义Rand8 字节0LESC 的判读标志EDIV2 字节0同上SKD_C8 字节0x4ab874228632f5f9中央侧随机数参与派生会话密钥IV_C4 字节0xaeb50886中央侧随机数参与构成 AES-CCM 的初始向量LL_ENC_RSP0x04—— 外设侧参数字段长度本抓包的值含义SKD_P8 字节0x0df3ae7d1d0bcc2b外设侧随机数参与派生会话密钥IV_P4 字节0xfecc0a09外设侧随机数参与构成初始向量LL_START_ENC_REQ0x05—— 开始加密这个 PDU 没有任何参数长度 1 就是 opcode 本身。它由外设发出含义是 “会话密钥已算好从此开始用加密收发” 。中央收到后回LL_START_ENC_RSP0x06—— 该包已是加密发送收到它就说明加密链路正式生效。EDIV 0、Rand 0 说明了什么?—— LTK 由 DHKey 派生、双方各自持有无须用 EDIV/Rand 去索引密钥。会话密钥是怎么来的双方各出一半随机数在空口交换SKD SKD_P ‖ SKD_C, IV IV_P ‖ IV_C拼接顺序为外设那一半在前、中央那一半在后会话密钥 以 LTK 为密钥、SKD 为明文做一次 AES 加密SK e(LTK, SKD)真正用于加解密的是会话密钥 SK 与初始向量 IV而不是直接使用 LTK这样设计的作用是每次连接都会换一套 SKD / IV因此会话密钥每次不同 而 LTK 只存在于双方本地空口上只出现随机数 SKD / IV。3.2 密钥分发以下两个报文成对出现前者给出密钥IRK后者给出身份地址合起来让板子记住手机是谁。Identity Information0x08—— IRK手机发出Identity Address Information0x09—— 身份地址手机发出为什么只有手机在发因为在Pairing Response里板子声明了Responder Key Distribution 0x00—— 不分发任何密钥所以 Phase 3 里只有手机单向发出 IRK 与身份地址。IRK 的作用手机以后重连时会使用随机地址RPA → 外设用手机给的 IRK 做地址解析 → 解析出真实身份地址22:22:99:1c:6e:b2身份地址的作用若只有 IRK 而没有身份地址解析成功也只能知道这是认识的设备无法知道是哪一条记录。作为密钥库的索引重连时手机用新的 RPA 发起连接 → 外设用 IRK 解析出身份地址 → 查出对应的 LTK → 直接开始加密跳过配对。
RELATED

相关推荐

v-charts 高级属性实战:extend 配置扩展、afterConfig 钩子与加载/空数据状态管理

v-charts 高级属性实战:extend 配置扩展、afterConfig 钩子与加载/空数据状态管理

前端数据可视化UI组件 【免费下载链接】v-charts 基于 Vue2.0 和 ECharts 封装的图表组件📈📊 项目地址: https://gitcode.com/gh_mirrors/vc/v-charts 点击查看 免费下载 v-charts 是基于 Vue2.x 与 ECharts 封装的图表组件库,本…

📅 2026/10/12 3:52:36
Semantic Router Adaptation 在线模型选择学习机制详解:配置、评分算法与可观测性

Semantic Router Adaptation 在线模型选择学习机制详解:配置、评分算法与可观测性

后端API网关模型推理服务AI Agent 【免费下载链接】semantic-router An open, programmable decision layer for models and compute. 项目地址: https://gitcode.com/gh_mirrors/sem/semantic-router 点击查看 免费下载 导读 Adaptation(自适应&#…

📅 2026/10/12 3:47:36
Kubernetes Python 异步客户端 NodeV1Api 测试模块深度解析:TestNodeV1Api 与 RuntimeClass 全生命周期

Kubernetes Python 异步客户端 NodeV1Api 测试模块深度解析:TestNodeV1Api 与 RuntimeClass 全生命周期

后端云原生容器编排 【免费下载链接】python Official Python client library for kubernetes 项目地址: https://gitcode.com/gh_mirrors/python1/python 点击查看 免费下载 本篇技术指南以 Kubernetes 官方 Python 客户端仓库中 kubernetes.aio.test.test_node_v…

📅 2026/10/12 3:47:36
MORE NEWS

更多资讯

📰

图像法矿石粒度分析:基于Matlab的粒径统计与系统实现

矿石粒度分析这几年在砂石骨料、选矿、破碎生产里的需求越来越大。以前大家熟悉的是人工筛分:取样、搬运、振动筛,一套下来没有一两个小时出不了结果,现场粉尘还大。用Matlab写矿石粒度分析系统软件,核心就是石料粒径特性统计——…

📰

AnyPS5:PS5多主机存档备份与迁移工具实战解析

说实话,第一次想到做AnyPS5这个小工具,是因为我自己被折腾得够呛。家里两台PS5,一台客厅一台书房,存档、截图、设置散落在两台机器上,打一半想换个地方继续,结果发现进度对不上。官方自带的数据同步功能在多…

📰

秒杀系统落地实践:高并发场景下的分层拦截与异步削峰

做秒杀系统这几年,我踩过的坑比看过的方案多。很多文章一上来就堆架构图,动辄"高可用""最终一致",看完反而不知道怎么落地。这篇我把一个能直接落地的秒杀方案从头到尾拆一遍,争取让你15分钟建立起完整的认知…

📰

基于Spring Boot的服装制造企业综合管理系统设计与实现

每年到了毕业设计选题的时候,总会有同学来问我:有没有适合Java后端、工作量适中、又不容易烂大街的题目?我最常提到的就是“基于Spring Boot的服装制造有限公司综合管理系统”。这类项目热度很高,不是因为名字里有“服装”两个字&…

📰

Pomotroid 自动明暗主题(Auto/Light/Dark)实现全解析:从设置数据模型到 matchMedia 实时联动

【免费下载链接】pomotroid :tomato: Simple and visually-pleasing Pomodoro timer 项目地址: https://gitcode.com/gh_mirrors/po/pomotroid 点击查看 免费下载 导读:Pomotroid 是一款基于 Tauri Svelte 的番茄钟应用,其主题系统曾长期停…

📰

PS5游戏信息聚合工具实战:Python爬虫、数据清洗与全文搜索构建记录

先交代一下背景。我是个游戏库存控,平时最大的爱好就是逛各个商店页面和评分站,看看最近有什么值得入手的PS5游戏。可时间一长,我发现自己每天至少要在五六个不同站点之间来回切换——想确认口碑得去媒体评分站,想比价格得看商店页…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬