Secure Simple Pairing Explained原文
介紹
基于PIN碼的藍(lán)牙配對的第一個(gè)版本沒有提供任何真正的安全防范嗅探芽唇。像Ellisys藍(lán)牙瀏覽器400這樣的嗅探器能夠通過被動(dòng)地嗅探配對過程來自動(dòng)立即確定PIN碼并推出鏈路密鑰(Link Key)倘核。
隨著藍(lán)牙越來越廣泛浪读,安全配對方法成為確保技術(shù)長期成功的難點(diǎn)纷纫。在藍(lán)牙2.1規(guī)范中引入牲尺,安全簡單配對(SSP)修復(fù)了以前配對方法的所有問題宪卿,并使藍(lán)牙設(shè)備配對比以往任何時(shí)候都更簡單乘寒。
更強(qiáng)大的安全性也意味著藍(lán)牙工程師面臨新的挑戰(zhàn)望众。在現(xiàn)場調(diào)試現(xiàn)成的設(shè)備變得難以實(shí)現(xiàn)。
事情并沒有像他們看起來那樣糟糕伞辛。本文旨在介紹SSP的基礎(chǔ)知識烂翰,并清除藍(lán)牙社區(qū)中常見的一些誤解。
配對過程
配對設(shè)備的過程旨在在兩個(gè)藍(lán)牙設(shè)備之間創(chuàng)建共享密鑰:鏈路密鑰(Link Key)蚤氏。然后甘耿,該鏈路密鑰(Link Key)用于彼此認(rèn)證設(shè)備并加密交換的數(shù)據(jù)。數(shù)據(jù)實(shí)際上并沒有使用鏈路密鑰(Link Key)直接加密;臨時(shí)加密密鑰(Encryption Key)從鏈路密鑰(Link Key)和在加密通信流開始之前不久交換的隨機(jī)數(shù)導(dǎo)出竿滨。然后佳恬,該加密密鑰(Encryption Key)用于在兩個(gè)方向上加密數(shù)據(jù)∮谟危可以在連接處于活動(dòng)狀態(tài)的任何時(shí)候更改它毁葱,一旦連接關(guān)閉,或者如果加密停止贰剥,將被丟棄倾剿。
藍(lán)牙規(guī)范定義了兩種標(biāo)準(zhǔn)配對過程,LMP配對(也稱為基于PIN碼)和SSP蚌成。非標(biāo)準(zhǔn)配對方法也是可能的前痘,但是要求兩個(gè)設(shè)備來自同一制造商。任何配對方法的結(jié)果都是一樣的:創(chuàng)建共享的鏈路密鑰(Link Key)担忧。
一旦兩個(gè)設(shè)備擁有相同的鏈路密鑰(Link Key)芹缔,該共享密鑰可以用于在稍后的時(shí)間將兩個(gè)設(shè)備重新認(rèn)證。當(dāng)重新連接時(shí)涵妥,設(shè)備通過交換從其派生的數(shù)字來快速驗(yàn)證它們都具有相同的鏈路密鑰(Link Key)乖菱。如果鏈路密鑰(Link Key)匹配,則可以繼續(xù)創(chuàng)建會話密鑰(Session Key)蓬网。否則窒所,配對過程(LMP配對或SSP)必須從一開始重新啟動(dòng),從而創(chuàng)建一個(gè)全新的鏈路密鑰(Link Key)帆锋。
LMP配對(又名PIN碼)
用于創(chuàng)建LMP配對的鏈路密鑰(Link Key)的算法的輸入如下:
- 兩臺設(shè)備的BD_ADDR
- 由發(fā)起者創(chuàng)建的16字節(jié)隨機(jī)數(shù)
- 用戶在兩臺設(shè)備上輸入的PIN碼(用戶無法更改PIN碼的“固定PIN碼”除外)
這些數(shù)字用于首先創(chuàng)建臨時(shí)共享初始化密鑰( temporary shared initialization key)吵取,然后使用LMP配對密鑰生成過程將其轉(zhuǎn)換為鏈路密鑰(Link Key)。
由于唯一未公開的信息是PIN碼锯厢,可能的秘密鏈路密鑰(Link Key)的數(shù)量受可能的PIN碼的數(shù)量的限制皮官。如果設(shè)備使用4位PIN碼脯倒,則攻擊者只需要在能夠解密通信流之前最多嘗試10,000個(gè)不同的鏈路密鑰(Link Key)。這是LMP配對的弱點(diǎn)所在捺氢。
LMP配對過程由以下圖表描述:
PIN碼不是通過空中傳送的唯一信息藻丢。這是Ellisys嗅探器捕獲的相同通信流:
基于此捕獲的信息,Ellisys軟件能夠自動(dòng)確定PIN碼并計(jì)算鏈路密鑰(Link Key)摄乒,而無需任何用戶交互悠反。Ellisys軟件的結(jié)果如下:
之后,Ellisys軟件將自動(dòng)解密任何后續(xù)安全連接的數(shù)據(jù)馍佑。此過程在下面的“已認(rèn)證連接”一章中描述斋否。
確保簡單配對
SSP使用一種更加精細(xì)的機(jī)制,稱為橢圓曲線密碼術(shù)拭荤,避免使用PIN碼作為鏈路密鑰(Link Key)計(jì)算過程的一部分(PIN碼或其他用戶碼仍然可以用作認(rèn)證過程的一部分)茵臭,而是使用極大的隨機(jī)數(shù)來給Link Key計(jì)算做種子。因此舅世,可能的鏈路密鑰(Link Key)的數(shù)量不再限于小于2^128的可能性旦委,這遠(yuǎn)遠(yuǎn)超出了任何現(xiàn)實(shí)的攻擊者能力。
為了實(shí)現(xiàn)這一點(diǎn)歇终,SSP過程開始于在兩個(gè)設(shè)備之間建立不同種類的共享秘密社证。這個(gè)共享秘密被稱為Diffie-Hellman密鑰(DHKey),是一個(gè)192位隨機(jī)數(shù)评凝。作為先決條件,兩個(gè)設(shè)備每個(gè)都具有私鑰和公鑰腺律。公共密鑰是通過空中傳播的奕短,任何人都可以知道,但私鑰永遠(yuǎn)不會被披露匀钧。我們將這兩個(gè)Key稱為SSP公鑰/私鑰對翎碑,但這些也稱為Diffie-Hellman公鑰/私鑰對(Diffie和Hellman是開發(fā)該算法的兩個(gè)人)。
用于創(chuàng)建SSP密鑰對的精心選擇的數(shù)學(xué)空間和算法使得:
非常困難(即不可能使用當(dāng)前最先進(jìn)的計(jì)算機(jī))使用公鑰計(jì)算私鑰(但是很容易根據(jù)私鑰計(jì)算公鑰)
給定兩個(gè)SSP密鑰對A和B之斯,存在一個(gè)眾所周知的函數(shù)F日杈,使得F(PublicA,PrivateB)= F(PublicB佑刷,PrivateA)莉擒。這個(gè)函數(shù)的結(jié)果是DHKey。只有擁有A和B的兩個(gè)設(shè)備能夠計(jì)算出相同的DHKey瘫絮。
這是SSP的神奇之處:兩臺設(shè)備將能夠進(jìn)行配對涨冀,而無需通過空中傳輸任何關(guān)鍵信息,且無需通過帶外機(jī)制(例如鍵入它)在鍵盤上共享該信息)麦萤。DHKey將用作計(jì)算鏈路密鑰(Link Key)的種子鹿鳖。配對過程的其余部分與LMP配對相似扁眯。
SSP配對過程由以下圖表描述:
這是Ellisys嗅探器捕獲的同一通信流:
嗅探器不知道的唯一信息(為了從通過空中傳輸?shù)耐ㄐ帕饔?jì)算鏈路密鑰(Link Key))是SSP私鑰。實(shí)際上翅帜,只需要兩個(gè)SSP私鑰中的一個(gè)來確定DHKey姻檀,因此需要鏈路密鑰(Link Key)。如果用戶將其設(shè)備的SSP私鑰提供給Ellisys分析軟件涝滴,則將自動(dòng)推斷從本設(shè)備與任何其他設(shè)備配對的鏈路密鑰(Link Key)绣版。
另一種方法是使用SSP調(diào)試模式。我們現(xiàn)在了解SSP的基礎(chǔ)知識狭莱,了解SSP調(diào)試模式很簡單僵娃。置于SSP調(diào)試模式的設(shè)備將不會使用其通常的SSP私鑰/公鑰對,而會使用SSP調(diào)試模式私鑰/公鑰對腋妙。如果兩個(gè)設(shè)備中的任一個(gè)置于SSP調(diào)試模式下默怨,Ellisys嗅探器將能夠通過識別通過空中發(fā)送的調(diào)試模式公鑰并使用相應(yīng)的公鑰來自動(dòng)推導(dǎo)出配對產(chǎn)生的鏈路密鑰(Link Key)。使用SSP調(diào)試模式或提供兩個(gè)SSP私鑰之一是完全相同的骤素。
以下屏幕截圖顯示了當(dāng)使用SSP調(diào)試模式時(shí)Ellisys軟件發(fā)現(xiàn)的Link Key:
認(rèn)證連接
配對后匙睹,兩臺設(shè)備共享相同的鏈路密鑰(Link Key)。然后济竹,這些設(shè)備可以使用鏈路密鑰(Link Key)進(jìn)行身份驗(yàn)證(以確保其他設(shè)備確實(shí)是其所說的)痕檬,并導(dǎo)出加密密鑰(Encryption Key)(以保護(hù)由兩個(gè)設(shè)備交換的數(shù)據(jù))。
數(shù)據(jù)在LMP_start_encryption請求之后被加密送浊。完整的啟動(dòng)加密過程如下圖所示:
Ellisys軟件中顯示的同一通信流:
有趣的是梦谜,數(shù)據(jù)包將在LMP_start_encryption請求之后被加密,所以即使LMP_accepted的握手也將被加密袭景。以下屏幕截圖顯示哪些數(shù)據(jù)包已加密唁桩。當(dāng)鎖圖標(biāo)為藍(lán)色時(shí),這意味著數(shù)據(jù)包是純文本(未加密的)耸棒。當(dāng)鎖圖標(biāo)為綠色時(shí)荒澡,表示數(shù)據(jù)包已成功解密。