BLE协议--SMP(安全管理协议)

这篇具有很好参考价值的文章主要介绍了BLE协议--SMP(安全管理协议)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

1. Security Manager介绍

2. Pairing(配对)

2.1 配对第一阶段

2.1.1 配对方法

2.1.2 Authentication(鉴权方式)

2.1.3 IO Capabilities

 3.1.4 Authentication方法的选择

2.2 LE legacy pairing

2.2.1 配对请求的报文格式

2.2.2 配对第二阶段

2.2.3 配对第三阶段

3. 绑定

总结


前言

SMP即Security Manager Protocol。其内容主要是配对和Key的分发,然后用Key对链路或数据进行加密。双方要共同拥有一个加密key(LTK,Long Term Key)。这个key至关重要,怎么生成、怎么由通信的双方共享,关系到加密的成败。因此蓝牙协议定义了一系列的复杂机制,用于处理和加密key有关的操作,这就是SM(Security Manager)。

1. Security Manager介绍

BLE协议--SMP(安全管理协议)

它的主要目的是为LE设备(LE only或者BR/EDR/LE)提供建立加密连接所需的key(STK or LTK)。为了达到这个目的,它定义了如下几类规范:

1)将生成加密key的过程称为Pairing(配对),并详细定义了Pairing的概念、操作步骤、实现细节等。

2)定义一个密码工具箱(Cryptographic Toolbox),其中包含了配对、加密等过程中所需的各种加密算法。

3)定义一个协议(Security Manager Protocol,简称SMP),基于L2CAP连接,实现master和slave之间的配对、密码传输等操作。

2. Pairing(配对)

区别于传统蓝牙的配对过程,BLE的配对过程发生在连接过程之后,配对是一个三阶段的过程。前两个阶段是必须的,第三阶段是可选的。

  • 第一阶段:配对特征交换
  • 第二阶段:短期秘钥(STK)生成
  • 第三阶段: 传输特定秘钥分配

BLE协议--SMP(安全管理协议)

 

阶段1,称作“Pairing Feature Exchange”,用于交换双方有关鉴权的需求(authentication requirements),以及双方具有怎么的人机交互能力(IO capabilities)。

阶段2,通过SMP协议进行实际的配对操作,根据阶段1 “Feature Exchange”的结果,有两种配对方法可选:LE legacy pairing和LE Secure Connections。

阶段3是可选的,经过阶段1和阶段2之后,双方已经产生了加密key,因而可以建立加密的连接。加密连接建立后,可以互相传送一些私密的信息,例如Encryption Information、Identity Information、Identity Address Information等。

2.1 配对第一阶段

两个设备之间的配对信息交换是通过配对请求和配对响应数据包完成的。

当配对特性交换开始时,发起者和响应者将通过配对请求和响应相互交换配对特性信息。有了这些信息,发起者和响应者可以相互确定I/O能力,应该使用哪种配对机制(legacy pairing或LE Secure Connections),并选择配对方法(just work、Passkey Entry、Numeric Comparison or Out of Band),以便在阶段 2中使用。

配对特征交换的是输入输出(IO)功能、认证需求(需不需要绑定以及防止MITM )、密钥大小(固定为128bit)。

2.1.1 配对方法

Master和Slave有两种可选的配对方法:LE legacy pairing和LE Secure Connections,选择的依据是:当Master和Slave都支持LE Secure Connections 的时候,则使用LE Secure Connections。否则,使用LE legacy pairing。

2.1.2 Authentication(鉴权方式)

对BLE来说,主要有三类鉴权的方法,如下:

JustWorks:只工作,不需要用户参与,两个设备自行协商;安全级别很低。两设备使用的是默认的TK值(6 个 0);

PasskeyEntry:输入密码,通过输入配对码的方式鉴权;6位数是随机产生的在000000到999999之间的数值,这个数值相当于一个TK,比如远端显示这个数字,需要在本地端输入这个数字给本地设备与远端配对。如输入019655,那此时的临时Key–TK是:0x00000000000000000000000000004CC7。

OOB:带外,在配对过程之外,额外的交互一些信息,并以这些信息为输入,进行后续的配对操作。这些额外信息也称作OOB(out of band);这种方式是通过BLE之外的,设备上的其他方式来获取这个OOB data,比如通过IR红外,或其余的方式,因此对于蓝牙窃听者/攻击者而言这个data的传输是不可见的了,因此会显得要安全些。带外的TK值是一个16字节的随机数,通过非BLE的方式传递给对端。

2.1.3 IO Capabilities

Security Manager抽象出来了三种MITM类型的鉴权方法,这三种方法是根据两个设备的IO能力,在“Pairing Feature Exchange”阶段自动选择的。IO的能力可以归纳为如下的五种:

BLE协议--SMP(安全管理协议)

 3.1.4 Authentication方法的选择

在“Pairing Feature Exchange”阶段,配对的双方以下面的原则选择鉴权方法:

1)如果双方都支持OOB鉴权,则选择该方式(优先级最高)。

2)否则,如果双方都支持MITM鉴权,则根据双方的IO Capabilities(并结合具体的配对方法),选择合适的鉴权方式(具体可参考BLE SPEC中的介绍)。

3)否则,使用Just work的方式(不再鉴权)。

2.2 LE legacy pairing

BLE协议--SMP(安全管理协议)

2.2.1 配对请求的报文格式

配对请求包格式如下图所示:

BLE协议--SMP(安全管理协议)

 BLE协议--SMP(安全管理协议)

 

1. Code (1 octet)

BLE协议--SMP(安全管理协议)

2. IO Capability (1 octet)
0x00 DisplayOnly 只能是显示000000 ~ 999999的数字
0x01 DisplayYesNo 显示Yes/No 的按钮
0x02 KeyboardOnly 只能是输入000000 ~ 999999的数字
0x03 NoinputNoOutput 没有输入也没有显示,只能用Just work工作方式
0x04 KeyboardDisplay 能输入000000 ~ 999999的数字和输出


3. OOB data
0x00 OOB 数据没有发送
0x01 OOB 数据通过远端设备发送(如IR)
0x02-0xFF 保留


4. AuthReq (1 octet)
AuthReq字段是一个位字段,指示STK和LTK以及GAP绑定信息的请求安全属性

BLE协议--SMP(安全管理协议)
 BF, “Bonding_Flags”

绑定是指配对后交换长期密钥(LTK),并存储这些密钥供以后使用——这是在设备之间创建永久的安全性。

BLE协议--SMP(安全管理协议)

MITM

MITM域设置为1为请求MITM(中间人介入)保护,否则设置为0. 设备将标志设置为1为STK请求认证的安全属性。

选择Key生成的方法,如果auth Req中MITM没有,则说明不需要人参与中间,所以IO capabilities会被忽略,只用Just Works就OK了。如果有OOB data,auth Req将可直接忽略,会直接选择OOB的方式了。

“SC”

SC字段是一个1位标志,设置为1以请求LE安全连接配对。可能产生的配对机制是,如果两个设备都支持LE Secure Connections,则使用LE Secure Connections模式,否则使用LE legacy pairing模式。所以这个标志是确定第二阶段配对方法的指示位。

  MaxEncKeySize
最大密钥长度,长度应该在7-16字节之间;
 InitiatorKeyDistribution
该域表明秘钥初始化设备请求分配秘钥分配使用。
ResponderKeyDistribution
 该字段表明秘钥初始化设备请求响应设备来分配秘钥分配使用。

BLE协议--SMP(安全管理协议)

 EncKey是一个1位字段,它被设置为1时,应使用从BR/EDR链路密钥计算LTK的程序。

IdKey是一个1位字段,它被设置为1,表示设备应使用身份信息命令分发IRK,然后使用其公共设备或使用身份地址信息分发静态随机地址。

SignKey是一个1位的字段,它被设置为1,表示设备应使用签名信息命令来分发CSRK。

LinkKey是一个1位的字段。当SMP在LE传输上运行时,LinkKey字段被设置为1,以表示设备希望从LTK派生出LinkKey。当启动器和响应密钥分发/生成字段中的两个设备都将LinkKey设置为1时,应使用从LTK计算BR/EDR链路密钥的程序。不支持LE安全连接的设备应将此位设置为零,在接收时忽略。当SMP在BR/EDR传输上运行时,LinkKey字段将保留以供将来使用。

2.2.2 配对第二阶段

配对的第1阶段通过特征交换仅仅得到TK值,而TK值是用来做在第2阶段用来作为密钥进行计算两个重要的值:身份确认值(confirm)和短期秘钥(STK)值.

pairing 
第一阶段的配对特征交换成功之后,用来启动STK生成。该命令被两个对等设备使用,来向对等设备发送确认值。初始化设备通过向响应设备发送配对确认命令启动STK生成。

BLE协议--SMP(安全管理协议)

 

1.Initiator生成128-bit随机数Mrand,并使用这个Mrand结合一些其他的输入,使用密码工具箱中c1计算出一个128-bit的Mconfirm值:
Mconfirm = c1(TK, Mrand,Pairing Request command, Pairing Response command,initiating device address type, initiating device address,responding device address type, responding device address)
Responder也生成一个128-bit随机数Srand,并使用这个Srand结合一些其他的输入,使用密码工具箱中c1计算出一个128-bit的Sconfirm值:
Sconfirm = c1(TK, Srand,Pairing Request command, Pairing Response command,initiating device address type, initiating device address,responding device address type, responding device address)
2.Initiator将其计算的Mconfirm值通过Pairing Confirm包发送给Responder,而Responder也将其计算的Sconfirm值通过Pairing Confirm包发送给Initiator;
3.Initiator收到Sconfirm后,再将Mrand值通过Pairing Random包发送给Responder;
4.Responder收到Mrand值后计算它的Mconfirm值,再跟前面那个Initiator送过来的Mconfirm值进行比较,若不同说明配对失败了。若相同,则Responder也会将它的Srand值通过Pairing Random包发送给Initiator;
5.而Initiator也会计算收到的Srand值的Sconfirm值,并跟前面那个Responder送过来的Sconfirm值进行比较,若不同说明配对失败了,若相同,继续。

短期秘钥(STK)值计算

得到 TK 后的另一个作用是计算短期秘钥,短期秘钥的使用的函数为 s1 函数。具体的 STK 计算如下:STK = s1(TK, Srand, Mrand)。

STK存在的目的在于配对绑定过程的第3 阶段不再使用明文进行数据传输,长期秘钥 LTK 的生成依赖STK,也就是说在绑定配对过程中,第 3 阶段就已经使用加密的密文传输。

然而STK或者LTK并不能直接作为将要发送的数据包加密的密钥,为了传输的数据包更加的安全,加密数据包的密钥是会话密钥Session Key(SK),也就是说会话密钥SK是用STK或者LTK当做密钥通过加密引擎函数 e 计算得到的,计算公式如下:SK=e(LTK,(SKDslave||SKDmaste))

2.2.3 配对第三阶段

第3阶段为设备绑定阶段,该阶段从机会计算产生LTK,并将LTK和计算LTK所用的EDIV和RAND两个值发给主机。主机将这三个值进行保存,这样两个设备就绑定成功了。

 长期秘钥(LTK)产生

在配对绑定的第3个阶段传输就是两个设备商量好了的特定的密钥,所有密钥都是通过计算得到。
长期密钥 LTK 使用的函数是d1函数。 计算如下:LTK=d1(ER,DIV,0)=e(ER,0||DIV)

所有的key和值都由主从设备分发。要分发的密钥由配对请求和配对响应的密钥分发参数决定,配对请求和配对响应来自第一阶段配对特征交换

BLE协议--SMP(安全管理协议)

一旦连接加密了,主机和从机之间就可以分发一些秘密信息。

如果是legacy paring,如下秘密信息必须分发:

LTK
EDIV
Rand
同时根据情况,legacy paring还需分发如下信息:

IRK
Identity address
如果是LESC paring,秘密信息分发是可选,一般有可能分发如下信息:

IRK
Identity address

 BLE的SMP的一些Key相关定义
Long Term Key (LTK):加密链路用,128-bit;
Encrypted Diversifier (EDIV):在LE legacy pairing过程中,用于识别LTK分发,16-bit;
Random Number (Rand):在LE legacy pairing过程中,用于识别LTK分发,64-bit。
Identity Resolving Key (IRK):用于生成和解析random address用的,128-bit;
Connection Signature Resolving Key (CSRK):用于对数据进行签名已经验证签名数据,128-bit;
AddrType (1 octet)
如果BD_ADDR是公共设备地址,则AddrType应设置为0x00。
如果BD_ADDR是静态随机设备地址,则AddrType应设置为0x01。
BD_ADDR(6个八位字节)此字段设置为分发设备的公共设备地址或静态随机地址。

3. 绑定

  就是将配对阶段产生的一系列key 保持到flash中,以便后续使用。如果配对的两个设备生成了LTK及其他秘密信息,并且把LTK及其他秘密信息保存到Flash等永久化存储设备中,那么我们就可以说这两个设备绑定成功。,paring强调认证和密钥生成,而bonding强调密钥保存。一旦两个设备bonding成功,那么这两个设备断开再次重连的时候,master就可以发起加密流程,从而使用paring生成的LTK对后续的连接进行加密。master发起加密连接流程如下所示:

 BLE协议--SMP(安全管理协议)

BLE协议规定, 加密连接只能由master发起,不能由slave发起slave可以发出加密请求,master收到slave的加密请求后,可以发起加密连接,也可以拒绝其请求。如下为master同意slave的加密请求流程:

BLE协议--SMP(安全管理协议)

 

总结

1.配对认证:主从机一方提供密码,一方输入密码,如果双方密码一致,那么此密码将作为TK(临时密码);

2.加密链路:利用得到的TK(临时密码)等信息计算出STK(短期密码)用来做加密认证;

3.绑定:加密认证通过后,利用STK等信息生成LTK(长期密码),把LTK保存下来,用于下次连接时做加密认证,不需要再次配对就可以加密链路,这就是绑定了;

绑定后通讯过程 : 每次连接时,从机会向主机发送安全请求,如果主从机相互绑定过,主机不会发送配对请求,主机直接利用绑定时保存的LTK发送加密请求,从机也会利用绑定时保存的LTK来做加密回复,三次握手成功后(加密成功,三次握手通讯由底层完成,用户不可见),从机回复主机加密成功。

 参考文献:Bluetooth Core Specification v 5.0文章来源地址https://www.toymoban.com/news/detail-460854.html

到了这里,关于BLE协议--SMP(安全管理协议)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安全之安全(security²)博客目录导读

    研究方向:安全之安全 研究内容:ARMRISC-V安全架构、TF-A/TEE/Hafnium之安全、GP安全认证IDA逆向分析、静动态代码分析、低功耗等,欢迎您的关注 💖💖         1、ARM安全架构及其发展趋势(转载)         2、ARMv9及其关键特性介绍(转载)         3、ARMv9-A:如何利

    2024年02月13日
    浏览(48)
  • 安全生产管理平台——革新传统安全生产管理方式,重塑企业安全文化

    安全生产管理在现代企业中占据着至关重要的地位。传统的安全生产管理方式虽然在一定程度上能够保障企业的生产安全,但随着企业规模的不断扩大和生产环境的日益复杂,其局限性也愈发凸显。而安全生产管理平台的出现,正是为了解决这一问题。 平台功能与特点 安全

    2024年01月18日
    浏览(62)
  • 安全生产管理系统助力企业安全细化管理

    安全生产管理系统利用完整的安全生产管理体系,结合信息化、数字化和智能化等技术手段,将安全生产过程中的各个环节进行有效整合,使安全管理更加科学、规范和高效。 安全生产管理系统可以对企业安全生产进行全面、细致的管理。它能够实现对企业安全生产活动的全

    2024年02月06日
    浏览(58)
  • 安全运营之资产安全信息管理

    安全风险管理的三要素分别是资产、威胁和脆弱性,脆弱性的存在将会导致风险,而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象(资产)自身的脆弱性,使得威胁的发生成为可能,从而造成了不同的影响,形成了风险。“摸清家底,

    2024年02月15日
    浏览(51)
  • 信息安全管理(CISP)—— 信息安全保障

    写在最前面 一、信息安全保障知识框架 二、信息安全保障基础 1.信息安全的定义 2.信息安全问题 3.信息安全问题的根源与特征 4.信息安全属性 5.信息安全视角 6.信息安全发展阶段 7.威胁情报与态势感知 三、信息安全保障框架 1.PDR模型 2.PPDR模型 3.IATF模型 4.信息系统安全保障

    2024年02月08日
    浏览(41)
  • 网络安全——基线管理与安全配置

    一、基线管理概述 1、什么是安全基线 简单来说,就是安全的最低标准线,满足安全需求的最低要求  2、基线的相关名词  3、基线核查的对象 必须把所有资产统计出来,如果漏了的话,可能会成为一个薄弱点,被攻击 4、基线管理 基线配置不仅仅是一项工作任务,更是一项

    2024年02月11日
    浏览(56)
  • 二、安全与风险管理—风险管理

    目录 一、什么是风险及风险管理过程 二、威胁建模 三、主动攻击和被动攻击

    2024年02月03日
    浏览(51)
  • 安全狗云原生安全-云甲·云原生容器安全管理系统

    随着云计算的快速发展,容器技术逐渐成为主流。然而,随着容器的普及,安全问题也日益突出。为了解决这一问题,安全狗推出了云原生容器安全管理系统——云甲。 云甲是安全狗云原生安全的重要组成部分,它采用了先进的云原生技术,为容器提供了全面的安全保障。

    2024年02月04日
    浏览(48)
  • K8S应用流程安全(镜像安全 配置管理 访问安全)

    1.1.1 构建原则 学习目标 这一节,我们从 基础知识、原则解读、小结 三个方面来学习。 基础知识 k8s平台使用业务环境 需求 镜像的使用流程 Docker镜像加载 UnionFS 原则解读 构建样式 构建原则 实践原则 分层效果 功能效果 小结 1.1.2 Dockerfile实践 学习目标 这一节,我们从 基础

    2024年02月13日
    浏览(51)
  • 一文解读ISO26262安全标准:功能安全管理

    下文的表中,一些方法的推荐等级说明: “++”表示对于指定的ASIL等级,高度推荐该方法; “+” 表示对于指定的ASIL等级,推荐该方法; “o” 表示对于指定的ASIL等级,不推荐该方法。 功能安全管理分为几个阶段:概念阶段、产品开发阶段、生产发布之后的阶段。 在概念

    2024年04月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包