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

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

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

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

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

איפה

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

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

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

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

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

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

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

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 קבוצת הודעות משתנה
1 uint8 קוד הודעה משתנה
3 - 2 uint16 אורך הנתונים הנוסף(אורך הנתונים הנוסף + 16) משתנה
4 - n נתונים נוספים משתנה
n + 1 - n + 8 הודעה חד-פעמית (nonce) משתנה
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 הוא הנתונים הנוספים (לא כולל הודעות חד-פעמיות ו-MAC) של מקור ההודעות.

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