互動模型概念

如果無法對節點執行作業,節點的資料模型 (DM) 就無關緊要。互動模型 (IM) 定義節點 DM 與其他節點 DM 的關係:DM 之間通訊的通用語言。

節點之間的互動方式如下:

  • 讀取及訂閱屬性和事件
  • 寫入屬性
  • 叫用指令

每當節點與另一個節點建立加密通訊序列時,兩者就會構成「互動」關係。互動可能由一或多個交易組成,而交易則由一或多個動作組成,可視為節點之間的 IM 層級訊息。

互動模式階層
圖 1:互動模型的階層

交易支援多種動作,例如讀取要求動作,可向其他節點要求屬性或事件,或其回應、報表資料動作,可將資訊從伺服器傳回用戶端。

啟動端和目標

發起交易的節點是「發起端」,回應的節點則是「目標」。一般來說,啟動器是用戶端叢集,目標是伺服器叢集。不過,這個模式也有例外,例如本節稍後分析的訂閱互動。

群組

Matter 中的節點可能屬於某個群組。「裝置群組」是一種機制,可同時向同一個動作中的多部裝置傳送訊息。群組中的所有節點都會共用相同的群組 ID (16 位元整數)。

為達成群組層級通訊 (Groupcast),Matter 會利用 IPv6 Multicast 訊息,且所有群組成員都具有相同的 Multicast 位址。

路徑

每當我們想與屬性、事件或指令互動時,都必須指定這項互動的路徑:節點資料模型階層中屬性、事件或指令的位置。不過,路徑也可能使用群組或萬用字元運算子,同時處理多個節點或叢集,匯總這些互動,進而減少動作數量。

這項機制對於提升通訊回應速度至關重要。舉例來說,當使用者想關閉所有燈具時,語音助理可以與群組中的多個燈具建立單一互動,而不是一系列個別互動。如果發起端與每個燈具建立個別互動,可能會導致裝置回應速度出現人類可察覺的延遲。這會導致多部裝置對指令做出反應時,出現明顯的延遲。這通常稱為「爆米花效應」。

Matter 中的路徑可使用下列其中一個選項組合:

<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID>        <cluster> <attribute | event | command>

在這些路徑建構區塊中,endpoint 和 cluster 也可能包含萬用字元運算子,用於選取多個節點例項。

計時和不計時

執行寫入或叫用交易的方式有兩種:計時和不計時。定時交易會為要傳送的寫入/叫用動作設定逾時上限。這項逾時設定是為了防止交易遭到攔截攻擊。這項功能特別適用於控制資產存取權的裝置,例如車庫門遙控器和門鎖。

如要瞭解限時交易,請先瞭解攔截攻擊的發生方式,以及限時交易的重要性。

攔截攻擊

攔截攻擊的模式如下:

  1. Alice 向 Bob 傳送初始訊息,例如寫入要求動作。
  2. Eve 是中間人,會攔截訊息並阻止 Bob 接收訊息,例如透過某種無線電干擾。
  3. Alice 沒有收到 Bob 的回覆,因此傳送第二則訊息。
  4. Eve 再次攔截,阻止 Bob 收到。
  5. Eve 將第一則攔截的訊息傳送給 Bob,假裝是 Alice 傳送的。
  6. Bob 將回應傳送給 Alice (和 Eve)。
  7. Eve 保留第二則攔截的訊息,以便稍後重播。由於 Bob 從未收到 Alice 傳送的原始第二則攔截訊息,因此會接受該訊息。如果訊息編碼為「open lock」等指令,則代表安全漏洞。

為防範這類攻擊,定時動作會在交易開始時設定交易逾時上限。即使 Eve 成功執行攻擊向量的前六個步驟,也無法在步驟 7 重播訊息,因為交易逾時已過期。

限時交易會增加動作的複雜度和數量。因此,我們不建議在每筆交易中都使用這類金鑰,而只建議在裝置上執行重要作業時使用,以便控管實體或虛擬安全性和隱私權資產。

SDK 抽象化

「讀取交易」、「寫入交易」和「叫用交易」等章節,概略說明 SDK 執行的互動模型動作。

開發人員建立使用 Matter SDK 的產品時,通常不會直接執行動作,而是由 SDK 函式抽象化動作,並將動作封裝成互動。不過,工程師必須瞭解 IM 動作,才能充分掌握 Matter 的功能,並精細控管 SDK 導入作業。