מושגים של מודלים של אינטראקציות

מודל הנתונים (DM) של צומת לא רלוונטי אם אנחנו לא יכולים לבצע פעולות בו. מודל האינטראקציה (IM) מגדיר את קשר ה-DM של הצומת עם הצ'אט של צמתים אחרים: שפה נפוצה לתקשורת בין צ'אטים.

הצמתים מקיימים אינטראקציה אחד עם השני בדרכים הבאות:

  • קריאה והרשמה למאפיינים ולאירועים
  • כתיבה למאפיינים
  • פקודות הפעלה

בכל פעם שצומת יוצר רצף תקשורת מוצפן עם צומת אחר, הוא מהווה קשר אינטראקציה. אינטראקציות יכולות להיות מורכבות מעסקאות אחת או יותר, והטרנזקציות מורכבות מפעולות אחת או יותר שאפשר להבין כהודעות ברמת IM בין צמתים.

ההיררכיה של מודל האינטראקציה
איור 1: מודל ההיררכיה של מודל האינטראקציה

בטרנזקציות יש תמיכה בכמה פעולות, כמו בקשה לפעולת קריאה של מאפיין או אירוע מצומת אחר, או התגובה שלו, הפעולה Report Data, שמחזירה את המידע מהשרת ללקוח.

יוזמים ומטרות

הצומת שמתחיל עסקה הוא Initiator, והצומת שמגיב הוא ה-Target. בדרך כלל, היוזם הוא אשכול לקוח, והיעד הוא אשכול שרת. עם זאת, יש יוצאים מן הכלל לדפוס הזה, כמו בקטע אינטראקציות במינוי שנותחו בהמשך הקטע הזה.

קבוצות

יכול להיות שצמתים ב-Matter שייכים לקבוצה. קבוצת מכשירים היא מנגנון לטיפול בהודעות ולשלוח אותן למספר מכשירים באותה פעולה בו-זמנית. כל הצמתים בקבוצה חולקים את אותו Group ID, מספר שלם של 16 ביט.

כדי לתקשר ברמת הקבוצה (Groupcast), Matter משתמש בהודעות IPv6 Multicast, ולכל חברי הקבוצה יש אותה כתובת Multicast.

נתיבים

בכל אינטראקציה עם מאפיין, אירוע או פקודה, אנחנו צריכים לציין את הנתיב של האינטראקציה הזו: המיקום של המאפיין, האירוע או הפקודה בהיררכיה של מודל הנתונים של הצומת. חשוב לשים לב שהנתיבים יכולים גם להשתמש בקבוצות או באופרטורים של תווים כלליים לחיפוש כדי לטפל במספר צמתים או אשכולות בו-זמנית, וכך לצבור את האינטראקציות האלה וכך לצמצם את מספר הפעולות.

המנגנון הזה חשוב לשיפור הרספונסיביות של התקשורת. לדוגמה, אם משתמש רוצה לכבות את כל האורות, העוזר הדיגיטלי יכול ליצור אינטראקציה יחידה עם מספר נורות בקבוצה במקום רצף של אינטראקציות נפרדות. אם המאתחל יוצר אינטראקציות נפרדות עם כל נורה, הוא יכול ליצור זמן אחזור שמזוהה באופן אנושי ברספונסיביות של המכשיר. בעקבות זאת, מכשירים מרובים מגיבים לפקודה עם עיכובים גלויים ביניהם. מצב כזה נקרא בדרך כלל 'אפקט פופקורן'.

אפשר להרכיב נתיב ב-Matter באמצעות אחת מהאפשרויות הבאות:

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

ובאבני הבניין האלה של ה-Path, אופרטורים של endpoint ו-cluster עשויים לכלול גם אופרטורים של תווים כלליים לחיפוש לבחירת יותר ממופע אחד של צומת.

מתוזמנות ולא מתוזמנות

יש שתי דרכים לבצע טרנזקציה כתיבה או הפעלה: מתוכננת ולא מתוזמנת. כשמשתמשים בטרנזקציות מתוזמנות, נקבע זמן קצוב לתפוגה לפני לשליחת פעולת הכתיבה/הפעלה. המטרה של הזמן הקצוב הזה היא למנוע מתקפת יירוט על העסקה. היא תקפה במיוחד למכשירים שפותחים שער גישה לנכסים, כמו מנעולים ופותחנים.

כדי להבין את הטרנזקציות המתוזמנות, כדאי להבין איך התקפות יירוט יכולות להתרחש ולמה חשוב לבצע עסקאות מתוזמנות.

מתקפת יירוט

למתקפת יירוט יש את הדפוס הבא:

  1. אליס שולחת ליוסי הודעה ראשונית, כגון פעולת כתיבה של בקשה.
  2. Eve, אדם בתווך, מיירט את ההודעה ומונעת מבוב לקבל אותה, למשל באמצעות סוג כלשהו של שיבושים ברדיו.
  3. ליאל, שלא מקבלת תגובה מיוסי, שולחת הודעה שנייה.
  4. Eve מיירטת שוב ומונעת מבוב לקבל אותו.
  5. איב שולחת את ההודעה הראשונה שיורטה אל יוסי, כאילו היא הגיעה מאליס.
  6. יוסי שולח את התשובה אל ליאל (וגם לאיב).
  7. Eve מחזיקה את ההודעה השנייה שנחשפה להקלטה חוזרת מאוחר יותר. מכיוון שיוסי מעולם לא קיבל את ההודעה המקורית השנייה שתתקבל מאליס, הוא יקבל אותה. ההודעה הזו מייצגת תקרית אבטחת מידע כשההודעה מקודדת פקודה כמו 'נעילה פתוחה'.

כדי למנוע התקפות כאלה, הפעולות המתוזמנות מגדירות זמן קצוב לתפוגה בעסקה בתחילת הטרנזקציה. גם אם Eve תצליח להפעיל את ששת השלבים הראשונים של הווקטור ההתקפה, היא לא תוכל להפעיל מחדש את ההודעה בשלב 7 בגלל שפג הזמן הקצוב לתפוגה של העסקה.

עסקאות מתוזמנות מגדילות את המורכבות ואת מספר הפעולות. לכן, לא מומלץ להשתמש בהן בכל עסקה, אלא רק בפעולות הקריטיות במכשירים שיש להם שליטה על נכסי אבטחה ופרטיות פיזיים או וירטואליים.

פשטות ה-SDK

בקטעים קריאת טרנזקציות, כתיבת עסקאות והפעלת טרנזקציות, ה-SDK מספק סקירה כללית ברמה גבוהה על הפעולות של מודל האינטראקציה שמתבצעות.

המפתח שיוצר מוצר שמשתמש ב-SDK של Matter בדרך כלל לא מבצע קריאות כדי לבצע פעולות באופן ישיר. הפעולות מופשטות באמצעות פונקציות SDK שמקיפות אותן לאינטראקציה. עם זאת, חשוב להבין את הפעולות ב-IM כדי לספק למהנדס מיומנות טובה ביכולות של Matter, וגם שליטה פרטנית בהטמעת ה-SDK.