AliGenie BLE Mesh Provisioning 整個(gè)過(guò)程

AliGenie BLE Mesh Provisioning 整個(gè)過(guò)程

結(jié)合 Mesh Spec 1.0.1 和 AliGenie 5.0 版本,可知天貓精靈在和設(shè)備進(jìn)行 Provisioning 過(guò)程中,最終的路線圖如下:

image

Beacon

在 Provisioning 的開(kāi)始階段,需要由 Device 發(fā)送 Unprovisioned Beacon 廣播包,Mesh Beacon 的廣播包格式如下:

image

其中 Type 字段是 ?Mesh Beacon? ,而 Beacon Type 則有兩個(gè)值可以選,

image

這里為 0x00 代表 Unprovisioned Device Beacon 。

而對(duì)于 Unprovisioned Beacon 類型的 Beacon Data,Spec 規(guī)定了其格式為:

image

第 0 個(gè)字節(jié)的 0x00 代表上述的 Unprovisioned Beacon ,Device UUID 的 16 個(gè)字節(jié)由廠家定義,AliGenie 將其定義為:

Field Size(Octets) Notes
CID 2 公司ID,設(shè)置為0x01A8:Taobao
PID 1 Bit0-3 藍(lán)牙廣播包版本號(hào),目前是0x01<br />bit4為1:一機(jī)一密<br />bit5為1:支持OTA<br />bit6~7: 00:BLE4.0<br /> 01:BLE4.2<br /> 10:BLE5.0<br /> 11:BLE5.0以上
ProductID 4 阿里巴巴平臺(tái)頒發(fā),一型一號(hào)
MAC地址 6 阿里巴巴平臺(tái)頒發(fā),一機(jī)一號(hào)
FeatureFlag 1 bit7-1:uuid版本號(hào),目前版本為1<br />bit0 0:處于未配網(wǎng)廣播狀態(tài)<br /> 1:處于靜默廣播狀態(tài)
RFU 2 0x00 Reserved for future use

OOB Infomation 為全 0,代表不使用任何 OOB 手段傳輸公鑰(Public Key),而是直接通過(guò) BLE 廣播包傳輸公鑰(之后會(huì)有介紹)。

image

最后,Beacon 里不包含 URI Hash 。

對(duì)于 Unprovisioned Beacon,AliGenie 給出了兩種狀態(tài)

  • 未配網(wǎng)狀態(tài):Device UUID 里的 FeatureFlag 的 bit0 為 0,廣播時(shí)長(zhǎng) 40ms,廣播間隔 100ms,廣播持續(xù)時(shí)間默認(rèn) 10 分鐘。
  • 靜默廣播狀態(tài):Device UUID 里的 FeatureFlag 的 bit0 為 1,廣播時(shí)長(zhǎng) 120ms,廣播間隔 60s,不響應(yīng) Provionser 的配網(wǎng)消息。

當(dāng) Device 處于未配網(wǎng)狀態(tài),超時(shí)后也未被配網(wǎng)時(shí),自動(dòng)進(jìn)入靜默廣播狀態(tài)。

Invitation

天貓精靈收到 Unprovisioned Beacon 時(shí),會(huì)開(kāi)始進(jìn)行 1: Invitation & Capabilities 流程:

image

天貓精靈首先會(huì)向設(shè)備發(fā)送 Provisioning Invite PDU,其中包含參數(shù) Attention Duration,該參數(shù)用于 Device 進(jìn)行一些操作(例如燈閃爍,蜂鳴器響)來(lái)吸引人注意的持續(xù)時(shí)間。

image

之后 Device 返回 Provisioning Capabilities PDU,根據(jù) AliGenie 5.0 規(guī)定,我們需要將 Static OOB Type 位置 1,而 Public Key Type,Output OOBInput OOB 都不需要。

image

Exchange public keys

在本階段 Provisioner 和 Device 通過(guò)橢圓曲線 diffie-hellman 密鑰交換算法(ECDH)方式共同協(xié)商出了一個(gè)密鑰(Session Key),用于后續(xù)信息的加密傳輸。

關(guān)于 ECDH 的詳細(xì)介紹可以參考 BLE安全機(jī)制從入門(mén)到放棄,下面僅簡(jiǎn)單介紹一些。

ECDH 利用了橢圓曲線中的數(shù)學(xué)問(wèn)題來(lái)解決密鑰傳輸問(wèn)題,公式可抽象為:
Y = x * G
該公式已知橢圓曲線上的點(diǎn) Y、基點(diǎn) G 的時(shí)候,很難求出 x 。其中算術(shù)符號(hào) * 表示的不是普通的乘法,而是一種在橢圓曲線上的特殊算法。

以 Bob 和 Alice 為例,看其如何在有 Eve 監(jiān)聽(tīng)的情況下協(xié)商出一個(gè)密鑰。

image

參考上圖,Bob 利用公式 pb = sb * G 生成了公鑰 pb,根據(jù)上述信息可知,已知 pbG 很難求出 pa 。Alice 也利用相同的方式生成了公鑰 pa 。之后他們倆相互交換公鑰 pa, pb ,然后就可以計(jì)算出一個(gè)雙方都擁有的密鑰 DHey
$$
\begin{align}
DHkey &= sb * pa \
&= sb * sa * G \

DHkey &= sa * pb \
&= sa *pb * G

\end{align}
$$
上述運(yùn)算符 * 具有交換律,因此 Alice 和 Bob 計(jì)算的 DHkey 值一致,可以用于后續(xù)加密計(jì)算。

而一直監(jiān)聽(tīng)的 Eve 只擁有數(shù)據(jù) G, pa, pb,根據(jù)上述公式特性,很難根據(jù) G, pa, 或 pb 計(jì)算出一個(gè)私鑰,因此無(wú)法得到上述的 DHkey,從而 Bob 和 Alice 成功在有竊聽(tīng)風(fēng)險(xiǎn)的環(huán)境中協(xié)商出了一個(gè)安全的密鑰。

再來(lái)看看 Provisioning 過(guò)程中的 Exchange public keys 階段,

image

天貓精靈向設(shè)備發(fā)送 Provisioning Start PDU,其攜帶的參數(shù)里 Authentication Method 表明選擇 Static OOB 認(rèn)證方式。之后雙方隨機(jī)生成一個(gè)私鑰,再根據(jù) ECDH 的公式計(jì)算出公鑰,雙方交換公鑰,再次利用 ECDH 公式即可協(xié)商出一個(gè)密鑰(ECDHKey)用于后續(xù)信息加密傳輸。當(dāng)然,在這一過(guò)程中我們走的是 2a:Start without OOB Public Key 這條路徑,如下圖:

image

其實(shí)還有 2b:Start using OOB Public Key 這條路徑,此時(shí) Provisioner 通過(guò) OOB 的方式獲取 Device 的公鑰,除此之外沒(méi)有其他區(qū)別,流程如下圖:

image

Authentication

在認(rèn)證階段,通信雙方都需要驗(yàn)證對(duì)方的身份,整體流程如下:

image

首先通信雙方通過(guò) Provisioning Confirmation 交換一個(gè) 128-bit 的 Confirmation 值:

image

Provisioner 的 Confirmation 值的計(jì)算公式如下:
ConfirmationProvisioner = AES_-CMAC_{ConfirmationKey}(RandomProvisioner || AuthValue)
其中輸入?yún)?shù)有一個(gè) RandomProvisioner 和一個(gè) AuthValue 值,Random 值是隨機(jī)生成的,而 AuthValue 則是由廠商定義,AliGenie 將其定義為:
AuthValue = SHA256(Product ID,MAC,Secret)
將 ProductID,MAC,Secret 三元組通過(guò)字符串用英文逗號(hào)連接,然后進(jìn)行 SHA256 摘要計(jì)算,取前16字節(jié)。注:這里用于計(jì)算 SHA256 的英文字母全部為小寫(xiě)。SHA256 類似一個(gè) Hash 散列函數(shù),輸入是一個(gè)字符串,輸出是一個(gè) 256-bit 的散列值,AliGenie 取前 16 個(gè)字節(jié)。

image

Device 端也是類似的操作。

當(dāng)雙方都計(jì)算得到 Confirmation 值后,通過(guò) Provisioning Confirmation PDU 交換該值,之后 Provisioner 通過(guò) Provisioning Random PDU 發(fā)送 RandomProvisioner 值,這樣 Device 就可以利用自身的 AuthValue 和收到的 RandomProvisioenr 來(lái)驗(yàn)證收到的 Confirmation 是否正確,從而達(dá)到認(rèn)證的目的。

Distribution of provisioning data

認(rèn)證完成后,天貓精靈就準(zhǔn)備下放數(shù)據(jù)了,利用之前的 ECDHKey 生成一個(gè) session key,然后基于這個(gè) session key 將數(shù)據(jù)(network key, NetKey Index, Key Refresh Flag, IV Update Flag, IV index, unicast value)加密,通過(guò) Provisioning Data PDU 發(fā)送給 Device,若 Device 端成功接收,返回 Provisioning Complete,流程如下:

image

至此,Provisioning 過(guò)程結(jié)束,接下來(lái)就是 Configuration 過(guò)程了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容