背景
前面文章介绍了经典蓝牙扫描和连接过程,这篇文章我们以手机和耳机为例,也结合ellisys空口包来分析经典蓝牙配对的过程:
-
LMP feature exchange and LMP connection setup
注意红色框框里面支持Simple secure pairing和 Secure connection(蓝牙4.2引入的新的鉴权加密方式,采用的是非对称加密方式) -
IO capbility exchange:
红色框是手机的IO能力:有显示,没有OOB,要求MIMT(中间人攻击)保护。
绿色框是耳机的IO能力:无显示,没有OOB,可以MIMT。 -
Public key exchange:
由于采用非对称加密方式,交换手机和耳机的公钥,由于secure connection采取非对称加密方式,公钥和私钥是分开的,公钥会作为明文发送给对方,可以参照core spec:
看看手机和耳机的空口交互如下图:
-
红色框是手机的公钥:总共256个字节,一个包64个字节,4个包发送,假设此公钥为PKa。
-
绿色框是耳机的公钥:也是256个字节,分4个包发送,假设此公钥为PKb。
-
于此同时手机和耳机会计算各自的DHKey,手机的计算公式:DHKey = P256(SKa, PKb),耳机的计算公式DHKey = P256(SKb,PKa),正常情况下二者算出来的DHKey应该是相等的。
- Numeric comparison:
先看一下core spec关于数字比较的流程的描述:
再看一下手机和耳机的空口数据交互如下:
-
红色框表示耳机发给手机一个随机数Confirm,这个值是由耳机的的随机数,以及耳机和手机的公钥通过某种运算方式得来,假设为Cb=f1(PKbx,PKax,Nb,0)。
-
黄色框表示手机发送一个随机数给耳机,耳机接受,此值为Na。
-
绿色框表示耳机把随机数Nb发给手机,手机拿到这个随机数,然后计算一个Confirm值,如果这个值也等于Cb,那就回复LMP Accept.
-
接下来手机和耳机会各自计算Va=g(PKax,PKbx,Na,Nb) 和Vb=g(PKax,PKbx,Na,Nb),也就是六位数字,如果确认他们相对,配对就OK,否则终止配对。
- DHkey Check
DHKey是在交换完公钥就算出来的,双方拿对方的公钥和自己的私钥通过运算得到,DHKey 校验,先看下core spec是如何描述:
接下来看下手机和耳机的空口交换:
红色框表示手机通过DHKey和随机数通过运算得到一个Confirm值发给耳机,耳机经过验证通过,回复LMP Accepted.同理绿色框耳机发给Confrim值给手机,手机来验证。 - Key distribution
先看下core spec的描述:
这个阶段手机和耳机会利用前面产生的LTK去加密数据,接下来的空口交换都是加密 进行的:
手机蓝牙芯片和耳机蓝牙芯片分别算出link key通过HCI_Link_Key_Notification发送给Host。