第一部分:HCI协议(八)具体的HCI command和event(16、AUTHENTICATION AND ENCRYPTION 三)

(二)认证Authentication

1、蓝牙支持两种认证程序(authentication procedure):

传统认证(legacy authentication)和安全认证(secure authentication)

传统认证(legacy authentication):两个设备不都支持Secure Connections (Controller Support)和Secure Connections (Host Support) features,并且本地设备支持legacy authentication时使用;

安全认证(secure authentication):两个设备都支持Secure Connections (Controller Support)和Secure Connections (Host Support) features时使用

2、传统认证分析

解释:传统认证就是验证者发送一个包含随机数的LMP_au_rand PDU给被验证者,被认证者使用这个随机数、自己的BD_ADDR和link key(两个设备共享的)进行计算,然后将结果回复给验证者,验证者检测这个结果是否符合要求

具体的实现如下图所示:

验证者(Verifier)发送一个随机数RAND给被验证者(Claimant),被验证者使用E1算法,将key(link key),IDB(被验证者的地址)和RAND进行计算得到SRES,然后将这个值回复给验证者,验证者自身也会使E1算法,将key(link key),IDB(被验证者的地址)和RAND进行计算得到SRES’,然后检测SRES是否等于SRES’,等于则认证成功,否则失败

注意:link key是通过配对得到的。

更详细的图示:

3、安全认证分析

解释:安全认证时,A和B两个设备都是验证者也都是被验证者,A发送给B一个随机数AU_RANDm、B发送给A一个随机数AU_RANDs,A设备通过h4算法将link key、字符串”btdk”、A设备地址BD_ADDRm、B设备地址BD_ADDRs进行计算,算出一个Authentication Key,然后再使用h5算法,将Authentication Key、AU_RANDm、AU_RANDs进行计算,算出SRESm和SRESs,同样设备B也会通过上面的方法算出SRESm和SRESs,然后两个设备互相进行验证(A把SRESm发送给B,B把SRESs发送A)

如下图所示:

更详细的图示:

注意:link key是通过配对得到的。

4、认证失败错误提示:

如果传统认证和安全认证失败,则错误提示Authentication Failure(0x5);

如果没有被验证者没有link key,则错误提示PIN or Key Missing (0x06);

5、两个设备都有link key的认证如下图所示:

安全认证

普通认证

(三)加密Encryption

1、有两种加密方式:E0 encryption (即传统加密方式)和AES-CCM encryption

E0 encryption (即传统加密方式):两个设备不都支持Secure Connections (Controller Support)和Secure Connections (Host Support) features,并且encryption是enabled时使用;

AES-CCM encryption:两个设备都支持Secure Connections (Controller Support)和Secure Connections (Host Support) features时使用,并且encryption是enabled时使用;

2、有五种key分别是:

combination key KAB

unit key KA

initialization key Kinit

temporary key Kmaster

encryption key Kc

Kinit、KA、KAB都是普通配对过程中产生的,KA和KAB是两种不同类型的link key,Kinit是用来产生KA和KAB的;

Kmaster只能用于当前session中,是用来暂时代替link key的,当master想要同时对超过2个slave使用相同的encryption key的时候,Kmaster就会被使用,广播的时候用可不用关注。

Kc是加密过程中使用的,Kc是通过E3算法将link key、96-bit COF和128-bit random number处理后产生的(COF根据link key的不同产生方法也不同,link key是Kmaster则通过master 的BD_ADDR产生,如果不是,则COF就等于认证过程中产生的ACO—上面认证过程的图中有产生)

3、加密过程:

A、首先master和slave要确定是否可以加密,使用LMP_encryption_mode_req

B、确定加密key的size,使用LMP_encryption_key_size_req

C、开始加密,使用LMP_start_encryption_req

D、结束加密,使用LMP_stop_encryption_req

注意:加密中可能会有暂停加密和恢复加密,具体参考协议

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值