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介绍

![](https://img-
blog.csdnimg.cn/img_convert/91559198255c919d3ae45f7e3d4a31f0.gif)

它的主要目的是为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)生成
  • 第三阶段: 传输特定秘钥分配

阶段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的能力可以归纳为如下的五种:

![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTM2NjcxMy8yMDIwMDQvMTM2NjcxMy0yMDIwMDQyOTExMjY0NTE1NS0xMDc2OTA2MDYwLnBuZw?x-oss-
process=image/format,png)

3.1.4 Authentication 方法的选择

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

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

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

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

2.2 LE legacy pairing

![](https://img-
blog.csdnimg.cn/img_convert/ca9950f88920f2f2577e90973764ded2.gif)

2.2.1 配对请求的报文格式

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

1. Code (1 octet)

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绑定信息的请求安全属性


BF, “Bonding_Flags”

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

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
该字段表明秘钥初始化设备请求响应设备来分配秘钥分配使用。

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生成。

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和值都由主从设备分发。要分发的密钥由配对请求和配对响应的密钥分发参数决定,配对请求和配对响应来自第一阶段配对特征交换

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

如果是 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协议规定, 加密连接只能由master发起,不能由slave发起
slave可以发出加密请求,master收到slave的加密请求后,可以发起加密连接,也可以拒绝其请求。
如下为master同意slave的加密请求流程:

总结

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

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

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

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

参考文献:Bluetooth Core Specification v 5.0

学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

第三种就是去找培训。

image.png

接下来,我会教你零基础入门快速入门上手网络安全。

网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。

第一阶段:基础准备 4周~6周

这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
image.png

第二阶段:web渗透

学习基础 时间:1周 ~ 2周:

① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
image.png

配置渗透环境 时间:3周 ~ 4周:

① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。

渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
image.png
以上就是入门阶段

第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
image.png

给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值