蓝牙配对认证浅析
来源:互联网 发布:凯盈线上娱乐源码 编辑:程序博客网 时间:2024/04/29 08:38
1 何为配对?
是指两个蓝牙设备首次通讯时,相互确认的过程,两个蓝牙设备一经配对之后,随后的通讯就不必每次配对,只需要认证就可以了。
2 安全模式
蓝牙支持三种安全模式:
(1) 设备没有任何安全措施的“无安全操作”。
(2) 信道建立之前不需要启动安全协议的“业务级安全模式”。
(3) 终端在建立链路之前必须启动安全模式的“链路安全模式”,安全级别最高。目前蓝牙设备通常采用该安全模式。
3 配对和认证
蓝牙通信初始化过程需要三个步骤:
(1) 生成初级密钥 kinit。
(2) 生成链路密钥。
(3) 双方认证。
然后蓝牙设备会将链路密钥保存在非易失的存储介质中,以备以后每次连接时使用。在配对之前首先要将PIN码输入到蓝牙设备中,像某些设备(蓝牙耳机),PIN码是固定不变的。
注意,两边的PIN必须相同,否则配对会失败。
PIN(Personal Identification Number):个人识别码,蓝牙使用的PIN码长度为1-8个十进制位(8-128比特)。
现在简单解析一下蓝牙配对认证的过程
1、配对和认证
蓝牙通讯初始化过程需要三个步骤:生成初始密钥(Kinit)、生成链路密钥(Kab)和双方认证。接着,用加密密钥来保护往后的通讯。在配对之前,需要事先将PIN码输入到蓝牙设备中,在某些设备(像无线耳机),PIN是固定不可改变的。必须注意的是,两边的PIN必须匹配,否则不能通讯。下面我们将讨论配对和双方认证的细节。
生成初始密钥(Kinit)
初始密钥Kinit t长度为128位,由E22算法产生,图1描述了生成Kinit密钥的过程。首先提出通信要求的设备称为主设备(Master),用A表示;被动进行通信的设备称为从设备(Slave),用B表示。从图中可以看到,E22算法的输入(明文)由以下三部分组成:
1)从设备的物理地址:BD_ADDR,在生成Kinit前,主设备通过询问方式获得从设备的地址BD_ADDR。
2)PIN码及其长度,PIN码是双方设备预先设定的。
3)一个128位的随机数(IN_RAND)。由主设备产生,并以明文方式传送给从设备。
由于主、从设备使用了相同的E22算法,如果双方设备以上三部分的值都相等,那么各自算出来的Kinit也应该相同。
图1
.生成链路密钥Kab
见图2,首先主设备A产生128位的随机数LK_RANDA,从设备B也产生128位的随机数LK_RANDB。在主设备A中,Kinit与LK_RANDA进行位比特逻辑异或运算,异或结果发送给B设备;同样的,在B设备中,Kinit和LK_RANDB进行位比特逻辑异或运算,结果发送给A设备。通过这些交换后,A和B设备都具有相同的Kinit、LK_RANDA和LK_RANDB。按照图2,设备A和B分别用E21算法将LK_RANDA和BD_ADDRA、LK_RANDB和BD_ADDRB加密,并将结果进行异或得到Kab。
图2
如图2所示,master和slave会生成相同的链路密钥。
双向认证
双向认证采用challenge-response(挑战-应答)方式。如图3所示,主设备A为应答方,从设备B为请求方。做为应答方的A设备产生一个128位的随机数AU_RANDA,并以明文方式传送至B设备。A、B设备都用E1算法将各自得到的AU_RANDA、Kab和BD_ANDRB加密运算分别生成32位的SRESA和SRESB。B设备将结果SRESB传送给A设备,A设备比较SRESA和SRESB,如果相等,此次认证通过,否则认证不通过。执行完此次认证后,A设备和B设备的角色对换,即A设备做为请求方,B设备做为应答方,采用同样的方式进行认证。
图3
配对,认证发生在LMP层,在查询与呼叫建立后。
- 蓝牙配对认证浅析
- 蓝牙配对
- 蓝牙配对
- android 蓝牙配对
- android蓝牙自动配对
- Android蓝牙配对
- 蓝牙配对连接
- 蓝牙配对和连接
- 标准蓝牙配对方式
- Android 蓝牙自动配对
- 第九篇 蓝牙配对
- 蓝牙之二十一-蓝牙免弹窗配对
- 蓝牙自动输入配对码
- 蓝牙配对失误两则
- 蓝牙自动打开并配对
- 蓝牙讲解上--搜索、配对
- android 蓝牙自动配对问题
- Android 蓝牙 BLE蓝牙 浅析
- 安装XP和LINUX双系统
- 【系统安装】git
- jquery ajax调用webservice(C#)要注意的几个事项
- eclipse 集成tomcat 工程位置
- ios滚动视图(scrollView)
- 蓝牙配对认证浅析
- iPhone设置视图背景图片的方法
- Fragment自定义动画、动画监听以及兼容性包使用
- weblogic下的webservice调用问题
- servlet 用组件上传文件
- VC++、MFC中最好的开源项目
- 使用javamail发信过程中的一些问题及解决方法
- 解决win7 中source insight没有courier new字节的问题
- Android.mk