מפרט אביזרי הרשת של 'איפה המכשיר שלי'

v1.3

מפרט האביזרים לרשת 'איפה המכשיר שלי' (FMDN) מגדיר גישה של הצפנה מקצה לקצה למעקב אחרי מכשירי Bluetooth עם צריכת אנרגיה נמוכה (BLE). בדף הזה מתואר FMDN כתוסף למפרט ההתאמה המהירה. ספקים צריכים להפעיל את התוסף הזה אם יש להם מכשירים שתואמים ל-FMDN ומוכנים להפעיל מעקב אחר המיקום במכשירים האלה.

מפרט GATT

יש להוסיף עוד מאפיין גנרי (GATT) לשירות ההתאמה המהירה עם הסמנטיקה הבאה:

מאפיין של שירות בהתאמה מהירה מוצפנת הרשאות מזהה ייחודי אוניברסלי (UUID)
פעולות בנושא משׂואות רשת (beacon) לא קריאה, כתיבה ושליחת התראות FE2C1238-8366-4814-8EB0-01DE32100BEA

טבלה 1: מאפייני שירות בהתאמה מהירה ל-FMDN.

אימות

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 מספר הגרסה הראשית של הפרוטוקול 0x01
1 - 8 מערך בייטים צופן חד-פעמי אקראי חד-פעמי משתנה

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

לאחר מכן, המחפש מחשב מפתח אימות חד-פעמי שישמש בבקשת כתיבה עוקבת. מפתח האימות מחושב כפי שמתואר בטבלאות 2 עד 5. בהתאם לפעולה המבוקשת, המחפש מוכיח ידע באחד או יותר מהמפתחות הבאים:

פעולות

הפורמט של הנתונים שנכתבו למאפיין מופיע בטבלאות 2 עד 5. כל אחת מהפעולות מתוארת בפירוט בהמשך החלק הזה.

8 תווים סוג הנתונים תיאור ערך
0 uint8 מזהה הנתונים
  • 0x00: קריאת פרמטרים של חיישן
  • 0x01: קריאת מצב הקצאת ההרשאות
  • 0x02: הגדרת מפתח זהות זמני
  • 0x03: ניקוי מפתח זהות זמני
1 uint8 אורך הנתונים משתנה
2 - 9 מערך בייטים מפתח אימות חד-פעמי 8 הבייטים הראשונים של HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - משתנה מערך בייטים נתונים נוספים
  • 0x00: לא רלוונטי
  • 0x01: לא רלוונטי
  • 0x02: 32 בייטים שהם מפתח הזיהוי הזמני, שמוצפן באמצעות מפתח החשבון AES-ECB-128. אם לספק כבר הוגדר מפתח זהות זמני, צריך לשלוח גם את 8 הבייטים הראשונים של SHA256(current ephemeral identity key || the last nonce read from the characteristic)
  • 0x03: 8 הבייטים הראשונים של SHA256(ephemeral identity key || the last nonce read from the characteristic)

טבלה 2: בקשה להקצאת הרשאות באמצעות משׂואת רשת (beacon).

8 תווים סוג הנתונים תיאור ערך
0 uint8 מזהה הנתונים 0x04: קריאת מפתח זהות זמני עם הסכמת המשתמש
1 uint8 אורך הנתונים 0x08
2 - 9 מערך בייטים מפתח אימות חד-פעמי 8 הבייטים הראשונים של HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length)

טבלה 3: בקשה לשחזור מפתח להקצאת משׂואות רשת (beacon).

8 תווים סוג הנתונים תיאור ערך
0 uint8 מזהה הנתונים
  • 0x05: צלצול
  • 0x06: קריאת מצב הצלצול
1 uint8 אורך הנתונים משתנה
2 - 9 מערך בייטים מפתח אימות חד-פעמי 8 הבייטים הראשונים של HMAC-SHA256(ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - משתנה מערך בייטים נתונים נוספים
  • 0x05: 4 בייטים שמציינים את מצב הצלצול, משך הצלצול ועוצמת הצלצול.
  • 0x06: לא רלוונטי

טבלה 4: בקשה לצלצול.

8 תווים סוג הנתונים תיאור ערך
0 uint8 מזהה הנתונים
  • 0x07: הפעלה של מצב הגנת מעקב לא רצויה
  • 0x08: השבתה של מצב הגנת מעקב לא רצויה
1 uint8 אורך הנתונים משתנה
2 - 9 מערך בייטים מפתח אימות חד-פעמי 8 הבייטים הראשונים של HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data)
10 - משתנה מערך בייטים נתונים נוספים
  • 0x07: בייט אחד של דגלי Control (אופציונלי)
  • 0x08: 8 הבייטים הראשונים של SHA256(ephemeral identity key || the last nonce read from the characteristic)

טבלה 5: בקשה לא רצויה להגנה על מעקב.

כתיבה מוצלחת של התראות הפעלה כפי שמפורט בטבלה 6.

התראות עם מזהה נתונים שאינו 0x05: שינוי מצב הצלצול צריכות להישלח לפני השלמת טרנזקציית הכתיבה שמפעילה את ההתראה, כלומר לפני שליחת ה-PDU של התגובה לבקשת הכתיבה.

8 תווים סוג הנתונים תיאור ערך
0 uint8 מזהה הנתונים
  • 0x00: קריאת פרמטרים של חיישן
  • 0x01: קריאת מצב הקצאת ההרשאות
  • 0x02: הגדרת מפתח זהות זמני
  • 0x03: ניקוי מפתח זהות זמני
  • 0x04: קריאת מפתח זהות זמני עם הסכמת המשתמש
  • 0x05: שינוי מצב הצלצול
  • 0x06: קריאת מצב הצלצול
  • 0x07: הפעלה של מצב הגנת מעקב לא רצויה
  • 0x08: השבתה של מצב הגנת מעקב לא רצויה
1 uint8 אורך הנתונים משתנה
2 - 9 מערך בייטים אימות פירוט לכל פעולה
10 - משתנה מערך בייטים נתונים נוספים
  • 0x00: 8 בייטים שמציינים את עוצמת השידור, ערך השעון, שיטת ההצפנה ויכולות הצלצול, AES-ECB-128 שהוצפנו באמצעות מפתח החשבון (ללא ריפוד)
  • 0x01: בייט אחד שמציין את מצב ההקצאה, ואחריו את המזהה הזמני הנוכחי (20 או 32 בייטים), אם רלוונטי
  • 0x04: 32 בייטים שהם מפתח הזיהוי הזמני, שמוצפן באמצעות מפתח החשבון AES-ECB-128
  • 0x05: 4 בייטים שמציינים את המצב החדש ואת הטריגר של השינוי
  • 0x06: 3 בייטים שמציינים את הרכיבים שמצלצלים באופן פעיל ואת מספר הדצילות שנותרו לצלצול
  • מזהי נתונים אחרים משתמשים בנתונים ריקים נוספים

טבלה 6: תגובת שירות משׂואות רשת (beacon).

טבלה 7 מפרטת את קודי השגיאות האפשריים של GATT שהוחזרו על ידי הפעולות.

קוד תיאור הערות
0x80 לא מאומת מוחזר בתגובה לבקשת כתיבה כשהאימות נכשל (כולל המקרה שבו נעשה שימוש ב-nonce ישן).
0x81 ערך לא חוקי מוחזר אם הוזן ערך לא חוקי, או שלנתונים שהתקבלו יש מספר לא צפוי של בייטים.
0x82 אין הסכמת המשתמש מוחזר בתגובה לבקשת כתיבה עם מזהה הנתונים 0x04: קריאה של מפתח הזהות הזמני עם הסכמת המשתמש כשהמכשיר לא במצב התאמה.

טבלה 7: קודי שגיאות GATT.

קריאת הפרמטר של האיתות

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

אם האימות נכשל, הספק מחזיר שגיאה לא מאומתת.

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 אספקת חשמל מכוילת ההספק המכויל כפי שהתקבל ב-0 מ' (ערך בטווח [ -100, 20]). מיוצג כמספר שלם חתום, ברזולוציה של 1dBm.
1 - 4 uint32 ערך השעון ערך השעון הנוכחי בשניות (סוף גדול).
5 uint8 בחירת עקומה העקומה האליפטית שמשמשת להצפנה:
  • 0x00 (ברירת מחדל): SECP160R1
  • 0x01: SECP256R1 (מחייב פרסום מורחב)
6 uint8 רכיבים מספר הרכיבים שיכולים לצלצל:
  • 0x00: מציין שהמכשיר לא יכול לצלצל.
  • 0x01: מציין שרק רכיב אחד יכול להשמיע צלצול.
  • 0x02: מציין ששני רכיבים, אוזניות שמאל ואוזן ימין, יכולים לצלצל בנפרד.
  • 0x03: מציין ששלושה רכיבים, אוזניות שמאל ואוזן ימין, והנרתיק, יכולים לצלצל בנפרד.
7 uint8 אפשרויות צלצול האפשרויות הנתמכות הן:
  • 0x00: בחירת עוצמת הצלצול לא זמינה.
  • 0x01: ניתן לבחור את עוצמת הצלצול. אם היא מוגדרת, הספק צריך לקבל 3 רמות של עוצמת קול ולטפל בהן כפי שצוין בפעולת הצלצול.
8-15 מערך בייטים מרווח אפס מרווח פנימי להצפנת AES.

הנתונים צריכים להיות מוצפנים באמצעות AES-ECB-128 עם מפתח החשבון שמשמש לאימות הבקשה.

מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data after encryption || 0x01).

קריאת מצב ההקצאה של איתות Bluetooth

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

אם האימות ייכשל, הספק יחזיר שגיאה לא מאומתת.

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 מצב הקצאת הרשאות ידנית מסכת ביטים עם הערכים הבאים:
  • Bit 1 (0x01): מגדירים אם מוגדר למכשיר מפתח זהות זמני.
  • Bit 2 (0x02): מגדירים אם מפתח האימות החד-פעמי שסופק תואם למפתח של חשבון הבעלים.
1-20 או 32 מערך בייטים מזהה זמני נוכחי 20 או 32 בייטים (בהתאם לשיטת ההצפנה שבה השתמשתם) שמציינים את המזהה הזמני הנוכחי שפורסם על ידי איתות Bluetooth, אם הוגדר למכשיר.

מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01).

הגדרה של מפתח זהות זמני

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

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

אם האימות ייכשל, הספק יחזיר שגיאה לא מאומתת.

אחרי הצלחה, מפתח הזהות הזמני ישוחזר על ידי פענוח באמצעות AES-ECB-128 באמצעות מפתח החשבון התואם. המפתח צריך להישמר במכשיר, ומנקודה זו הספק צריך להתחיל לפרסם פריימים של FMDN. מפתח הזיהוי הזמני החדש ייכנס לתוקף מיד לאחר סיום החיבור ל-BLE. הספק מודיע על תגובה מטבלה 6 עם מזהה הנתונים 0x02.

מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01).

ניקוי מפתח הזיהוי הזמני

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

  • מפתח האימות החד-פעמי שסופק תואם למפתח של חשבון הבעלים.
  • מפתח הזיהוי הזמני המגובב (hashed) תואם למפתח הזהות הזמני הנוכחי.

אם הספק לא מוקצה כחיישן FMDN או שהאימות נכשל, תוחזר שגיאה לא מאומתת.

לאחר השלמת הפעולה, הספק שוכח את המפתח ומפסיק לפרסם מסגרות FMDN. הספק מודיע על תגובה מטבלה 6 עם מזהה הנתונים 0x03. מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256(account key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01).

קריאה של מפתח הזהות הזמני בהסכמת המשתמש

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

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

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

  • מפתח השחזור המגובב תואם למפתח השחזור הצפוי.
  • המכשיר במצב שחזור EIK.

אם האימות ייכשל, הספק יחזיר שגיאה לא מאומתת.

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

לאחר הצלחה, הספק מודיע על תגובה מטבלה 6 עם מזהה הנתונים 0x04.

מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256(recovery key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01).

פעולת הצלצול

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 פעולת הצלצול מסכת ביטים עם הערכים הבאים:
  • Bit 1 (0x01): צלצול ימינה
  • ביט 2 (0x02): צלצול שמאלה
  • Bit 3 (0x04): מארז טבעת
  • 0xFF: השמעת צלצול לכל הרכיבים
  • 0x00: הפסקת הצלצול
2 - 1 uint16 חסימה זמנית הזמן הקצוב לתפוגת המדד 'בשניות'. הערך לא יכול להיות אפס ולא יכול להיות גדול משווה ל-10 דקות.
הספק משתמש בערך הזה כדי לקבוע כמה זמן הוא צריך לצלצל לפני שהוא משתיק את עצמו. זמן קצוב לתפוגה מבטל את זה שכבר פועל, אם רכיב כלשהו במכשיר כבר מצלצל.

אם פעולת הצלצול מוגדרת ל-0x00, המערכת תתעלם ממגבלת הזמן הקצוב לתפוגה.
3 uint8 עוצמת הקול
  • 0x00: ברירת מחדל
  • 0x01: נמוך
  • 0x02: בינוני
  • 0x03: גבוה
המשמעות המדויקת של הערכים האלה תלויה בהטמעה.

עם קבלת הבקשה, הספק מוודא ש:

  • מפתח האימות החד-פעמי שסופק תואם למפתח הצלצול.
  • המצב המבוקש תואם לרכיבים שיכולים לצלצל.

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

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 מצב צלצול
  • 0x00: התחיל
  • 0x01: ההפעלה או העצירה נכשלה (כל הרכיבים המבוקשים נמצאים מחוץ לטווח)
  • 0x02: נעצר (פסק זמן)
  • 0x03: הופסק (לחיצה על לחצנים)
  • 0x04: הופסק (בקשת GATT)
1 uint8 רכיבי צלצול מסכת ביטים של הרכיבים שמצלצלים באופן פעיל, כפי שמוגדר בבקשה.
3 - 2 uint16 חסימה זמנית הזמן שנותר לצלצול, בשניות. אם המכשיר הפסיק לצלצל, אמורה להחזיר את הערך 0x0000.

מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256(ring key, protocol major version number || the nonce used to initiate the ringing command || data ID || data length || additional data || 0x01).

אם המכשיר כבר נמצא במצב הצלצול המבוקש כשמתקבלת בקשה לצלצול או להפסקת הצלצול, הספק צריך לשלוח התראה עם מצב צלצול או עם מצב צלצול של 0x00: התחיל או 0x04: הופסק (בקשת GATT), בהתאמה. הבקשה הזו מבטלת את הפרמטרים הקיימים של המצב, וכך מאפשרת להאריך את משך הצלצול.

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

אחזור של מצב הצלצול של איתות Bluetooth

כדי לקבל את מצב הצלצול של איתות Bluetooth, המחפש מבצע פעולת כתיבה למאפיין שכוללת בקשה מטבלה 4 עם מזהה הנתונים 0x06. הספק מאמת שמפתח האימות החד-פעמי שסופק תואם למפתח הצלצול.

אם הספק לא מוקצה כחיישן FMDN או אם האימות נכשל, הספק מחזיר שגיאה לא מאומתת.

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 רכיבי צלצול הרכיבים שמצלצלים באופן פעיל, כפי שמוגדר בבקשת הצלצול.
2 - 1 uint16 חסימה זמנית הזמן שנותר לצלצול, בשניות. שימו לב שאם המכשיר לא מצלצל, יש להחזיר את הערך 0x0,00.

מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256 (ring key, protocol major version number || the last nonce read from the characteristic || data ID || data length || additional data || 0x01).

מצב הגנת מעקב לא רצויה

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

כדי להפעיל או להשבית את מצב ההגנה על המעקב הלא רצוי של איתות Bluetooth, המחפש מבצע פעולת כתיבה למאפיין שכוללת בקשה מטבלה 5 עם מזהה הנתונים 0x07 או 0x08 בהתאמה.

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

הספק בונה את פלח הנתונים באופן הבא:

8 תווים סוג הנתונים תיאור ערך
0 uint8 דגלי בקרה
  • 0x01: דילוג על אימות צלצול. כשההגדרה מוגדרת, בקשות צלצול לא מאומתות במצב הגנה על מעקב לא רצוי.
אם לא הוגדר סימון (הבייט הוא אפסים), אפשר להשמיט לגמרי את קטע הנתונים ולשלוח קטע נתונים ריק.
הסימונים תקפים רק עד שמצב ההגנה על מעקב לא רצוי מושבת.

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

כשמצב ההגנה על מעקב לא רצוי מופעל, איתות Bluetooth אמור להפחית את תדירות הסבב של כתובות ה-MAC הפרטיות לפעם אחת בכל 24 שעות. המזהה הזמני שפורסם אמור להמשיך להסתובב כרגיל. יש להגדיר את סוג המסגרת כ-0x41. המצב בא לידי ביטוי גם בקטע דגלים שעברו גיבוב.

כשמשביתים את מצב ההגנה על מעקב לא רצוי

הספק מאמת את הפרטים הבאים:

  • מפתח האימות החד-פעמי שסופק תואם למפתח ההגנה על המעקב הלא רצוי.
  • מפתח הזיהוי הזמני המגובב (hashed) תואם למפתח הזהות הזמני הנוכחי.

אם הספק לא מוקצה כחיישן FMDN או שהאימות נכשל, הספק יחזיר שגיאה לא מאומתת.

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

לאחר הצלחה, הספק מודיע על תגובה מטבלה 6 עם מזהה הנתונים 0x07 או 0x08.

מקטע האימות מוגדר כ-8 הבייטים הראשונים של HMAC-SHA256(unwanted tracking protection key, protocol major version number || the last nonce read from the characteristic || data ID || data length || 0x01).

פריימים שפורסמו

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

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

המבנה של מסגרת FMDN הוא.

8 תווים ערך תיאור
0 0x02 אורך
1 0x01 ערך של סוג הנתונים סימונים
2 0x06 נתוני סימונים
3 0x18 או 0x19 אורך
4 0x16 ערך של סוג נתוני שירות
5 0xAA UUID של שירות 16 ביט
6 0xFE ...
7 0x40 או 0x41 סוג מסגרת FMDN עם אינדיקציה לא רצויה של מצב הגנת מעקב
27.08 מזהה זמני 20 בייט
28 סימונים מגובבים (hashed)

טבלה 8: מסגרת FMDN שתומכת בעקומה של 160 ביט.

טבלה 9 מציגה את ההיסט של הבייטים והערכים של עקומה של 256 סיביות.

8 תווים ערך תיאור
0 0x02 אורך
1 0x01 ערך של סוג הנתונים סימונים
2 0x06 נתוני סימונים
3 0x24 או 0x25 אורך
4 0x16 ערך של סוג נתוני שירות
5 0xAA UUID של שירות 16 ביט
6 0xFE ...
7 0x40 או 0x41 סוג מסגרת FMDN עם אינדיקציה לא רצויה של מצב הגנת מעקב
39.8 מזהה זמני 32 בייטים
40 סימונים מגובבים (hashed)

טבלה 9: מסגרת FMDN שתומכת בעקומה של 256 ביט.

חישוב של מזהה זמני (EID)

קובץ אקראי נוצר על ידי AES-ECB-256 שמצפין את מבנה הנתונים הבא באמצעות מפתח הזהות הזמני:

8 תווים Field תיאור
0 - 10 מרווח ערך = 0xFF
11 K מעריך תקופת הסיבוב
12 - 15 TS[0]...TS[3] מונה זמן לאיתות, בפורמט 32 ביט בסיומת גדולה. הביטים הנמוכים ביותר של K נמחקות.
16 - 26 מרווח ערך = 0x00
27 K מעריך תקופת הסיבוב
28 - 31 TS[0]...TS[3] מונה זמן לאיתות, בפורמט 32 ביט בסיומת גדולה. הביטים הנמוכים ביותר של K נמחקות.

טבלה 10: בניית מספר פסאודו-אקראי.

תוצאת החישוב היא מספר של 256 ביט, שנקרא r'.

בשאר החישובים נעשה שימוש ב-SECP160R1 או ב-SECP256R1 לפעולות קריפטוגרפיות עם עקומה אליפטית. אפשר לעיין בהגדרות העקומות במאמר SEC 2: פרמטרים מומלצים של דומיין עקומה אליפטי, שמגדירים את Fp, n ואת G המומלצים הבא.

r' מחושב עכשיו לשדה הסופי Fp על ידי חישוב r = r' mod n. לבסוף, מחשבים את R = r * G, שהיא נקודה על העקומה שמייצגת את המפתח הציבורי בשימוש. איתות Bluetooth מפרסם את Rx, שהיא הקואורדינטה x של R, בתור המזהה הזמני שלו.

דגלים מגובבים

שדה הדגלים המגובבים מחושב באופן הבא (יש הפניה לסיביות מהמשמעותית ביותר עד הנמוכה ביותר):

  • ביטים 0-4: שמורים (מוגדרים לאפסים).
  • Bits 5-6 מציינים את רמת הטעינה של הסוללה במכשיר באופן הבא:
    • 00: חיווי רמת הטעינה לא נתמך
    • 01: רמת סוללה רגילה
    • 10: רמת סוללה נמוכה
    • 11: רמת טעינה נמוכה מאוד של הסוללה (בקרוב נדרשת החלפת סוללה)
  • ביט 7 מוגדר ל-1 אם איתות Bluetooth נמצא במצב של הגנה מעקב לא רצויה, ו-0 אחרת.

כדי להפיק את הערך הסופי של הבייט הזה, צריך לבצע לו xor עם הבייט הכי פחות משמעותי של SHA256(r).

שימו לב שצריך להתאים את ה-r לגודל העקומה. אם הייצוג הוא פחות מ-160 או 256 ביטים, כדאי להוסיף אפסים בתור ביטים המשמעותיים ביותר. אם הייצוגים האלה גדולים מ-160 או 256 ביטים, צריך לחתוך אותם.

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

הצפנה עם EID

כדי להצפין הודעה m, צופה (לאחר שקרא את Rx מאיתות Bluetooth) צריך לבצע את הפעולות הבאות:

  1. בוחרים מספר אקראי s ב-Fp, כפי שמוגדר בקטע חישוב EID.
  2. חישוב של S = s * G.
  3. מחשבים את R = (Rx, Ry) על ידי החלפה במשוואת העקומה ובחירת ערך שרירותי של Ry מתוך התוצאות האפשריות.
  4. מחשבים את מפתח AES של 256-ביט k = HKDF-SHA256((s * R)x), כאשר (s * R)x היא הקואורדינטה x של תוצאת הכפלת העקומה. לא צוין מלח.
  5. מגדירים ל-URx ול-LRx את ה-80 ביט העליונות והתחתונות של Rx, בהתאמה, בפורמט Big-andian. באופן דומה, מגדירים את USx ואת LSx עבור S.
  6. חישוב של nonce = LRx || LSx.
  7. חישוב של (m’, tag) = AES-EAX-256-ENC(k, nonce, m).
  8. שליחת (URx, Sx, m’, tag) לבעלים, כנראה דרך שירות מרוחק ולא מהימן.

פענוח ערכים שהוצפנו באמצעות EID

הלקוח של הבעלים, שברשותו ה-EIK ומעריך תקופת הסבב, מפענח את ההודעה באופן הבא:

  1. בהינתן URx, מקבלים את הערך המונה של זמן האיתות שעליו מבוסס URx. כדי לעשות זאת, הלקוח של הבעלים מחשוב את ערכי Rx עבור ערכי המונה של זמן משׂואת רשת (beacon) בעבר ובעתיד הקרוב.
  2. בהתאם לערך המונה של זמן האיתות שעליו מבוסס URx, מחשבים את הערך החזוי של r כפי שמוגדר בקטע חישוב ה-EID.
  3. מחשבים את R = r * G ומאמתים התאמה לערך של URx שסופק על ידי הביטח.
  4. מחשבים את S = (Sx, Sy) על ידי החלפה במשוואת העקומה ובחירת ערך שרירותי של Sy מתוך התוצאות האפשריות.
  5. חישוב k = HKDF-SHA256((r * S)x) כאשר (r * S)x היא הקואורדינטה x של תוצאת הכפלת העקומה.
  6. חישוב של nonce = LRx || LSx.
  7. חישוב של m = AES-EAX-256-DEC(k, nonce, m’, tag).

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

כדי לפרסם מסגרות FMDN צריך להשתמש בכתובת BLE ניתנת לפענוח (RPA) או לכתובת BLE שלא ניתנת לפתרון (NRPA). נדרש RPA למכשירי LE Audio (LEA) ומומלץ למכשירים אחרים, חוץ מתגי איתור שלא משתמשים בקישור.

מודעות בהתאמה מהירה, פרסומות FMDN וכתובות BLE מתאימות צריכות לעבור בסבב בו-זמנית. הסיבוב צריך להתרחש כל 1,024 שניות בממוצע. הנקודה המדויקת שבה האיתות מתחיל לפרסם את המזהה החדש חייבת להיות אקראית בחלון.

הגישה המומלצת לסידור אקראי של זמן הסיבוב היא להגדיר את זמן הסיבוב הבא (אם לא בוצעה פעולה אקראית), בתוספת גורם זמן אקראי חיובי בטווח של 1 עד 204 שניות.

כשהמכשיר נמצא במצב הגנת מעקב לא רצויה, צריך לתקן את כתובת BLE של הפרסומת FMDN, אבל ה-RPA של פרסום שלא ניתן לגלות את FP (כמו התאמה מהירה) חייב להמשיך להסתובב. אפשר להשתמש בכתובות שונות עבור הפרוטוקולים השונים.

התאוששות מאובדן מתח

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

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

הנחיות להטמעת ההתאמה המהירה

בקטע הזה מתוארים היבטים מיוחדים של הטמעת ההתאמה המהירה בספקים שתומכים ב-FMDN.

הנחיות ספציפיות לתגי איתור

  • אם הספק הותאם אבל לא הוקצה FMDN תוך 5 דקות (או אם הוחל עדכון OTA בזמן שהמכשיר מותאם אבל לא הוקצה FMDN), הספק צריך לחזור להגדרות המקוריות שלו ולנקות את המפתחות המאוחסנים של החשבון.
  • אחרי ההתאמה של הספק, הוא לא צריך לשנות את כתובת ה-MAC שלו עד להקצאת FMDN או עד שיחלפו 5 דקות.
  • אם מוחקים מהמכשיר את מפתח הזהות הזמני, המכשיר צריך לבצע איפוס להגדרות המקוריות ולנקות גם את מפתחות החשבון שנשמרו.
  • הספק אמור לדחות ניסיונות רגילים של התאמת Bluetooth ולקבל רק התאמה מהירה.
  • הספק צריך לכלול מנגנון שמאפשר למשתמשים להפסיק את הפרסום באופן זמני בלי לאפס את המכשיר להגדרות המקוריות (לדוגמה, לחיצה על שילוב של לחצנים).
  • במקרה של אובדן מתח, המכשיר אמור לפרסם פריימים שלא ניתן לגלות בעזרת ההתאמה המהירה, עד להפעלה הבאה של הפרמטרים של חיישן הקריאה. כך המחפש יכול לזהות את המכשיר ולסנכרן את השעון גם אם מתרחשת סטייה משמעותית בשעון.
  • כשמפרסמים מסגרות עם התאמה מהירה שלא ניתן לגלות, אסור להפעיל אינדיקציות לממשק המשתמש.
  • אסור לפרסם פריימים שניתנים לגילוי בהתאמה מהירה אם הספק מוקצה ל-FMDN.
  • אסור לספק לספק פרטים מזהים באופן לא מאומת (למשל שמות או מזהים).

הנחיות ספציפיות למכשירי Bluetooth בגרסה הקלאסית

בקטע הזה מתוארים היבטים מיוחדים של מכשירי Bluetooth קלאסיים שתומכים ב-FMDN.

הקצאת FMDN למכשירים שכבר מותאמים

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

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

תמיכה בשתי הגישות מגדילה את הסיכוי שהמשתמש יוכל להקצות את המכשיר ל-FMDN.

שידור ההודעות להתאמה מהירה

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

הספק צריך לשלוח הודעות על פרטי המכשיר בכל פעם שנוצרת ערוץ RFCOMM לזרימת ההודעות.

גרסת הקושחה (קוד פרטי המכשיר 0x09) ואפשרות המעקב

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

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

8 תווים סוג הנתונים תיאור ערך
0 uint8 אירוע מידע מהמכשירים שלך 0x03
1 uint8 גרסת הקושחה 0x09
3 - 2 uint16 אורך הנתונים הנוסף משתנה
var מערך בייטים מחרוזת גרסה משתנה

טבלה 11: אירוע עם מידע מהמכשירים שלך: גרסת הקושחה המעודכנת.

עם קבלת הבקשה לעדכון היכולת (0x0601), אם הספק הפעיל תמיכה במעקב FMDN, הוא אמור להגיב כפי שמוצג בטבלה 12.

8 תווים סוג הנתונים תיאור ערך
0 uint8 אירוע של סנכרון יכולת המכשיר 0x06
1 uint8 מעקב FMDN 0x03
3 - 2 uint16 אורך הנתונים הנוסף 0x0007
4 uint8 מצב הקצאת FMDN 0x00 אם לא הוקצה 0x01, אם הוקצה 0x01 על ידי חשבון כלשהו
5 - 10 מערך בייטים כתובת ה-BLE MAC הנוכחית של המכשיר משתנה

טבלה 12: אירוע של סנכרון יכולות המכשיר: נוספה יכולת מעקב.

המזהה הזמני הנוכחי (קוד פרטי המכשיר 0x0B)

הספק יכול להשתמש במזהה הזמני הנוכחי (קוד 0x0B) כדי לדווח על ערכי ה-EID והשעון הנוכחיים כשהספק מוקצה ל-FMDN, כדי לסנכרן את המחפש במקרה של תזוזה בשעון (לדוגמה, בגלל סוללה מרוקנת). אחרת, המחפש יוצר חיבור יקר יותר ואמין פחות למטרה הזו.

8 תווים סוג הנתונים תיאור ערך
0 uint8 אירוע מידע מהמכשירים שלך 0x03
1 uint8 מזהה זמני נוכחי 0x0ב
3 - 2 uint16 אורך הנתונים הנוסף 0x0018 או 0x0024
4 - 7 מערך בייטים ערך השעון דוגמה: 0x13F9EA80
8 עד 19 או 31 מערך בייטים מספר ה-EID הנוכחי דוגמה: 0x1122334455667788990011223344556677889900

טבלה 13: אירוע של פרטי המכשיר: סנכרון השעון.

איפוס להגדרות המקוריות

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

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

מניעת מעקב לא רצוי

מכשירי FMDN שאושרו צריכים לעמוד גם בדרישות בגרסת ההטמעה של המפרט בפלטפורמות השונות זיהוי כלים למעקב אחר מיקומים לא רצויים (DULT).

הנחיות רלוונטיות הספציפיות ל-FMDN להתאמה למפרט DULT:

  • כל מכשיר תואם FMDN חייב להיות רשום ב'מסוף המכשירים בקרבת מקום', ולהפעיל את היכולת 'איפה המכשיר שלי'.
  • במכשיר צריך להטמיע את השירות ואת המאפיינים של פריטי האביזר שאינם בעלים, כפי שהוגדרו בגרסת ההטמעה של מפרט DULT, כולל הפעולות של פרטי אביזרים ואמצעי בקרה של משתמשים שאינם בעלים.
  • במהלך תקופת התאימות לאחור, כפי שמוגדר במפרט DULT, אין שינויים בפריים שפורסם כפי שמוגדר במסמך הזה.
  • 'מצב הגנת מעקב לא רצויה' המוגדר במסמך זה ממופה ל'מצב מופרד' המוגדר במפרט DULT.
  • הנחיות להטמעת קודי התפעול של פרטי אביזר:
    • Get_Product_Data צריך להחזיר את מזהה המודל שסופק במסוף, ללא תוספות בהתאם לדרישה של 8 בייטים. לדוגמה, מזהה המודל 0xFFFFFF מוחזר כ-0x0000000000FFFFFF.
    • הערכים Get_Manufacturer_Name ו-Get_Model_Name צריכים להתאים לערכים שצוינו במסוף.
    • האפשרות Get_Accessory_Category יכולה להחזיר את הערך הגנרי של "Location tracker" אם אין קטגוריה אחרת שמתאימה יותר לסוג המכשיר.
    • חובה לציין ב-Get_Accessory_Capabilities תמיכה בצלצול ובחיפוש מזהה BLE.
    • Get_Network_ID צריך להחזיר את מזהה Google (0x02).
  • הנחיות להטמעת ה-opcode Get_Identifier:
    • הפעולה אמורה להחזיר תגובה חוקית רק למשך 5 דקות אחרי שהמשתמש הפעיל את מצב 'זיהוי', הדורש שילוב של לחיצות לחצנים. אות ויזואלי או אודיו צריך לציין למשתמש שהספק נכנס למצב הזה. צריך לספק ל-Google את ההוראות הספציפיות למודל להפעלת המצב הזה כדרישה לאישור, ולפחות 10 ימים לפני כל עדכון או שינוי של ההוראות.
    • התגובה נוצרת באופן הבא: 10 הבייטים הראשונים של המזהה הזמני הנוכחי, ואחריהם 8 הבייטים הראשונים של HMAC-SHA256(recovery key, the truncated current ephemeral identifier).
  • הנחיות להטמעת קוד התפעול Sound_Start:
    • הפקודה אמורה להפעיל צלצול בכל הרכיבים הזמינים.
    • צריך להשתמש בנפח המרבי הנתמך.
    • משך הזמן המומלץ לצלצול הוא 12 שניות.
  • תגי איתור חייבים לכלול מנגנון שמאפשר למשתמשים להפסיק את הפרסום באופן זמני, בלי לאפס את המכשיר להגדרות המקוריות (לדוגמה, לחיצה על שילוב של לחצנים).
    • יש לתעד את הוראות ההשבתה בכתובת URL שגלויה לכולם, ולשלוח אותן ל-Google כדרישה לקבלת אישור. בנוסף, צריך לשלוח את ההוראות לפחות 10 ימים לפני כל עדכון או שינוי של ההוראות.
    • כתובת ה-URL צריכה לתמוך בלוקליזציה. בהתאם ללקוח, השפה תסופק כפרמטר של שאילתה ("hl=en") או באמצעות כותרת ה-HTTP " accept-language".

הנחיות בנושא פרוטוקול להחלפה

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

עדכוני קושחה

השותף צריך לנהל את התהליך וההפצה של עדכוני OTA באמצעות תהליך העבודה שלו לנייד או לאפליקציית האינטרנט.

תאימות

כדי להשתמש ברשת 'איפה המכשיר שלי' צריך להפעיל שירותי מיקום ו-Bluetooth. יש צורך בשירות סלולרי או חיבור לאינטרנט. האפליקציה פועלת ב-Android מגרסה 9 ואילך ובמדינות מסוימות, עבור משתמשים שעומדים בדרישות הגיל.

יומן שינויים

גרסת FMDN תאריך תגובה
v1 גרסה ראשונית של מפרט FMDN לגישה מוקדמת.
v1.1 פברואר 2023
  • הוספנו אינדיקציה לטקסט ללא הצפנה של מצב ההגנה של המעקב הלא רצוי.
  • נוספה אפשרות לדלג על האימות של בקשות לצלצול במצב הגנה לא רצויה על המעקב.
v1.2 אפריל 2023
  • ההגדרה של AK של בעלים עודכנה.
  • נוספה המלצה להתאוששות מאובדן מתח בתגי האיתור.
  • נוספה הבהרה לגבי רנדומיזציה של כתובות MAC.
  • נוספה הבהרה לגבי הרוטציה של כתובות MAC במצב הגנת מעקב לא רצויה.
  • נוספה הנחיה לגבי הדרך להשבית תג איתור.
v1.3 דצמבר 2023
  • הוספנו הבהרה לגבי פרטים מזהים שנחשפים על ידי תגי מיקום.
  • נוספה דרישה להטמיע את המפרט של מניעת מעקב לא רצויה.
  • נוספו הנחיות למכשירים עם פרוטוקול להחלפה.