BR/EDR中使用的安全机制经过了三个阶段的规范的多个版本的发展,分别是:Legacy,Secure Simple Pairing和Secure Connections。encryption, authentication 和key generation安全算法和这三个阶段的关系如下:
Legacy
当两台设备没有common link key时,当使用Legacy Pairing或Secure Simple Pairing时应当生成Kinit。Kinit基于PIN, random number和BD_ADDR生成,使用的E22算法计算。
当Kinit在两个设备间计算完成时则应该创建Link Key。这个Link Key将用于两台设备之间的Authentication。Link Key使用E21算法计算。
Authentication
使用E1算法进行认证,需要用到随机数AU_RAND,蓝牙地址,之前生成的link key。生成了SRES和ACO(后面加密会用到),双方设备均可以发起认证请求(mutual authentication)。认证生成的ACO用于生成Encryption key。
ENCRYPTION (E0)
当执行至少了一次Authentication则可以使用Encryption。Encrption分为两种:E0 Encryption和AES-CCM Encryption。(当双方均支持Secure Connections时则应当使用AES-CCM Encryption。
为了让master对所有slave使用相同的加密参数在使用E0 Encryption的piconet中,它将发出一个Temporary key-Kmaster。(相对的一般的是key是Semi-permanent link key,要改变成Temporary link key则必须要支持encrypted broadcast)
Secure Simple Pairing
IO capability exchange
Phase1:Public key exchange
初始化时,每个设备拥有自己的ECDH(Elliptic Curve Diffie-Hellman)私钥-公钥对(计算出来的),即SKa-Pka。双方设备交换Pka,然后根据是Legacy还是Secure Connections来决定是用P-192还是P256。
Phase2:Authentication Stage1
该阶段,有三种不同的协议分别是:Numeric Comparison, Outof-Band, and Passkey Entry。Just Work属于Numeric Comparison的一种。这里只以Numeric Comparison为例进行说明。
Numeric Comparison
用于防护MITM,中间人攻击(后续补充)。有图可知,设备B使用f1算法计算出commitment发送给设备B,设备A将自己的随机数Na发送给设备B。设备B收到后回复ACCEPT并且将自己的随机数Nb发送给设备A,设备利用该随机数计算commitmment并且和收到的commitment做比较,如果相同则回复ACCEPT给设备B。之后双方使用g算法计算numeric verification,一般是6位数字。双发设备通过显示或其他方式通知用户确认,双方均确认后进行下一步动作,否则终止当前连接。
Phase 3:Authentication Stage 2
该阶段用于确认之前的交互完成,使用f3算法计算confirmation value确认信息,使用前面计算出来的DHKey,生成的Na/Nb,ra/rb,交互的IOcap,以及蓝牙地址。
Phase 4:Link Key Calculation
当设备都确认了配对,则开始使用f2算法计算link key。
Phase 5:Authentication and Encryption
同Leagcy Authentication和Leagcy Encryption
Secure Connections
Authentication
使用h4算法计算出Device Authentication Key。双方设备各自生成AU_RAND,用master和slave区分,最后使用h5算法计算得到SRES,以及ACO。
发起者可以是master也可以是slave。secure Authentication总是mutual authentication。