קוד אימות הודעה
שידורי הודעות משמשים להגדרת מתג האודיו. מידע נוסף זמין במאמר הודעות על שינוי מקור אודיו. בהגדרות החשובות האלה, הספק צריך לוודא שההודעה נשלחת על ידי GMSCore (המודול 'התאמה מהירה') ולא על ידי אפליקציה אחרת במחפש.
יצירת MAC (קוד אימות הודעה)
הפונקציה FP ההצגה מוסיפה קוד אימות להודעות של הגדרות המכשיר באמצעות HMAC-SHA256. ה-MAC של ההודעה מורכב מ-8 הבייטים הראשונים של:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
איפה
- K נוצר על ידי concat(מפתח חשבון, אפס של 48 בייטים).
- message הוא הנתונים הנוספים של מקור ההודעות.
- הערך nonce נוצר על ידי concat(session_nonce, message_nonce). בחלק הבא מוגדרים הדברים הבאים: session_nonce ו-message_nonce.
- opad הוא 64 בייטים של מרווח פנימי חיצוני, שמורכב מבייטים שחוזרים על עצמם בערך
0x5C
. - 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)))))
איפה:
- הקוד K נוצר על ידי
concat(account key, 48-byte ZEROs)
, והספק יעבור בין כל מפתחות החשבון המאוחסנים כדי לאמת את ה-MAC. - message הוא הנתונים הנוספים (לא כולל הודעות חד-פעמיות ו-MAC) של מקור ההודעות.
אם ה-MAC נכון, הספק יפעל לפי הוראות ההודעה. אחרת, הספק ישלח NAK עם סיבת השגיאה, 0x3 – לא מותרת עקב קוד אימות הודעה שגוי.