安全管理是BLE中最复杂的内容,涉及LL层、SM层、GAP层

一、妈妈的担心

1. 白名单:

妈妈说,你只能跟A、B、C这3个好孩子玩;他们打电话给你,你才可以出去玩。

A、B、C三人,就在妈妈的“白名单”里。

如果坏小孩D打电话时冒充是B,这怎么办?

妈妈有高招,记得B的声音。

妈妈心里想,这人的声音不是ABC任何一个,肯定是坏小孩。

这两者结合在一起就是:

是否使用白名单,就看你妈妈是否开明了。

类比于BLE,有下图:

可解析列表中会有一个IRK,IRK所对应的是设备的实体地址。
ABC同学会打电话给你的妈妈,妈妈根据声音解析出他们的名字。那么对于蓝牙设备,这些设备发出的无线信号中会含有一个可解析地址。

可解析地址的格式是这样的,它分为两部分:
1)随机数
2)hash值,可以通过ah(IRK,prand)计算出hash值。使用IRK来加密那个随机数。
hash和随机数结合起来就可以得到一个可解析地址。

可以这么理解:

1)设备发出的无线信号中会含有一个可解析地址(这是已知条件,此地址中会含有一个hash'值);

2)使用Resolving List中的每个IRK来加密地址中的随机数。这样的会得到一个hash值;

3)判断得到的hash值和hash'的值是否相同

如果相同,就表示在Resolving List中找到了对应的地址(这个地方,我理解就是发出的可解析地址与Resolving List中的某个地址相同)。然后再看一下该地址是否在白名单中,如果在白名单中,就认为该设备是可信任的设备。(这个过程相当于妈妈通过声音来识别ABC是一样的)。

引入可解析地址可以解决冒充的问题(就相当于同学E给妈妈打电话,说是你的好朋友,妈妈一听就知道有人在冒充),

引入白名单可以解决信任的问题(就相当于同学D给你妈妈打电话,你妈妈知道你有这么一个D同学,但是它老是旷课,是个坏同学,你妈妈不信任他)。

总结:

涉及这几个概念:白名单、可解析地址。

1. 设备中含有Device White List:表示它信任的设备。

白名单中保存的是地址信息Device Identity Address。

“坏设备”很容易伪造这个地址,改一下地址不就行了?

2. 为了解决这个问题,引入“Resolving List”:

2.1 本地设备含有一个“Resolving List”,就相当于妈妈记住的几个声音。

2.2 对端设备使用“可解析地址”

2.3 本地设备接收到“可解析地址”后:

跟Resolving List中每一项进行确认,确认能否使用其中的Peer IRK解析该地址。

如果可以,Resolving List中该项的“Peer Device Identity Address”就是对端设备的真实地址。

2.4 该“Peer Device Identity Address”被用来跟Device White List中每一项进行对比。

是否使用白名单,这取决于蓝牙的“Filter Policy”,过滤策略。

具体细节在下一节视频再讲。

引入可解析地址还有另一个目的:隐私问题

2. 隐私:

你带着一块有蓝牙功能的手表出门,这手表不断地发出广播信号。

如果坏人将一些设备布置于某个区域,你一经过该区域就自动跟踪。

这将会非常恐怖。

我们要防止他人根据你的设备认出你,并且使得他无法跟踪你。

这时就需要不断地变换蓝牙设备的地址,使得别人不知道你是新出现的设备,还是原来的设备。

这也涉及上面讲到的“可解析地址”:一个设备每过一段时间就变换一下地址,但是不能变得连亲人都不认识你,即这些变化的地址是“可解析”的。

二、特工的工作

实际上,数据的加密、解密并不复杂,复杂的是怎么把密钥安全地传递给对方。

加密的数据在空中传播,谁都可以接收到,有密码本的那人才能解出数据。

所以在BLE中,密钥怎么安全地传给对端设备,是关键点。

使用特工的工作做一下类比:

1. 我和谁接头?需要对一下暗号。等等,先确定一下对暗号的方式:用诗歌方式,还是用敲门的方式?

2. 对暗号

比如:

你说“天王盖地虎”,他说“宝塔镇河妖”。

或者:

有规律的敲门声。

3. 交换信物:

下一次接头还那么麻烦啊?

咱们可以交换一下信物,下一次就不用对暗号了。

我要记住他的声音,下次就认得他了:记录对端设备的IRK,用来解析地址。

我要记住他的签名,以后就知道哪些文件是他发出的:记录对端设备的CSRK,用来验证签名信息。

我要记住他的密码本,下次就可以直接加密:记录LTD、EDIV、RAND等

当然,不嫌麻烦的话也可以不交换信物,下次再重新对暗号。

4. 实际上对暗号之后,我们可以说悄悄话了。

隔墙有耳,我们用黑话来聊天吧:加密传输。

在BLE里,上述过程被称为配对:Paring,它被分为下面3个阶段(Phase):

翻译成中文就是:

1. 配对信息交换(Pairing Feature Exchange):

确定双方IO能力,

用什么方法对暗号

2. 认证:

有2类认证方式:LE Legacy Pairing、LE Secure Connections。

用白话来说就是对暗号,确定对方就是要找的人,最后生成STK或LTK。

3. 密钥分配(Transport Specific Key Distribution):

交换信物,交换信物之后的2个设备就被称为已经绑定了(Bonding)。

在BLE安全管理中,官方文档里列出了下述5种内容:

翻译成中文就是:

1. 配对:用来生成共享密钥

2. 绑定:保存配对过程中生成的密钥,下次重连时就不需要再次配对了。

3. 设备认证:确定对方就是要对话的设备,而非第3方。

4. 加密:消息加密

5. 消息完整性:传输的消息不要被篡改、不要发生错误

第17节-BLE安全管理概述的更多相关文章

  1. Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全

    原文:Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全 前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的 ...

  2. 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...

  3. 第03节-BLE协议各层数据格式概述

    本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运 ...

  4. 第13节-BLE协议L2CAP层

    学习资料:官方手册 Vol 3: Core System Package [Host volume] Part A: Logical Link Control and Adaptation Proto ...

  5. 第12节-BLE协议HCI层的数据格式

    学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Ho ...

  6. 第10节-BLE协议链路层(LL)

    本篇博客的学些要结合书籍<低功耗蓝牙开发权威指南,Robin Heydon著>第7章,实际上这书只是对蓝牙原版协议的简化.摘要. 回顾以前学过的<BLE协议各层的形象化理解>和 ...

  7. Java学习-第一阶段-第一节:Java概述

    JAVA概述 Java版本 原网址(https://www.oracle.com/java/technologies/java-se-support-roadmap.html) Oracle 将仅将某 ...

  8. SQL Server时间粒度系列----第1节时间粒度概述

    本文目录列表: 1.什么是时间粒度?2.SQL Server提供的时间粒度3.SQL Server时间粒度代码演示   4.SQL Server基准日期 5.总结语6.参考清单列表   什么是时间粒度 ...

  9. 第九十六节,JavaScript概述

    JavaScript概述 学习要点: 1.什么是JavaScript 2.JavaScript特点 3.JavaScript历史 4.JavaScript核心 5.开发工具集 JavaScript诞生 ...

随机推荐

  1. C++ class外的 << 重载,输出流,重载示例。不应该定义类内的<<重载

    #include <iostream> // overloading "operator << " outside class // << 应该 ...

  2. (day54)六、事务、分组、F、Q、常用字段、事务

    目录 一.聚合查询aggregate 二.分组查询annotate 三.F与Q查询 (一)F查询 1. 查询库存数大于卖出数的书籍 2. 将所有书的价格上涨100块 3.将所有书的名称后面全部加上 & ...

  3. URL、URI、URN之间的区别

    URL统一资源定位符 URI统一资源标识符 URN统一资源名称 URL是URI的一个特例. URI由URL和URN两部分组成. 在java类中,URI类不包含任何访问资源的方法,它唯一的作用就是解析. ...

  4. jQuery 源码分析(二) 入口模块

    jQuery返回的对象本质上是一个JavaScript对象,而入口模块则可以保存对应的节点的引用,然后供其它模块操作 我们创建jQuery对象时可以给jQuery传递各种不同的选择器,如下: fals ...

  5. HDU-1760 A New Tetris Game DFS

    曾经,Lele和他姐姐最喜欢,玩得最久的游戏就是俄罗斯方块(Tetris)了. 渐渐得,Lele发觉,玩这个游戏只需要手快而已,几乎不用经过大脑思考. 所以,Lele想出一个新的玩法. Lele和姐姐 ...

  6. 异步编程,await async入门

    网上很多异步编程的文章,提供一篇入门: 异步编程模型 .net支持3种异步编程模式: msdn:https://docs.microsoft.com/zh-cn/dotnet/standard/asy ...

  7. C#中使用WCF创建面向网络的服务程序

    如题. 这种东西基于微软的一整套东西,在.NET内使用特别方便.利弊自行衡量,是否使用自行决定. 步骤1.创建一组在网上发布的方法 新建项目,类型选择“WCF服务应用程序”  在项目里,你可以补充任意 ...

  8. WPF 开源框架项目介绍

    旧版本项目说明 旧版本由于是从学习WPF进行开发的, 历经时长有半年之余,基本上现学现用的那种, 所以存在很多缺陷, 由于整体的设计多处更新, 故旧版本将会终止维护(砍), 基于WCF的项目也会停止, ...

  9. 用maven对ssm进行整合

    网上有很多ssm整合的教程,这里给像我这样的初学的新手提供一个整合方法,同时也记录一下自己的学习进度. 同时推荐观看相关视频  https://www.bilibili.com/video/av536 ...

  10. Python游戏开发——打砖块

    打砖块游戏向来大家也不会很陌生,今天来用python来开发一下这个小游戏 1.引用对应数据库 import pygame from pygame.locals import * import sys, ...