设为首页收藏本站

技术子

 找回密码
 速度加入

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: 活动 交友 discuz
查看: 4644|回复: 7

ble4.0协议之 3.6节 安全管理( Security Manager (SM)) 1

[复制链接]

61

主题

106

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13794
发表于 2016-6-21 13:34:31 | 显示全部楼层 |阅读模式
鉴于有些群友和论坛会员想了解低功耗蓝牙的安全管理协议这方面的东西,所以我先将3.6节先发布出来。安全管理分为如下章节,会慢慢的在论坛中 展现,以及会在微信订阅号“FutureTek-2014”中慢慢呈现,
敬请期待和关注。
QQ截图20160621132449.png

3.6 、 安全管理( Security Manager (SM))
我的体会是安全管理是整个协议中最难处理理解和处理的事情,
它的复杂程度有“这么”深,知道了吧!为了讲明白我也不知道该如
何是好啊!分这么几点讲吧!
 为什么加密:为什么呢?安全啊!谁都不想光屁股在外面跑吧!
 加密干了什么,需求什么?
 加密相关计算公式
 加密配对绑定过程(密钥计算)
 安全管理传输协议
 NRF51822 加密硬件模块介绍
 NRF51822 和 IPhone4s 的空中数据分析
3.6.1 、加密做了什么和加密需求
    在连接时,可通过加密来确保数据的机密性。机密性是指第三方
“攻击者”由于没有加密链路的共享秘密,因此无法拦截、破译或读
取消息原始内容。 注意:数据包的报头和长度字段不会被加密的,这
句在 4.0  的规范中找了好久。原文如下:

User information can be protected by encryption of the packet payload; the access
code and the packet header shall never be encrypted.

    这有个好处是,当接收到包时可以直接分析报头判断 SN 和 和 NESN  标志。
    加密数据包含一个消息完整性校验值, 表明该数据包已经过认证。

为了验明发送方的有效身份, 认证使用共享密钥为已加密的数据计算
签名,可防止第三方篡改数据包中的任何内容。通过认证,消息的接
收方能够确信收到的数据包来自一个可信设备。
    加密数据包含一个数据包计数器,用来防止重放攻击。重放攻击
是指攻击者截取一个消息,随后再次发送该消息以期望收到响应。
    简单来说, 1、 加密了整个发送到空中的数据, 防止窃取到原文;
2、发送到空中的包中包含有 32 位的消息完整性校验(MIC)值,这个
值能进行整个包的数据错位校验,CRC 只能检查有限的位,但是 MIC
可确保数据的正确性,在 3.6.3.3.4 节中可以知道,MIC 其实就是签名
认证;3、加密数据包中的包计数器确保数据不是由第三方伪造。
    那么要完成加密需要哪些东西呢?首先需要一个密码块, 也就是
密码本,接收到的密文,通过密码本一一翻译,变为明文,在 BLE 中
的密码块,实际上是个单向函数,用于产生秘钥、加密和提供完整性
检查。这种加密引擎被称为先进加密系统(AES)。低功耗蓝牙使用 AES
的 128 位版本,也就是明文、秘钥和密文都是 128 位的。它的表达式
用式(3-1)表示:
密文=E key (明文) 或 密文=E(key,明文) (3-1)
    上式是加密的发动机, 其中的密钥就是汽油了, 在 BLE4.0 的协议
中使用到大量的密钥, 而 加密 认证的整个过程几乎都是围绕怎么将两
个设备使用到的秘钥能够安全的共享, 也就是当一方把密码告诉另一
方时,始终要提防第三方也可能听得到这个密钥,一旦公共的密钥被
第三方窃取了,那么又变成光屁股在路上跑了。所以对于加密来说,

并不是加密数据有多难, 而是把需要共享的密钥安全的送到正确的设
备才是难点,这就引入了配对的复杂过程。
    在 BLE 的 4.0 中主要有 5 个密钥需要共享,这些密钥传输时一次
比一次安全,有些密钥共享时并不是赤裸裸的直接传输特定密钥,而
是传输计算相应密钥时使用到的参数。这 5 个密钥如下:
 临时密钥(Temporary Key:TK)
 短期密钥(Short Term Key:STK)
 长期秘钥(Long-Term Key:    LTK)
 身份解析秘钥(Identity Resolving Key:IRK)
 连接签名解析秘钥(Connection Signature Resolving Key:CSRK)
3.6.2加密相关计算公式
在 4.0 的安全管理中设计到几个加密相关的计算,但是最终还是
会归到式(3-1)中的安全函数 e 中。涉及的公式如下(应用在密钥计算
章节):
 ah 函数:这个函数是用来计算可解析地址中的哈希值(hash)的。
       表达式为式(3-2)
         ah(k, r) = e(k, r’) mod 2 24 (3-2)
        其中 k =128 bits 、r = 24 bits。而 r’是将 r 高位补 0 达到 128bits。
         表达式是 r’ = padding || r,padding 就是 104bits 的 0, “||”为连
         接的意思。mod 2 24 目的是保留计算结果的低 24 位。
 c1 函数:这是计算确认值的函数,表达式为式(3-3)。

     c1 (k, r, preq, pres, iat, rat, ia, ra) = e(k, e(k, r XOR p1) XOR p2) (3-3)
    其中
    p1 = pres || preq || rat’ || iat’
    p2 = padding || ia || ra
    k = 128 bits: key 密钥
    r =128 bits: rand 随机数
    pres = 56 bits : pairing response command 配对应答命令
    preq= 56 bits : pairing request command 配对请求命令
    iat= 1 bit :initiating device address type 发起者设备地址类型
    ia = 48 bits :initiating device address 发起者设备地址
    rat =1 bit:responding device address type 响应者设备地址类型
    ra = 48 bits :responding device address 响应者设备地址
    padding = 32 bits or 0:补 0 用的掩码

 s1 函数:计算短期密钥 STK 用,表达式为式(3-4)。
     s1(k, r1, r2) = e(k, r’) (3-4)
     其中
      K= 128 bits
      r1 =128 bits:这是蓝牙设备发送 128bits 的随机数
      r2 = 128 bits:这是蓝牙设备发送 128bits 的随机数
      r’ = r1’ || r2’,而 r1’ 和 r2’是截取 r1 和 r2 的低 64bits
 dm 函数:这个函数是计算长期秘钥 LTK 中的某个参数时用到,
    表达式为式(3-5)。

      dm(k, r) = e(k, r’) mod 216 (3-5)
     其中
     k = 128 bits r= 64 bits
     padding = 64 bits r’ = padding || r

 d1 函数:这个函数用来计算 LTK、IRK、CSRK 和 DHK 等等密钥,
        表达式为式(3-6)。
        d1(k, d, r) = e(k, d’) (3-6)
        其中
         k =128 bits d = 16 bits
         r = 16 bits padding = 96 bits
         d’ = padding || r || d


3.6.3 、加密配对 绑定 过程
这里先解释一下,什么是配对和绑定,配对是找到并确定需要和
自己通信的设备,也就是身份确定,接着是将安全密钥共享,而这一
过程仅仅是由启动加密到得到短期秘钥(STK)为止(图3-66中的Phase1
和 Phase2);而绑定就是将长期秘钥(LTK)、身份解析秘钥(IRK)和连接
签名解析秘钥(CSRK)这 3 个密钥中的某个或者组合进行交换(图 3-66
中的 Phase3)后,将交换的这些密钥存储到数据库中的过程。
这里先讲明白一个事情:
       配对绑定 (图 图 3-66  中的 Phase1 、Phase2 和 和 Phase3) 只有在两个
设备之间第一次进行配对时才会发生, 也就是说配对 绑定 过程只会发生在
两个设备之间第一次连 接, 那么第二次和之后的连接呢?因为有
在第一次配对 绑定 过程中有“绑定”过程,也就是 说已经将第一次的
密钥进行了存储, 如果这个存储的数据库没有人为的清空, 那么之后
的连接就不会再出现配对过程。 同时还有一个问题 是: :  并不是所有的
通信都需要加密进行数据保护, 有时应用发送的数据不怕被别人听到,
所以光着屁股跑也 是 没有关系。

     配对绑定是一个三阶段的过程, 如图 3-66。 前两个阶段总是使用,
第三阶段是一个可选的传输特定密钥分配的阶段, 而这一个阶段的有
无是由第一阶段决定,也就是没有第三阶段,相当于没有需要存储的
密钥也就没有“绑定”过程。
    阶段 1:配对特征交换得到临时密钥(TK)值
    阶段 2:身份确认以及短期密钥(STK)生产
    阶段 3:传输特定密钥


QQ截图20160621132138.png     这三个阶段都有关系,第 1 阶段决定了临时密钥(TK)的生产方式,
同时也就是决定了第 2 阶段短期秘钥(STK)的生成,还决定着第 3 阶段
是否存在;而第 2 阶段从英文“Pairing over SMP”理解就是通过安全
管理协议进行配对,而实际上第二阶段过程的目的就是确定自己正在
和一个真正想要通信的设备通信,而非第三方,简而言之就是确定对
方身份。 而阶段 3 实际上属于绑定的过程,因为要存储到安全数据库
中的数据都是第 3 阶段发送的, 这个阶段传输的数据通过第 2 阶段生
成的密钥进行加密,确保共享的密钥受到保护。

QQ截图20160621132328.png


欢迎关注 一个 专为 低功耗蓝牙写笔记的论坛 bbs.codertown.cn

欢迎加入蓝牙BLE4.0协议研究 177341833 一起学习和讨论​​​

欢迎关注微信公众号 专门讲解 低功耗蓝牙4.0 协议​


0.jpg



本帖被以下淘专辑推荐:

回复

使用道具 举报

0

主题

13

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2016-6-29 21:01:45 | 显示全部楼层
请教个问题,配对的三种方式下TK的长度一样吗   为多少呢   
回复 支持 反对

使用道具 举报

0

主题

13

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2016-6-30 08:38:35 | 显示全部楼层
计算STK中,使用到的KEY是怎么得到的呢   请指教   谢谢
回复 支持 反对

使用道具 举报

1

主题

10

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2016-7-2 00:15:40 | 显示全部楼层
dear,hash函数的 2 24写成 2^24,更直观
有个问题。配对的时候,SK是由LTK生成的吗?你的图时序上SK在LTK之后?
以下是我的一点总结:

蓝牙的安全模式的配对:
        1.1从机发从安全请求,        从机可以设置发送不发送安全请求?
        1.2主机发出配对请求。从机再发出配对响应,为什么这样做。因为要了解双方支持的安全模式.来确定产生不同的临时密匙
                just work:TK为0
                oob Data: TK为128bit随机数
                Passkey Entry:TK 输入               
        2.产生密匙(配对):
                2.1:交换主从机确认值.M S Confirm
                2.2:交换主从机随机值.M S Rand
                2.3.交换通过“e1” 函数计算的STK
        3.生成各种不同的K,(也需要主从的确认?)
回复 支持 反对

使用道具 举报

61

主题

106

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13794
 楼主| 发表于 2016-7-2 18:25:10 | 显示全部楼层
随风摆舵 发表于 2016-7-2 00:15
dear,hash函数的 2 24写成 2^24,更直观
有个问题。配对的时候,SK是由LTK生成的吗?你的图时序上SK在LTK ...

SK 是LTK生产的,,,但是第一次配对是 不用LTK技术SK的,而是用的STK代替的LTK,只有在后期断开连接再次配对时 才使用交换的LTK计算SK。
回复 支持 反对

使用道具 举报

0

主题

25

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2016-7-5 14:15:54 | 显示全部楼层
bbs.codertown.cn
回复 支持 反对

使用道具 举报

0

主题

13

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2016-8-8 12:47:24 | 显示全部楼层
如影随行 发表于 2016-6-29 21:01
请教个问题,配对的三种方式下TK的长度一样吗   为多少呢

BLE采用的是AES-CCM模式的128bit密钥长度    因此密钥/铭文/密文、都为128bit
回复 支持 反对

使用道具 举报

0

主题

12

帖子

42

积分

新手上路

Rank: 1

积分
42
发表于 2019-12-13 20:08:41 | 显示全部楼层
文章写得不错,开奖网 我们这也有些好用北京pk10 的资料,重庆欢乐生肖 可以多参考下!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 速度加入

本版积分规则

Archiver|手机版|小黑屋|技术子 ( 粤ICP备14028582号  

GMT+8, 2020-10-23 01:53 , Processed in 0.110678 second(s), 34 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表