啟動(dòng)配置流程包括五個(gè)階段:
1、發(fā)送Beacon信號(hào)
2、邀請(qǐng)
3、交換公共密鑰
4、認(rèn)證
5、啟動(dòng)配置數(shù)據(jù)分發(fā)
1、發(fā)送Beacon信號(hào):如果未經(jīng)啟動(dòng)配置的設(shè)備支持PB-ADV承載層,則其作為未經(jīng)啟動(dòng)配置設(shè)備Beacon進(jìn)行廣播;如果使用的是PB-GATT承載層,則發(fā)送可連接的廣播數(shù)據(jù)包。這就向啟動(dòng)配置設(shè)備(Provisioner)表明未經(jīng)啟動(dòng)配置的設(shè)備已做好準(zhǔn)備,可進(jìn)入啟動(dòng)配置流程。
2、邀請(qǐng):?jiǎn)?dòng)配置設(shè)備(Provisioner)邀請(qǐng)未經(jīng)啟動(dòng)配置的設(shè)備發(fā)送自身啟動(dòng)配置功能信息。
3、交換公共密鑰:在此階段,根據(jù)未經(jīng)啟動(dòng)配置設(shè)備的功能,啟動(dòng)配置設(shè)備(Provisioner)選擇合適的驗(yàn)證方法,并通知未經(jīng)啟動(dòng)配置設(shè)備將要采取的方式。之后,啟動(dòng)配置設(shè)備和未經(jīng)啟動(dòng)配置設(shè)備會(huì)創(chuàng)建一個(gè)橢圓曲線公私密鑰對(duì)并交換公鑰。然后,每臺(tái)設(shè)備使用自己的私鑰和對(duì)等設(shè)備的公鑰來(lái)計(jì)算對(duì)稱(chēng)密鑰,即ECDHSecret。該密鑰用于驗(yàn)證對(duì)端設(shè)備的身份。
本文將介紹啟動(dòng)配置流程的后兩個(gè)階段:認(rèn)證和啟動(dòng)配置數(shù)據(jù)分發(fā)。
4、認(rèn)證
在此步驟中,啟動(dòng)配置設(shè)備使用所選的驗(yàn)證方法,對(duì)未經(jīng)啟動(dòng)配置設(shè)備進(jìn)行驗(yàn)證。有三種可用的驗(yàn)證方法(OOB, Out-Of-Band):輸出OOB(Output OOB)、輸入OOB(Input OOB)、以及靜態(tài)OOB(Static OOB)或無(wú)OOB(No OOB)。
輸出帶外(Output OOB)
若選擇的是輸出帶外(Output OOB)驗(yàn)證方法,則未經(jīng)啟動(dòng)配置設(shè)備會(huì)選擇一個(gè)隨機(jī)數(shù),并通過(guò)與其功能兼容的方式輸出該數(shù)字。例如,如果未經(jīng)啟動(dòng)配置設(shè)備是一個(gè)燈泡,則它能夠閃爍指定的次數(shù)。如果設(shè)備具有LCD屏幕,則可以將隨機(jī)數(shù)顯示為多位數(shù)值。啟動(dòng)配置設(shè)備(Provisioner)的用戶(hù)需要輸入觀察到的數(shù)字,來(lái)驗(yàn)證未經(jīng)啟動(dòng)配置的設(shè)備。輸出帶外驗(yàn)證方法的工作流程如圖1所示。
圖1 – 通過(guò)輸出OOB進(jìn)行驗(yàn)證
輸入隨機(jī)數(shù)后,啟動(dòng)配置設(shè)備(Provisioner)生成并檢查確認(rèn)值。無(wú)論采用哪種驗(yàn)證方式,整個(gè)驗(yàn)證步驟中的檢查確認(rèn)值(check confirmation value)計(jì)算方式都是相同的,請(qǐng)繼續(xù)往下看。
輸入帶外(Input OOB)
輸入帶外(Input OOB)驗(yàn)證方法與輸出帶外(Output OOB)方法類(lèi)似,但設(shè)備的角色相反。啟動(dòng)配置設(shè)備(Provisioner)生成并顯示隨機(jī)數(shù),然后提示用戶(hù)采取適當(dāng)?shù)牟僮鳎瑢㈦S機(jī)數(shù)輸入未經(jīng)啟動(dòng)配置的設(shè)備。以照明開(kāi)關(guān)為例,用戶(hù)可以在一定時(shí)間內(nèi)數(shù)次按下按鈕,以這種形式輸入隨機(jī)數(shù)。
與輸出帶外驗(yàn)證(Output OOB)相比,輸入帶外(Input OOB)方法需要發(fā)送一個(gè)附加的啟動(dòng)配置協(xié)議PDU。在完成認(rèn)證操作之后,未經(jīng)啟動(dòng)配置的設(shè)備向啟動(dòng)配置設(shè)備發(fā)送一個(gè)啟動(dòng)配置輸入完成PDU(Provisioning Input Complete PDU),通知其隨機(jī)數(shù)已輸入完成。隨后進(jìn)入到執(zhí)行檢查確認(rèn)值操作的步驟。
圖 2 – 通過(guò)輸入OOB進(jìn)行驗(yàn)證
靜態(tài)帶外(Static OOB) 或無(wú)帶外(No OOB)
在輸入帶外或輸出帶外都不可用的情況下,啟動(dòng)配置設(shè)備(Provisioner)和未經(jīng)啟動(dòng)配置的設(shè)備可采用靜態(tài)帶外(Static OOB)驗(yàn)證或無(wú)帶外(No OOB)驗(yàn)證:采用靜態(tài)OOB信息;或靜態(tài)OOB信息不可用,直接以數(shù)值0代替。在此情況下,啟動(dòng)配置設(shè)備和未經(jīng)啟動(dòng)配置的設(shè)備各自生成一個(gè)隨機(jī)數(shù),然后進(jìn)行檢查確認(rèn)值操作。
檢查確認(rèn)值(Check Confirmation Value)
無(wú)論采用何種驗(yàn)證方法,都會(huì)進(jìn)行確認(rèn)值生成和檢查。根據(jù)藍(lán)牙mesh規(guī)格,啟動(dòng)配置設(shè)備(Provisioner) 和未經(jīng)啟動(dòng)配置設(shè)備應(yīng)分別計(jì)算確認(rèn)值。這兩個(gè)值被稱(chēng)為ConfirmationProvisioner和ConfirmationDevice。這兩個(gè)值的計(jì)算都使用一系列相同的函數(shù),不同之處僅在于所使用的隨機(jī)數(shù)輸入。
藍(lán)牙m(xù)esh規(guī)格中有兩頁(yè)關(guān)于計(jì)算過(guò)程的內(nèi)容說(shuō)明。確認(rèn)值生成函數(shù)需要8個(gè)參數(shù),參數(shù)值來(lái)自啟動(dòng)配置(Provisioning)過(guò)程中的后續(xù)步驟。可參考規(guī)格的5.4.2.4認(rèn)證和5.4.1啟動(dòng)配置PDU部分,了解更多詳細(xì)信息。(詳見(jiàn): )
表1列出了用于確認(rèn)值生成及其來(lái)源的參數(shù)。
表1 - 用于確認(rèn)值計(jì)算的參數(shù)
讓我們來(lái)看看用于確認(rèn)值生成的算法。圖3是一個(gè)流程圖,其中包括了幾輪AES-CMAC和SALT生成[1]。該流程圖對(duì)于ConfirmationProvisioner和ConfirmationDevice值均適用。
如果由啟動(dòng)配置設(shè)備(Provisioner)執(zhí)行輸入,則從一個(gè)名為RandomProvisioner的值開(kāi)始(下圖中以藍(lán)色表示),并生成ConfirmationProvisioner值。
如果由未經(jīng)啟動(dòng)配置設(shè)備執(zhí)行輸入,則從一個(gè)名為RandomDevice的值開(kāi)始(下圖中以綠色表示),并生成ConfirmationDevice值。
圖 3 – 確認(rèn)值生成圖
確認(rèn)值檢查(Confirmation Value Check)
當(dāng)確認(rèn)值生成之后,兩臺(tái)設(shè)備就會(huì)進(jìn)行交換,并且都會(huì)檢查接收值的完整性。圖4表示確認(rèn)值檢查的過(guò)程。
確認(rèn)過(guò)程的開(kāi)始就是啟動(dòng)配置設(shè)備(Provisioner)將其隨機(jī)數(shù)RandomProvisioner發(fā)送到未經(jīng)啟動(dòng)配置的設(shè)備。未經(jīng)啟動(dòng)配置設(shè)備使用它來(lái)重新計(jì)算確認(rèn)值,并與之前接收的確認(rèn)值進(jìn)行比較,進(jìn)行驗(yàn)證。
圖 4 –確認(rèn)值檢查
如果由未經(jīng)啟動(dòng)配置設(shè)備計(jì)算所得的確認(rèn)值與接收到的ConfirmationProvisioner不匹配,則啟動(dòng)配置(Provisioning)過(guò)程將被中止。
如果由未經(jīng)啟動(dòng)配置設(shè)備計(jì)算所得的確認(rèn)值與接收到的ConfirmationProvisioner匹配,則未經(jīng)啟動(dòng)配置設(shè)備將其RandomDevice值發(fā)送給啟動(dòng)配置設(shè)備。
然后,啟動(dòng)配置設(shè)備(Provisioner) 使用相同的過(guò)程來(lái)重新計(jì)算確認(rèn)值,并通過(guò)比較計(jì)算所得值與先前接收值來(lái)進(jìn)行驗(yàn)證。
如果由啟動(dòng)配置設(shè)備(Provisioner) 計(jì)算所得的確認(rèn)值與接收到的ConfirmationDevice不匹配,則啟動(dòng)配置(Provisioning)流程將被中止。
如果由啟動(dòng)配置設(shè)備(Provisioner) 計(jì)算所得的確認(rèn)值與接收到的ConfirmationDevice匹配,則表示驗(yàn)證成功。后續(xù)只要啟動(dòng)配置設(shè)備(Provisioner)和未經(jīng)啟動(dòng)配置設(shè)備完成啟動(dòng)配置流程的第五步:?jiǎn)?dòng)配置數(shù)據(jù)分發(fā),則未經(jīng)啟動(dòng)配置設(shè)備就能成為藍(lán)牙m(xù)esh網(wǎng)絡(luò)中的節(jié)點(diǎn)(node)。
5、啟動(dòng)配置數(shù)據(jù)分發(fā)
認(rèn)證步驟完成之后,就可以確保在啟動(dòng)配置設(shè)備(Provisioner)和未經(jīng)啟動(dòng)配置設(shè)備之間建立的承載層的安全,然后就進(jìn)入啟動(dòng)配置(Provisioning)過(guò)程中最重要的一步:導(dǎo)出并分發(fā)啟動(dòng)配置數(shù)據(jù)(provisioning data)。啟動(dòng)配置設(shè)備(Provisioner) 負(fù)責(zé)生成啟動(dòng)配置數(shù)據(jù),啟動(dòng)配置數(shù)據(jù)由多個(gè)數(shù)據(jù)項(xiàng)組成,包括一個(gè)稱(chēng)為網(wǎng)絡(luò)密鑰 (NetKey) 的安全密鑰。表2列出了啟動(dòng)配置數(shù)據(jù)字段。
表 2 – 啟動(dòng)配置數(shù)據(jù)(provisioning data)
為安全地進(jìn)行啟動(dòng)配置數(shù)據(jù)分發(fā),啟動(dòng)配置設(shè)備(Provisioner)采用AES-CCM [2],借助共享的會(huì)話密鑰(SessionKey)對(duì)啟動(dòng)配置數(shù)據(jù)(provisioning data)進(jìn)行加密,啟動(dòng)配置設(shè)備和未經(jīng)啟動(dòng)配置設(shè)備都會(huì)進(jìn)行計(jì)算。 AES-CCM需要三個(gè)輸入?yún)?shù):會(huì)話密鑰、會(huì)話隨機(jī)數(shù)和純文本。純文本參數(shù)值包含需要被加密的啟動(dòng)配置數(shù)據(jù)。設(shè)備密鑰(DevKey)、會(huì)話密鑰(SessionKey)和會(huì)話隨機(jī)數(shù)(SessionNonce)的值通過(guò)圖5所示的過(guò)程導(dǎo)出。
圖5 - DevKey / SessionKey / SessionNonce生成過(guò)程
從圖5可以看出:
如果將prsk(綠色)的輸入值代入k1函數(shù)中,則會(huì)生成SessionKey。這是用于啟動(dòng)配置數(shù)據(jù)加密的關(guān)鍵。
如果將prsn(黃色)的輸入值代入k1函數(shù)中,將生成SessionNonce。這是用于啟動(dòng)配置數(shù)據(jù)加密的隨機(jī)值。
如果將prdk(藍(lán)色)的輸入值代入k1函數(shù),則將生成DevKey。
啟動(dòng)配置設(shè)備(Provisioner)和未經(jīng)啟動(dòng)配置設(shè)備都需要生成會(huì)話密鑰(SessionKey)和會(huì)話隨機(jī)數(shù)(SessionNonce)。當(dāng)SessionKey和SessionNonce值準(zhǔn)備就緒時(shí),啟動(dòng)配置設(shè)備將對(duì)包含導(dǎo)出啟動(dòng)配置數(shù)據(jù)的啟動(dòng)配置數(shù)據(jù)PDU (Provisioning Date PDU) 進(jìn)行加密,并將其發(fā)送至未經(jīng)啟動(dòng)配置的設(shè)備。此處,相同的SessionKey和SessionNonce值也可用來(lái)對(duì)接收到的數(shù)據(jù)進(jìn)行解密。
至此,啟動(dòng)配置流程完成。兩臺(tái)對(duì)等設(shè)備都已知曉新的設(shè)備密鑰(DevKey)和全網(wǎng)的網(wǎng)絡(luò)密鑰(NetKey),這就意味著我們的新設(shè)備已成為藍(lán)牙m(xù)esh網(wǎng)絡(luò)中的節(jié)點(diǎn)(node)和成員。
開(kāi)發(fā)mesh
啟動(dòng)配置過(guò)程是藍(lán)牙m(xù)esh安全的基礎(chǔ),讓網(wǎng)絡(luò)設(shè)備之間能夠可靠安全地進(jìn)行通信。
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5859瀏覽量
170909 -
密鑰
+關(guān)注
關(guān)注
1文章
140瀏覽量
19809 -
配置
+關(guān)注
關(guān)注
1文章
189瀏覽量
18428
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論