BLE安全之SM剖析(2)

  上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。接下来就进入了ble配对的阶段二,在该阶段双方会根据阶段一中的配对信息选择合适的配对和认证方式,并且生成会后续链接加密的密钥。

1. 配对整体流程

下面再回顾下整个配对流程框架:

配对是为了建立密钥,密钥用来加密连接,发布密钥是为了共享密钥,用于加密重新连接、验证签名和随机地址解析,上图是蓝牙配对的整个流程图。

配对有三个阶段,两个阶段是必须使用的,第三阶段可选:

阶段一:Pairing Feature Exchange 交换配对特性

阶段二:(LE legacy pairing): Short Term Key (STK) Generation 传统配对方式,生成STK

阶段二:(LE Secure Connections): Long Term Key (LTK) Generation 安全配对方式, 生成LTK

阶段三:Transport Specific Key Distribution 发布密钥

本章我们主要来讲解配对的阶段二
首先双方会配对阶段一中的配对信息选择配对方式,配对方式主要有两种legacy pairing 和 secure pairing。如果双方都支持secure pairing则选择secure pairing,否则选择legacy pairing配对方式。

2. legacy pairing

legacy pariing会在该阶段生成STK,这个是后续绑定和加密的关键。而STK则是通过TK来生成。
legacy pairing的认证方式有:Just_Work, Passkey Entry, OOB这三种方式。

配对流程分析:

  1. 机端和设备端分别生成一个随机数,LP_RAND_I 和 LP_RAND_R

  2. 双方协商TK值

    • Just Work 模式TK值默认为0,
    • Passkey Entry模式TK值即为输入的数值,
    • OOB模式TK值即为OOB交互的数值。
  3. 双方通过下面公式计算分别计算各自confirm值

LP_CONFIRM_I = c1(TK, LP_RAND_I, Pairing Request command, Pairing Response command, initiating device address type, initiating device address, responding device address type, responding device address)
LP_CONFIRM_R = c1(TK, LP_RAND_R, Pairing Request command, Pairing Response command, initiating device address type, initiating device address, responding device address type, responding device address)

​ c1可以近似的认为就是AES算法

  1. 主机将LP_CONFIRM_I发送给设备端, 设备端将LP_CONFIRM_R值发送给主机端

  2. 主机端收到后将自身的随机数LP_RAND_I 发送给设备端,设备端根据该随机数重新计算confirm值,如果计算结果和LP_CONFIRM_I不一致,则返回配对失败。如果结果一致,则将自身的LP_RAND_R值发送给主机端

  3. 主机端收到后,根据随机数LP_RAND_R 重新计算confirm值,如果计算结果和LP_CONFIRM_R不一致,则返回配对失败,否则返回配对成功,并计算STK,加密链路。

STK的计算公式如下:

STK = s1(TK, LP_RAND_R, LP_RAND_I)

下面分别是Just Works, passkey entry 和 OOB模式的配对流程图

Just Works 配对流程图, TK设置为0


passkey entry 配对流程图,TK为输入的pin code值


OOB配对流程图,TK为外部OOB数值

由上面三个流程图可以看出,上面三个流程最大的区别就是TK值的生成方式不同,其他没什么差异。

3. secure pairing配对流程

secure pairing与legacy paring不同, secure pairing在该阶段是直接生成LTK,而不是生成STK。 secure pairing在该阶段使用的算法是公钥算法ECDH算法,而不是对称加密算法AES算法,是具备防窃听攻击的。关于ECDH的介绍可以参考我之前的博客。
https://blog.csdn.net/hesuping/article/details/125760901?spm=1001.2014.3001.5501

3.1 交换公钥

  1. 主机端和设备端双方各自生成一个公钥和私钥,并将各自的公钥发给对方。
  2. 双方收到对方公钥后,分别验证收到的公钥是否是合法的,双方根据ECDH算法可以计算出相同的共享密钥DHKey。
DHKey = P256(SKa, PKb) = P256(SKb, PKa)

3.2 鉴权阶段1

进入配对验证阶段,该阶段有三种方式,分别是Just Works模式,passkey entry模式,Numeric Comparison 模式和OOB模式。

  1. 双方分别生成一个随机数Na和Nb
  2. 双方设置ra值和rb值,这个值很类似于legacy paring中的TK值
    • Just Works模式 和Numeric Comparison 模式的ra值和rb值分别设置为0,
    • passkey entry模式的ra值和rb值即为输入的数值
    • OOB模式的ra值和rb值为外部OOB传输的数值
  3. 双方根据算法计算confirm值,交换Na和Nb值, 设备端将计算的confirm值发送给主机端
  4. 主机端根据收到的Nb值重新计算confirm值,检查是否跟设备端的一致,如果不一致则返回失败,如果一致则配对成功。
  5. 如果是Numeric Comparison 模式还会弹出6个数字的配对码,并且有用户点击确认后,则配对成功,否则配对失败。

    secure pairing配对 Just Works模式配对流程图

    secure pairing配对 Passkey Entry模式配对流程图

    secure pairing配对OOB模式配对流程图

由上面三个流程图可以看出,上面三个流程最大的区别就是ra和rb的值生成规则不同。

3.3 鉴权阶段2

该阶段主要是用来生成LTK,当然也会生成MACKey, LTK的生成和计算是依赖于上面生成的DHKey的, 流程如下:


在该阶段会互相交换MAC地址,生成LTK和MacKey,并且会生成Ea 和 Eb。
LTK就是用来生成后续加密链路的session key的

CTKD特性

额外补充一点,蓝牙支持一种交叉密钥派生的特性,简称CTKD,这种特性可以使用ble配对生成的LTK转化为BT配对的LinkKey,从而实现通过BLE的配对将其转化成BT的配对,这个特性用在蓝牙耳机、智能手表等产品上可以大幅提升产品的配对体验。当然也可以反过来,通过BT配对生成的LinkKey可以转化为BLE的LTK。 这个特性后面会专门写一篇来介绍。

T配对的LinkKey,从而实现通过BLE的配对将其转化成BT的配对,这个特性用在蓝牙耳机、智能手表等产品上可以大幅提升产品的配对体验。当然也可以反过来,通过BT配对生成的LinkKey可以转化为BLE的LTK。 这个特性后面会专门写一篇来介绍。

以上就是BLE配对流程的阶段二,在该阶段根据设备的配对特性,选择了不同的配对和鉴权方式,并且生成了对应的STK或者LTK,会后续链路的加密打下基础。

那后续的链路是如何加密的? 我们会在下个章节来剖析。

BLE安全之SM剖析(2)相关推荐

  1. esp32与android蓝牙,ESP32蓝牙架构(官方)_esp32蓝牙,esp32如何连接手机蓝牙

    ESP32 蓝牙开发资料,用于了解ESP32内部的蓝牙实现. 本⼿册为 ESP32 的蓝⽛架构简介,主要分三个章节介绍了蓝⽛.经典蓝⽛和蓝⽛低功耗 ⽅⾯的整体架构.注意,本⼿册仅针对 ESP-IDF ...

  2. BLE协议栈 – SM

    SM(Security Manager)安全管理层定义了BLE通信两端设备的配对方法和密钥分发的工作模式,提供了一系列加密算法,为BLE通信提供了加密.认证等安全保障.它与GAP层密切相关,关于安全需 ...

  3. 深入剖析BLE蓝牙数据收发处理

    **深入剖析BLE蓝牙数据收发处理** 简介 蓝牙基本架构 1 开启BLE的广播 2 常见芯片的基本架构 3 基带的功能 4 基带封装广播的空口数据包 简介 我将通过一个BLE蓝牙广播的例子,深入的解 ...

  4. BLE Host解析:BLE SM(1): 配对特性交换(Pairing Feature Exchange)

    本文引自:https://blog.bluetooth.com/bluetooth-pairing-part-1-pairing-feature-exchange 蓝牙的Spec规格有三个主要架构层, ...

  5. 蓝牙BLE ATT剖析(二)-- PDU

    一.Error Handling Error Response The Error Responseis used to state that a given request cannot be pe ...

  6. 蓝牙BLE LINK LAYER剖析(二) -- PDU

    DATA FORMAT The Link Layer has only one packet format used for both advertising channel  packets and ...

  7. 蓝牙BLE LINK LAYER剖析(一) -- status and channel

    一.LINK LAYER STATES 二.PHYSICAL CHANNEL

  8. 蓝牙BLE ATT剖析(一)

    一.概述 The attribute protocol allows a device referred to as the server to expose a set  of attributes ...

  9. BLE低功耗蓝牙开发学习,从零到深教程文档总结(持续更新2022/6/14更新)

    写在前面: 写教程原因: 说说自己写这次的ble教程的由来吧.以往公司总有很多是做单片机的或者应届生毕业,他们对ble不是很连接,公司一般都会安排别人来做一点培训啊,或者老员工带.巧了,之前帮别的培训 ...

  10. springboot拦截器拦截提示_Springboot拦截器使用及其底层源码剖析

    博主最近看了一下公司刚刚开发的微服务,准备入手从基本的过滤器以及拦截器开始剖析,以及在帮同学们分析一下上次的jetty过滤器源码与本次Springboot中tomcat中过滤器的区别.正题开始,拦截器 ...

最新文章

  1. 从零开始的ROS四轴机械臂控制-目录
  2. Livemesh文件同步功能--使用图解
  3. Android 7.0 Nougat介绍
  4. 模式识别之聚类算法k-均值---k-均值聚类算法c实现
  5. 常见设计模式描术(看完就把它忘记~~)
  6. Netty工作笔记0068---Protobuf机制简述
  7. Byte[]、Image、Bitmap 之间的相互转换
  8. shell定时执行java,shell学习之定时运行作业
  9. 第4讲 The Zend Framework MVC Architecture
  10. jquery开关灯案例_JS/jQuery实现简单的开关灯效果【案例】_輕微_前端开发者
  11. KETTLE使用教程(包含几个小示例)
  12. 秒懂MOS管选型技巧
  13. Matlab APP Designer的基本使用过程以及技巧
  14. HTML基本知识学习 2021-04-08
  15. CRAY超级计算机发展,Cray推出专为企业设计的Shasta超级计算机
  16. 基于SpringBoot的网上电影票购买系统设计与实现
  17. 企业微信三方开发:注册企业微信服务商
  18. 化妆行业网站建设方案
  19. linux HPA隐藏分区,删除HPA隐藏分区有两种方法
  20. 飞扬的小鸟JavaScript实现

热门文章

  1. 面试被问到如何理解单一职责原则
  2. 利用Burpsuite密码爆破
  3. 腾讯Dreamwriter:自动化新闻发展之路
  4. Python for 循环语句详解:基础语法、range 函数、变量作用域分析
  5. 成都android培训机构,成都安卓开发学习班哪里好
  6. Ubuntu linaro(Lubuntu ARM) (Cubieboard CC-A80) Chromium 运行Selenium Webdriver
  7. GPLT L2-2 三足鼎立
  8. OBM模型(大气科学,基于观测的模型)--新手小白记录学习经历
  9. 【Xamarin 挖墙脚系列:IOS 开发界面的3种方式】
  10. 洛谷题解跳转器(P1000——P1049)