1. 程式人生 > >Never give up ,Hearts dream!

Never give up ,Hearts dream!

1 何為配對?

是指兩個藍芽裝置首次通訊時,相互確認的過程,兩個藍芽裝置一經配對之後,隨後的通訊就不必每次配對,只需要認證就可以了。

2 安全模式

藍芽支援三種安全模式:

(1)    裝置沒有任何安全措施的“無安全操作”。

(2)    通道建立之前不需要啟動安全協議的“業務級安全模式”。

(3)    終端在建立鏈路之前必須啟動安全模式的“鏈路安全模式”,安全級別最高。目前藍芽裝置通常採用該安全模式。

3 配對和認證

藍芽通訊初始化過程需要三個步驟:

(1)    生成初級金鑰 kinit。

(2)    生成鏈路金鑰。

(3)    雙方認證。

然後藍芽裝置會將鏈路金鑰儲存在非易失的儲存介質中,以備以後每次連線時使用。在配對之前首先要將PIN碼輸入到藍芽裝置中,像某些裝置(藍芽耳機),PIN碼是固定不變的。

注意,兩邊的PIN必須相同,否則配對會失敗。

PIN(Personal Identification Number):個人識別碼,藍芽使用的PIN碼長度為1-8個十進位制位(8-128位元)。

現在簡單解析一下藍芽配對認證的過程

1、配對和認證

  藍芽通訊初始化過程需要三個步驟:生成初始金鑰(Kinit)、生成鏈路金鑰(Kab)和雙方認證。接著,用加密金鑰來保護往後的通訊。在配對之前,需要事先將PIN碼輸入到藍芽裝置中,在某些裝置(像無線耳機),PIN是固定不可改變的。必須注意的是,兩邊的PIN必須匹配,否則不能通訊。下面我們將討論配對和雙方認證的細節。

  生成初始金鑰(Kinit)

  初始金鑰Kinit t長度為128位,由E22演算法產生,圖1描述了生成Kinit金鑰的過程。首先提出通訊要求的裝置稱為主裝置(Master),用A表示;被動進行通訊的裝置稱為從裝置(Slave),用B表示。從圖中可以看到,E22演算法的輸入(明文)由以下三部分組成:

  1)從裝置的實體地址:BD_ADDR,在生成Kinit前,主裝置通過詢問方式獲得從裝置的地址BD_ADDR。

  2)PIN碼及其長度,PIN碼是雙方裝置預先設定的。

  3)一個128位的隨機數(IN_RAND)。由主裝置產生,並以明文方式傳送給從裝置。

  由於主、從裝置使用了相同的E22演算法,如果雙方裝置以上三部分的值都相等,那麼各自算出來的Kinit也應該相同。


圖1

.生成鏈路金鑰Kab

 見圖2,首先主裝置A產生128位的隨機數LK_RANDA,從裝置B也產生128位的隨機數LK_RANDB。在主裝置A中,Kinit與LK_RANDA進行位位元邏輯異或運算,異或結果傳送給B裝置;同樣的,在B裝置中,Kinit和LK_RANDB進行位位元邏輯異或運算,結果傳送給A裝置。通過這些交換後,A和B裝置都具有相同的Kinit、LK_RANDA和LK_RANDB。按照圖2,裝置A和B分別用E21演算法將LK_RANDA和BD_ADDRA、LK_RANDB和BD_ADDRB加密,並將結果進行異或得到Kab。

 

圖2

如圖2所示,master和slave會生成相同的鏈路金鑰。

雙向認證

雙向認證採用challenge-response(挑戰-應答)方式。如圖3所示,主裝置A為應答方,從裝置B為請求方。做為應答方的A裝置產生一個128位的隨機數AU_RANDA,並以明文方式傳送至B裝置。A、B裝置都用E1演算法將各自得到的AU_RANDA、Kab和BD_ANDRB加密運算分別生成32位的SRESA和SRESB。B裝置將結果SRESB傳送給A裝置,A裝置比較SRESA和SRESB,如果相等,此次認證通過,否則認證不通過。執行完此次認證後,A裝置和B裝置的角色對換,即A裝置做為請求方,B裝置做為應答方,採用同樣的方式進行認證。

 

圖3

配對,認證發生在LMP層,在查詢與呼叫建立後。