[BLE--Link Layer]设备蓝牙地址
简述
不论什么网络设备而言,都会有自己独特的一个MAC地址,不然在设备量较大的情况下非常可能造成通信的混乱。蓝牙是无线通信中使用非常广泛的技术。当然其蓝牙地址也是相当的重要的了。
蓝牙地址简述
种类划分
- public地址
- random地址
蓝牙地址长度,48bit,即6个byte。
Public地址
该地址是固定的,厂商设定:
public addr和resolvable random addr和unresolvable random addr
Random地址
Random地址事实上又分为两种:
- Static地址
- Private地址
Static地址
这样的地址是在蓝牙设备上电初始化成功后,就不会再变化,而到关闭电源再重新启动,才会使用一个新的值。
Private地址
这样的是non resolvable的private地址,其值不能和public地址一样。对于这样的地址,假设都没有办法解析出,不知道须要这类地址有什么作用?以后知道了再来补充吧。只是认为可能是对Public地址的一个补充。
这样的是resolvable的private地址。prand部分是随机生成的24bit数值。hash部分使用例如以下的方式生成:
hash = ah(IRK, prand)
ah是SMP部分的随机地址生成函数,IRK是密钥(Identity Resolving Key),先随机生成prand部分,然后用这个算法生成hash,然后将hash和prand部分填入上图中相应bit区域,就形成了resolvable private address(RPA)了。
由于上面这样的地址是resolvable的,当然得有相应的地址解析的方法了,通过解密所获得对方的蓝牙地址,才干够进行某些通信,看来是BLE的新特性所提供安全性的一些手段了。
在拿到对方的resolvable private address(RPA)后。本地设备从RPA中取出prand部分,然后会依据上面hash的生成方式生成一个叫localhash的:
localHash = ah(IRK, prand)
然后将这个localHash和从RPA中取出的hash部分进行比較,假设同样,那么对方设备就被识别了。
感觉这里的识别作用就是确定应当用哪个IRK和对方设备交互。对于这样的random地址的方式,后面还得再看看。应当是比較新的特性。
[BLE--Link Layer]设备蓝牙地址的更多相关文章
- 详解BLE 空中包格式—兼BLE Link layer协议解析
BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...
- 蓝牙BLE LINK LAYER剖析(二) -- PDU
DATA FORMAT The Link Layer has only one packet format used for both advertising channel packets and ...
- 蓝牙BLE LINK LAYER剖析(一) -- status and channel
一.LINK LAYER STATES 二.PHYSICAL CHANNEL
- 【Android应用开发】Android 蓝牙低功耗 (BLE) ( 第一篇 . 概述 . 蓝牙低功耗文档 翻译)
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50515359 参考 : -- 官方文档 : https://develope ...
- c#程序如何从海康ipserver查询获取DVR设备ip地址
海康威视提供的ipserver可以记录DVR设备的IP地址,并提供一个7071的端口给客户端查询用,我们在c#程序中可以用海康SDK包中的NET_DVR_GetDVRIPByResolveSvr函数来 ...
- 获取设备mac地址和md5加密
SGMSettingConfig.h #import <Foundation/Foundation.h> @interface SGMSettingConfig : NSObject{ N ...
- Android获取蓝牙地址
最近做一个项目,发现Android6.0以上的版本获取的蓝牙地址始终为02:00:00:00, Google一下发现Android早就封掉了相关接口,于是想到反射的方式去获取Mac地址,在此记录一下 ...
- Android6.0以上版本获取本机蓝牙地址
Android6.0以上版本使用BluetoothAdapter.getDefaultAdapter().getAddress()是获取不到正确的蓝牙地址的,返回的值都是02:00:00:00:00: ...
- Android BLE设备蓝牙通信框架BluetoothKit
BluetoothKit是一款功能强大的Android蓝牙通信框架,支持低功耗蓝牙设备的连接通信.蓝牙广播扫描及Beacon解析. 关于该项目的详细文档请关注:https://github.com/d ...
随机推荐
- Gradle的奇妙之处
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50465885 Google I/O 2013大会上公布了AS,现在已经发展到2.0-b ...
- Spring整合TimerTask实现定时任务调度
一. 前言 近期在公司的项目中用到了定时任务, 本篇博文将会对TimerTask定时任务进行总结, 事实上TimerTask在实际项目中用的不多, 由于它不能在指定时间执行, 仅仅能让程序依照某一个频 ...
- EOJ 3213 向右看齐
题目描述 N 头奶牛被紧急动员起来了,它们排成了一条长列.从左向右看,排在第 i 个位置的奶牛身高为 Hi.约翰一声令下,所有奶牛向右看齐.假设每头奶牛只能看到比自己高的牛.请问它们各自看到的最近的一 ...
- 杂项:WCF
ylbtech-杂项:WCF Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了 ...
- kafka windows安装 命令行下使用测试
1.zookeeper安装: (https://zookeeper.apache.org/releases.html) ①进入zookeeper的相关设置所在的文件目录,例如本文的:D:\bigd ...
- BroadcastReceiver广播接受者简单使用
1.注册BrocadcastReceiver <receiver android:name=".FirstReceiver" > <!-- 指定能够接收的广播类型 ...
- java ScriptEngine 使用 (java运行脚本文件)
转自:http://www.tuicool.com/articles/imEbQbA Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScri ...
- 转载:【学习之家】Python中__init__.py文件的作用
Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...
- 博客移至 GitHub
新博客地址: github.com/FatliTalk/blog
- PHP-输入账号密码进入网页
1. 2. 3. 4.(itcast.html步骤)随便一个本地网页代替即可