藍牙4.0 BLE傳統配對綁定過程

1.關鍵詞

簡寫

說明

作用

TK

臨時密鑰

128bit,用來計算短期密鑰STK

STK

短期密鑰

128bit,用來計算長期密鑰LTK

SK

會話密鑰

128bit,通過LTK計算所得,作爲第3階段三次加密握手密鑰;

該值的計算鏈路加密過程,SK=e(LTK, (SKDmaster || SKDslave));

鏈路加密過程是以STK爲密鑰,分散因子SKD初始向量IV進行加密

LTK

長期密鑰

已配對綁定過的兩個設備再次連接時,作爲鏈路密鑰;

綁定過程中LTK,EDIV和RAND三個值由從機發送給主機,

EDIV和RAND用來產生LTK,RAND爲隨機數

綁定成功後主機會保存LTK,EDIV和RAND三個值;

從機使用EDIV、RAND和自身保存的ER、IR兩個種子數據計算得到LTK;

Mconfirm

主機身份確認值

第二階段身份確認,通過TK和128bit隨機數計算所得

Sconfirm

從機身份確認值

同上

ERIR

128位僞隨機數

從機flash中保存的種子數據,有廠家寫入,用於產生LTK

EDIV

加密分散器

用於產生LTK

2.配對過程

藍牙配對過程分爲三個階段,第1階段用來交換配對特徵交併得到臨時密鑰TK。第2階段中會進行身份確認以及產生短期密鑰STK。第3階段是設備綁定的過程,這期間會傳輸加密鏈路中使用到的LTK、IRK 以及 CSRK 等密鑰,此階段傳輸的數據是通過第一、二階段的短期密鑰進行加密傳輸的。配對過程圖如下:

2.1第1階段

2.1.1特徵交換

    配對特徵交換的是輸入輸出(IO)功能、認證需求(需不需要綁定以及防止MITM )、密鑰大小(固定爲128bit)。

    在BLE4.0協議中根據保護程度,協議中將安全分爲3種特性:

  • Authenticated MITM protection: 可靠中間人保護
  • Unauthenticated no MITM protection: 不可靠無中間人保護
  • No security requirements: 無安全需求

    這裏的中間人MITM的意思是第三方的藍牙設備。可靠中間人保護就是在 TK 共享是不會有第三方設備知道共享的TK 密鑰;不可靠無中間人保護就是說 TK 共享時第三方設備很容易知道共享的 TK 值,所以是不可靠的傳輸;而無保護是不怕被別人盜取數據。

    輸入輸出能力:輸入和輸出的組合決定採用什麼方式生成TK。

          

2.1.2臨時密鑰

    配對特徵交換時, 各自將自己的綜合能力發送給對方設備,最後根據兩個設備的能力最終選擇那種方式實現 TK 值的共享。在BLE4.0協議規範中其實是有三種方式決定TK值:

  • Just Work(只工作):兩設備使用的是默認的TK值(6 個 0)。對於這種方式是一個不可靠的加密鏈路,它不能防止MITM攻擊。這種方式使用時可靠的前提是,確保在配對綁定是能保證沒有 MITM 攻擊,那麼在之後的連接中加密的數據是無法被其它設備竊聽的,也就是說這種方式能保護將來加密鏈路安全,但是不能保護配對綁定過程。
  • Passkey Entry(輸入密碼):對於輸入密鑰來說: 兩個設備中 ,一 個藍牙設備在自己的顯示屏上顯示隨機6位數;而操作人員看到這6位數後,將這6位數在另一個藍牙設備中輸入,從而實現兩個設備的TK值一樣。
  • Out of Band(帶外):帶外是使用另一無線方式將數據傳給藍牙設備,如果帶外本身能防止MITM的攻擊,那麼傳送的TK值肯定是受保護的。而且這種方式下的TK值是128bit的隨機數,雖然還是有概率被第三方猜中,但是猜中128bit隨機數的概率遠比輸入密碼時的6bit的隨機數要小。

2.2第2階段

    配對的第1階段通過特徵交換僅僅得到TK值,而TK值是用來做在第2階段用來作爲密鑰進行計算兩個重要的值:身份確認值(confirm)和短期祕鑰(STK)值。

2.2.1身份確認值

    得到了TK值,是爲了保證和自己通信的設備是自己需要連接的設備,必須通過某些計算來確定對方的身份。 兩個設備都需要計算確認值,從而確定對方是所需要的連接的設備。所以分爲主機確認值 / 發起者確認值 (Mconfirm) 計算和從機確 認值/響應者確認值(Sconfirm)計算

2.2.2短期密鑰

    STK存在的目的在於配對綁定過程的第3階段不再使用明文進行數據傳輸,而是使用STK作爲長期祕鑰LTK將需要交互的數據進行加密,第3階段傳輸是在未來加密鏈路中使用到的LTK、IRK 以及 CSRK 等等密鑰。然而 STK 或者 LTK 並不能直接作爲將來要發送的數據包進行加密的密鑰,爲了傳輸的數據包更加的安全,加密數據包的密鑰是會話密鑰Session Key(SK),SK是用STK 或者 LTK 當做密鑰計算得到的。當兩個設備第一次進行配對綁定時,在第3階段就需要進行加密鏈路傳輸數據,而此時長期密鑰LTK是沒有共享的,所以需要通過第 2 階段計算得到的STK作爲來計算會話密鑰SK。

2.2.3第2階段整體流程

    第2階段中,主從機首先會計算各自的身份確認值,首先主機發送確認值給從機,從機也發送確認值給主機,之後主機發送隨機數給從機,當從機接到隨機數後,開始計算確認值,當計數的確認值和主機發過來的確認值一樣,則從機也發送隨機數給主機,否則就不發送隨機數給主機,因爲有可能受到攻擊。 如果主從都交換了計算確認值的隨機數後,各自會計算出短期密鑰STK=s1(TK, Srand, Mrand)。

    計算出STK值後,雙方交換分散因子SKD和初始向量VI。主機通過鏈路層使用 LL_ENC_REQ 發起加密請求,並將用來計算會話密鑰SK的參數會話密鑰分散值 SKDm發送給從機,以及CCM使用的初始化向量 IVm 值、計算 LTK 的 EDIV 和 RAND 參數都發送給從機。IV和SKD都爲僞隨機數。從機通過 LL_ENC_RSP 加密應答把計算 SK 相關的參數也發送給主機,這時主從之間通過 LL_START_ENC進行3次加密握手。第1次,從機通過明文的方式將 LL_START_ENC_REQ 開始加密請求發送給主機,並將自己接收數據包方式設置爲加密接收;第 2 次,當主機接收到從機的開始加密請求的明文後,主機發送加密的開始加密請求應答包LL_START_ENC_RSP 給從機,並將自己的接收設置爲加密接收;第3次,因爲從機已經將接收設置爲了加密模式,所以應該能成功接收到主機 發 送 的 密 文 LL_START_ENC_RSP , 之後從機發送加密的LL_START_ENC_RSP包給主機從而完成 3 次加密握手過程。

2.3第3階段

    第3階段爲設備綁定階段,該階段從機會計算產生LTK,並將LTK和計算LTK所用的EDIV和RAND兩個值發給主機。主機將這三個值進行保存,這樣兩個設備就綁定成功了。

    第3階段傳輸的數據包都是加密的密文。

    已匹配和綁定過的兩個設備進行二次連接時,雙方先進行SKD和VI的交換,然後主機將EDIV和RAND發送給從機,從機利用EDIV和RAND和本身保存的ER和IR種子數據計算出LTK,然後雙方進行加密3次握手,如果3次握手成功,則建立連接成功,否則建立連接失敗,重新進行匹配。

PS:EDIV 和 Rand 參數就是決定STK作爲LTK計算SK 的評判標準,當EDIV和Rand都爲0時,表示這個加密請求是兩設備的第一次配對綁定,所以要用STK作爲LTK 使用;當EDIV和Rand不爲0時,表示之前這兩個設備已經配對過,這個值是在第一次配對時從機發送給主機的,可以知道只有第一次配對綁定過程纔有安全管理協議參與,之後的連接只需鏈路層進行控制。

3.漏洞分析

  • 中間人攻擊:藍牙設備的ER和IR種子數據是從硬件讀取,固定的。當通信完成之後,那麼B顯然知道A所使用的鏈路密鑰,那麼B通過修改自身的地址,把自己的地址改成A的地址後,僞裝成A和C通信,那麼C此時就以爲自己在和A通信。B也可以僞裝成C和A去通信,因爲B知道A的鏈路密鑰,B是能夠通過A的認證從而和A進行連接。這樣A和C之間並沒有進行實質的通信,都是B分別僞裝和A,C通信。
  • 加密關鍵數據泄漏:第二階段3次加密握手之前所有的數據都是明文傳輸,其中包括用與計算LTK的EDIV和RAND值和用於鏈路加密的SKD和VI值。
  • 鑑權DOS攻擊:鑑權時的DOS攻擊是從上一次鑑權失敗到下一次可以發起鑑權期間,第三方通過僞裝發起故意使鑑權失敗,從而使間隔時間繼續上升,直到達到允許的最大值,在此期間雙方不能進行正常的鑑權。還有一種形式的DOS攻擊,快速不斷的給遠端藍牙發送文件,而遠端設備被大量的是否要接收該文件的命令衝擊直到癱瘓。

PS:鑑權是指主從雙方得到相同的臨時密鑰(TK)的過程

參考資料

BLE4.0配對綁定通訊過程解析:https://blog.csdn.net/zhuangjitongxue/article/details/49748699

BLE配對綁定總結---總結來自低功耗藍牙協議總結:https://blog.csdn.net/qq_21231413/article/details/89174917

LE legacy Pairing過程和後續連接過程簡介:https://www.cnblogs.com/unrulife/p/10876795.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章