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層,在查詢與呼叫建立後。