קוד אימות הודעה

שידורי הודעות משמשים להגדרת החלפת האודיו. הודעות על החלפת אודיו. בשביל ההגדרות החשובות האלה, הספק צריך כדי לוודא שההודעה נשלחת על ידי GMSCore (מודול התאמה מהירה) ולא על ידי אפליקציה אחרת ב-Seeker.

יצירת MAC (קוד אימות הודעה)

שירות FP לחיפוש מוסיף קוד אימות להודעות לגבי הגדרות המכשיר באמצעות HMAC-SHA256. ה-MAC של ההודעה מכיל את 8 הבייטים הראשונים של:

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

איפה

  1. הערך K נוצר באמצעות concat(account key, 48-byte ZEROs).
  2. הפרמטר message הוא הנתונים הנוספים של מקור ההודעות.
  3. הפרמטר nonce נוצר על ידי concat(session_nonce, message_nonce); חיבור צופן חד-פעמי (nonce) ו-מסר של הודעה מוגדרים בקטע הבא.
  4. הפרמטר opad מכיל 64 בייטים של המרווח הפנימי החיצוני, שמורכב מבייטים חוזרים. 0x5C.
  5. ל-ipad יש 64 בייטים של מרווח פנימי פנימי שמורכב מבייטים חוזרים. 0x36.

צופן חד-פעמי (nonce) של סשן

כדי למנוע התקפת הפעלה חוזרת, הספק צריך לוודא שלא שחוזרת על עצמה. מאז תחזוקת השעון או סנכרון המונה אצל שני הספק והמחפש לא פשוט, הספק יוצר את הסשן צופן חד-פעמי (לכל חיבור), שמשותף עם כל ההודעות במהלך החיבור, בזמן שה-Finder יוצר את ההודעה (nonce) באופן אקראי שנוצר לכל הודעה. ה-nonce ליצירת ה-MAC של כל הודעה הוא את השילוב של צופן חד-פעמי (nonce) ו-מסר של הודעה (nonce), כלומר concat(session_nonce, message_nonce).

אנחנו מוסיפים צופן סשן לקבוצת האירועים של פרטי המכשיר:

שם קבוצת ההודעות ערך
אירוע של פרטי מכשיר 0x03
שם קוד ההודעה ערך
צופן חד-פעמי (nonce) 0x0A

יש ליצור את הצופן החד-פעמי (nonce) של הסשן ולשלוח אותו ל-Finder כאשר RFCOMM מחברת:

אוקטט סוג הנתונים תיאור ערך
0 uint8 אירוע של פרטי מכשיר 0x03
1 uint8 צופן חד-פעמי (nonce) 0x0A
2 - 3 uint16 אורך נתונים נוסף 0x0,008
4 - 11 צופן חד-פעמי (nonce) משתנה

כדי לשלוח הודעה כשיש צורך ב-MAC, המחפש ישלח הודעה צופן חד-פעמי וה-MAC יחד עם ההודעה.

אוקטט סוג הנתונים תיאור ערך
0 uint8 קבוצה של הודעות משתנה
1 uint8 קוד הודעה משתנה
2 - 3 uint16 אורך נתונים נוספים(אורך הנתונים הנוספים + 16) משתנה
4 - n נתונים נוספים משתנה
n + 1 - n + 8 הודעה חד-פעמית משתנה
n + 9 - n + 16 קוד אימות להודעות משתנה

אימות ה-MAC (קוד אימות ההודעה)

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

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

איפה:

  1. הערך K נוצר על ידי concat(account key, 48-byte ZEROs), והספק יצטרך לעבור את כל מפתחות החשבון המאוחסנים כדי לאמת את ה-MAC.
  2. message הוא הנתונים הנוספים (לא כולל הודעות צופן חד-פעמי (nonce) ו-MAC) של בזרם ההודעות.

אם ה-MAC נכון, הספק יפעל לפי ההוראות הודעה. אחרת, הספק ישלח מספר NAK עם סיבת השגיאה, 0x3 - אין הרשאה בגלל קוד אימות שגוי של הודעה.