藍牙Legacy Pairing流程概述


Legacy pairing 從名字上看可以知道它是老式設備采用的配對方法。

配對的最終目的是為了生成key,key可以給鏈路加密,保證雙方設備通信的安全性。那配對流程的講述其實就是key的生成過程。

key的生成是經過各種各樣的算法,這里不會針對具體的算法講述,而是着重描述其流程,以及key生成過程中的邏輯推理。

Legacy pairing 的流程可以分為如下的幾個階段:

  1. 隨機數的生成
  2. key的選擇以及生成。
  3. key的驗證

下面先看一下 legacy pair 最終建立鏈路的流程圖:

上圖中對應pair的1,2,3階段標出如圖示。

首先大概描述一下 整個的流程:

  1. controller端會和對端的設備進行LMP feature exchange 的交互—>
  2. 交互之后確定配對算法legacy pairing(之前未配對過情況。如果host端有key,那么先走authentication流程,該流程若失敗繼續走legacy pairing)—>
  3. controller端向host請求pin code
  4. controller 獲得了pin code之后生成隨機數發送給對方。
  5. 對端也進行pin code 的請求,並生成相應的隨機數發送給對方。(這里描述的是可以配對的情況,不可配對場景后面會描述)
  6. 雙方發送 key給對方,並生成最終的link key
  7. 進行authentication的操作
  8. 通知各自的host :link key 已經生成。

 

下面詳細描述一下 Legacy pairing 的流程的各個階段所做的具體的事情。

首先看看隨機數的生成:

這里涉及到一個問題:什么樣的雙方是可以配對的?

主要有如下的幾種場景:

1.responder 有一個可變的pin,這種情況可以配對,其隨機數交互的流程如下:

上面的 legacy pair 最終建立鏈路的流程圖就是屬於這種情況,當initiator發送random給responder的時候,responder回復LMP accepted

 2.responder 有一個固定的pin,這種情況也可以配對,其隨機數交互的流程如下:

 在這種情況下,雙方使用的隨機是responder 發送過來的隨機數。

 

3.雙方有一個固定的pin ,那這種情況雙方是無法配對的。其交互流程如下:

上面講的這個隨機數是干嘛的呢?

它是雙方設備計算Kinit 用的,這個Kinit 最后又會被用來計算link key。下面先看看這個Kinit的計算:如下圖:

使用的算法是E2  其中 L‘ = pin 的長度 ,這里的RAND就是上面交互的隨機數,pin的話 老式機器一般都是4個0,那么從上圖可以推出雙方的Kinit應該是一樣。

 

接下里看第二階段:key的選擇以及生成。

關於key的選擇,這里存在兩種key:unit key和comb key ,那么兩種key 對應於什么樣的應用場景呢?

1.如果其中有一方使用unit key,那么雙方就使用unit key作為link key。

2,如果雙方都給對方發送unit key,那么使用master的unit key作為link key。

3.如果雙方都發送LMP_comb_key,那么雙方就使用他們兩者的key經過計算得到的key。

 

關於最終key的使用,其互相交互的流程如下:

 

接下來先看一下 key生成的大局流程圖:

 

 由於前面的分析,現在看到這個圖應該也不難理解的,可以發現之前的隨機數是用來計算Kinit,Kinit又會被用來計算link key。

那下面就來分析一下,Kinit是 如何經過計算出link key。

首先來看看 unit key 是如何計算出來的

 key的計算如下所示:

 上面生成K之后,用下圖的算法和對方交換key

關於上圖中的藍牙地址也是雙方根據pin code預先設定好的,下面的圖是key的交換的過程。

 

下面再看看 combination key 的生成

 

 

這里需要解釋 是K,當處於未配對狀態,這個K = Kinit,其余的流程 上圖已經明顯,最后可以知道KAB = KBA

到這里key的生成已經完成。

 

最后是一步key的驗證:

關於key的驗證,其套路還是不變的。主要就是通過交換隨機值以及通過隨機值和link key以及其他共享信息計算出來的值 ,來互相驗證。

其流程如下圖:

這里需要注意的就是,上圖只是展示單方面的驗證,驗證過程是雙向的。

另外注意的是這里的隨機不是上面的隨機值了,可以發現其名字不一樣了,這個隨機值是在authentication 的過程中重新生成的。

相關的air log如下:

從上面的log 可以看出 其驗證是雙向的.

到此關於key的驗證就結束了.

一般情況還會有一個encryption的流程,其實這個流程是不屬於配對流程的,並且在ssp 流程中已經有描述,這里不再描述.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM