מכשיר Bluetooth Low Energy (BLE)
ההטמעה של שירות ההתאמה המהירה של Google (GFPS) למכשירי BLE תואמת למפרט הליבה של Bluetooth בגרסה 4.2 ומעלה.
התוספת הבאה למפרט של התכונה 'התאמה מהירה' תאפשר תמיכה במכשירי Low Energy (LE) בלבד ובמכשירי Low Energy Audio (LEA) ב-GFPS.
רמות התאימות
מילות המפתח shall, must, will, should, may ו-can שמוזכרות במפרט מוסברות בהמשך:
| מונח | תיאור |
|---|---|
| צריך | is required to (נדרש כדי) – משמש להגדרת דרישות. |
| חובה | משמש לציון: תוצאה טבעית של דרישה מחייבת שצוינה קודם או הצהרה עובדתית שאין עליה עוררין (הצהרה שתמיד נכונה, ללא קשר לנסיבות). |
| צוואה | it is true that – משמש רק בהצהרות עובדתיות. |
| should | מומלץ – משמש לציון שאחת מתוך כמה אפשרויות מומלצת כמתאימה במיוחד, אבל לא נדרשת. |
| מאי | is permitted to – משמש לאישור אפשרויות. |
| כן | יכול/ה – משמש לציון קשר סיבתי בין שני חלקי משפט. |
מאפיין ההתאמה שמבוסס על מפתח
הודעה ממי שמחפש עבודה למי שמציע עבודה
בבקשה הגולמית type 0x00 של מאפיין ההתאמה שמבוסס על מפתח נעשה שימוש בביט 4 כדי לציין אם המכשיר התומך תומך במפרט מכשיר BLE, ובביט 5 כדי לציין אם המכשיר התומך תומך בLE Audio.
| Octet | סוג הנתונים | תיאור | ערך | חובה? |
|---|---|---|---|---|
| 0 | uint8 |
סוג ההודעה | 0x00 = בקשת התאמה שמבוססת על מפתח |
חובה |
| 1 | uint8 |
סימונים
|
משתנה | חובה |
| 2 - 7 | uint48 |
אחת מהאפשרויות הבאות:
|
משתנה | חובה |
| 8 - 13 | uint48 |
כתובת ה-BR/EDR של המחפש | משתנה | הערך הזה מוצג רק אם ביט 1 או 3 של הדגלים מוגדר |
| n – 15 | ערך אקראי (salt) | משתנה | חובה |
הודעה מהספק למי שמחפש שירות
כשביט 4 של הבקשה מוגדר, אפשר להשתמש בהודעת התגובה החדשה type 0x02 למאפיין של התאמה מבוססת-מפתח כדי לספק אפשרויות נוספות של שיוך למכשיר המחפש.
| Octet | סוג הנתונים | תיאור | ערך |
|---|---|---|---|
| 0 | uint8 |
סוג ההודעה | 0x02 = תשובה מורחבת להתאמה מבוססת-מפתח |
| 1 | uint8 |
סימונים
|
משתנה |
| 2 | uint8 |
מספר הכתובות של הספק (בגרסה הנוכחית, המספר הוא 1 או 2, כי אנחנו צריכים לשנות את מצב ההצפנה בבלוק ל-AES-CTR אם המספר הוא 3 ומעלה) |
משתנה |
| 3 עד 8 או 3 עד 14 |
|
משתנה | |
| 9 עד 15 או 15 | ערך אקראי (salt) | משתנה |
ספק שתומך במפרט של מכשיר BLE צריך לקרוא את ביט 4 ואת ביט 5 כדי להבין את היכולות של המכשיר המחפש
- אם הביט הרביעי הוא 0, הספק צריך להתעלם מהביט החמישי ולהשיב בפורמט
type 0x01 - כשהערך של ביט 4 הוא 1,
- אם הספק תומך רק ב-LE, הוא צריך להגיב עם
type 0x02כדי לציין העדפה לחיבור LE. - במקרה של ספק במצב כפול, הוא יכול להגיב עם
type 0x02כדי לציין העדפה ל-BR/EDR או ל-LE bonding.
- אם הספק תומך רק ב-LE, הוא צריך להגיב עם
- במקרים של ספק במצב כפול של LE Audio (LEA), אפשר לעיין בדוגמה: צימוד לספק במצב כפול של LEA
מאפיין של Message Stream PSM (Protocol Service Multiplexor)
כדי לתמוך בהזרמת הודעות למכשירי BLE, התכונה 'התאמה מהירה' תיצור ותתחזק ערוץ BLE L2CAP לשליחה ולקבלה של הודעות. התאמה מהירה שרת L2CAP צריך להטמיע בקרה על זרימת נתונים מבוססת-קרדיט LE.
המאפיין הזה מאפשר למכשיר המחפש לקרוא את ערך ה-PSM, ואז ליצור חיבור L2CAP מאובטח לפי ערך ה-PSM.
| מאפיין שירות ההתאמה המהירה | מוצפן | הרשאות | מזהה ייחודי אוניברסלי (UUID) |
|---|---|---|---|
| Message Stream PSM | כן | קריאה | FE2C1239-8366-4814-8EB0-01DE32100BEA |
| Octet | סוג הנתונים | תיאור | ערך |
|---|---|---|---|
| 0 | uint8 |
מדינה (State)
|
משתנה |
| 1 - 2 | uint16 |
הערך של PSM צריך להיות בטווח שבין 0x80 ל-0xFF | משתנה |
הערה: ל-TWS יש שני רכיבים: ראשי ומשני. התפקיד של הרכיבים האלה ניתן להחלפה בתנאים מסוימים. נניח ש-A הוא הרכיב הראשי ו-B הוא הרכיב המשני. בגלל ניקוז הסוללה ברכיב A, רכיב B צריך לקחת את התפקיד של הרכיב הראשי , והתרחיש הזה נקרא role switch.
אחרי role switch, אם הספק לא יכול לטפל בזרם ההודעות של ההתאמה המהירה, הוא צריך לנתק באופן יזום את חיבור L2CAP הקיים. אחרי כן, רכיב החיפוש של 'התאמה מהירה' יכול ליצור מחדש את החיבור של זרם ההודעות L2CAP עם הרכיב הראשי החדש.
מאפיין נוסף של מפתח גישה
המאפיין הזה נועד לספק הגנה מפני התקפות MITM ברכיבים הנוספים.
CSIS Fake Member MITM Protection
התכונה 'התאמה מהירה' דורשת הגנה מפני התקפות MITM כחלק מתהליך ההתאמה. מכיוון ש-CSIS לא מספק הגנה מפני מתקפות MITM, צריך להרחיב את העיצוב הנוכחי של FP למספר רכיבים כדי לספק הגנה מפני מתקפות MITM ברכיבים הנוספים.
הגדרת מאפיין
| מאפיין שירות ההתאמה המהירה | מוצפן | הרשאה | מזהה ייחודי אוניברסלי (UUID) |
|---|---|---|---|
| מפתח גישה נוסף | כן | קריאה,כתיבה,שליחת הודעות | FE2C123A-8366-4814-8EB0-01DE32100BEA |
הודעות
פורמט ההודעה חל על פעולות קריאה, כתיבה והתראה.
פורמט נתונים מוצפן
הנתונים המוצפנים נשלחים באמצעות חיבור GATT של התכונה 'התאמה מהירה'.
| Octet | סוג הנתונים | תיאור | ערך |
|---|---|---|---|
| 0-15 | uint128 | בלוק נוסף של מפתחות גישה מוצפנים | משתנה |
פורמט של נתונים גולמיים
אחרי שמפענחים את הנתונים המוצפנים באמצעות סוד לשימוש עם טוקן צרכן, הפורמט הוא כמו בדוגמה הבאה
| Octet | סוג הנתונים | תיאור | ערך |
|---|---|---|---|
| 0 | uint8 | סוג ההודעה | אחת מהאפשרויות:
|
| 1-3 | uint24 | מפתח גישה בן 6 ספרות | משתנה |
| 4-9 | uint48 | כתובת רכיב היעד של ה-bonding | משתנה |
| 10 | uint8 | קוד סטטוס, נעשה בו שימוש רק בפעולת קריאה | אחת מהאפשרויות הבאות:
|
| 11-15 | ערך אקראי (salt) | משתנה |
הרכיב הראשי (הרכיב הראשון שמתחבר) הוא הגשר בין התכונה 'התאמה מהירה' לבין רכיבי ההתאמה הנוספים. המאפיין צריך לעמוד בהנחיות הבאות:
- כשספק מקבל בקשת כתיבה ממכשיר שמחפש מכשירים להתאמה מהירה, הוא צריך
- הגדרת הכתובת של הרכיב שמבצעים בו איגוד
- שליחת מפתח הגישה לרכיב שמבצע את ההתאמה
- הגדרת קוד הסטטוס למצב המתנה, 0x01
- כשספק מקבל בקשה לאישור קריאה לפני שהוא מקבל מפתח גישה מהרכיב שמקושר אליו, הוא צריך להחזיר הודעה עם
- מפתח גישה, כל ערך
- הכתובת של הרכיב שמקשרים
- קוד סטטוס בהמתנה, 0x01
- לפני שהספק שולח התראה למכשיר שמחפש התאמה מהירה, הוא מגדיר את התוצאה
של בקשת הקריאה עם
- מפתח גישה מהרכיב שמבצעים איתו שיוך
- הכתובת של הרכיב שמקשרים
- קוד סטטוס של הצלחה, 0x00
- אם יש שגיאה שלא ניתן לתקן בצד הספק, צריך להגדיר את התוצאה
- מפתח גישה, כל ערך
- הכתובת של הרכיב שמקשרים
- קוד סטטוס הכשל, 0x02
פרטים נוספים זמינים בתרשים MITM 1 ובתרשים MITM 2.
דרישות לגבי מכשירי LE
LE Advertising
במצב גלוי או במצב לא גלוי, הספק ישתמש ב-RPA כדי לפרסם נתונים של Fast Pair.
יכולת הדבקה
במכשירים עם תמיכה ב-LE, מכשיר החיפוש צריך ליצור שיוך לחיבור ה-LE הקיים. אחרי שעוברים את האימות של ההתאמה המבוססת על מפתח של התאמה מהירה, הספק צריך לאפשר שיוך עם RPA ולהגדיר את יכולת הקלט/פלט ל-DisplayYesNo לצורך אימות של מפתח גישה להתאמה מהירה.
דרישות לגבי מכשירים של רשויות אכיפת חוק
LEA Advertising
למכשירים עם מצב כפול: במצב גילוי, הספק יפרסם נתוני התאמה מהירה עם כתובת הזהות. במצב לא ניתן לגילוי, הספק יפרסם נתוני התאמה מהירה באמצעות RPA. מומלץ מאוד להשתמש בפרסום מדור קודם (BT 4.2) כדי לתמוך במכשירים ישנים לצורך תאימות לאחור. צריך לשנות את מפתח ה-IRK בכל פעם שמבצעים איפוס להגדרות המקוריות במכשיר.
במכשירים שאינם במצב כפול: במצב גלוי או במצב לא גלוי, הספק ישתמש בפרסום מורחב (BT 5.0) עם RPA כדי לפרסם נתונים של FastPair.
הפרסום של LE Connectable שמכיל נתוני שירות FP צריך לכלול CAS UUID בהתאם לדרישות של Bluetooth Adapter Profile (BAP 1.0.1) ושל Common Audio Profile.
הספק יכול לציין יכולת LEA על ידי הכללת ה-UUID של CAS (0x1853) בנתוני השירות (סוג AD 0x16) או ב-UUID של מחלקת השירותים (16 ביט) (סוג AD 0x02 או 0x03), ללא קשר למצב הגילוי.
במקרה של מודעות שלא ניתן לגלות, אם אין מספיק מקום במודעות מדור קודם בגלל הכללה של נתוני סוללה ו-SASS, חובה לכלול את ה-UUID של CAS בתגובה לסריקה.
יכולת שילוב של LEA
ה-Seeker צריך ליצור קשר עם חיבור ה-LE הקיים. אחרי שעוברים אימות של התאמה מבוססת-מפתח של התאמה מהירה, ספק במצב כפול צריך לאפשר שיוך עם כתובת זהות ו-RPA, וספק שלא במצב כפול צריך לאפשר שיוך עם RPA ולהגדיר את יכולת הקלט/פלט ל-DisplayYesNo לאימות של מפתח גישה להתאמה מהירה.
ערוץ תקשורת פנימי בין רכיבים
החיבור הקיים של GATT נשמר כדי לבצע הגנה מפני התקפות MITM על הרכיבים הנוספים. הרכיב הראשי המצורף יטפל במסירת הודעות בין מכשיר החיפוש של התכונה 'התאמה מהירה' לבין הרכיבים הנותרים שלו.
התקשורת הפנימית משמשת ל-Initial Pair ול-Subsequent Pair
- אם הליך ההתאמה מבוסס-המפתח עובר ברכיב הראשי, הרכיב הראשי ישלח הודעה כדי לשנות את יכולת הקלט/פלט של הרכיבים הנותרים שלו
- כשמסיימים את ההתאמה המהירה, הרכיב הראשי שולח הודעה לאיפוס יכולת הקלט/פלט של הרכיבים הנותרים שלו
- כשמריצים הליך נוסף של מפתח גישה, הרכיב הראשי צריך לטפל במסירת מפתחות גישה בין מכשיר שמחפש התאמה מהירה לבין הרכיבים הנותרים שלו.
הגיע הזמן לשנות את יכולת הקלט/פלט
- שינוי יכולת הקלט/פלט ל-DisplayYesNo כשנוהל ההתאמה מבוסס-המקשים עבר
- אם למכשיר יש כמה רכיבים, צריך להגדיר את כל הרכיבים לערך DisplayYesNo
- יוצא מן הכלל: הספק לא ישנה את היכולת של IO ל-DisplayYesNo אם
Retroactive Pair, שביט 3 של בקשת השיוך מבוססת המפתח שלו מוגדר כ-1. ראו הודעה מהמבקש לספק
- שינוי יכולת הקלט/פלט להגדרת ברירת המחדל
- התאמה ראשונית
- אם החיבור ב-LE מנותק, צריך לסיים את סשן ההתאמה המהירה
- אחרי שהמכשיר הראשי משויך, אם לא מתקבלת בקשת כתיבה נוספת של מפתח גישה תוך 15 שניות, הסשן של ההתאמה המהירה מסתיים
- אחרי קבלת בקשת כתיבה נוספת של מפתח גישה, אם הרכיב שמבוצעת אליו התאמה לא מותאם תוך 15 שניות, סשן ההתאמה המהירה מסתיים
- אחרי שכל הרכיבים משויכים, אם לא מתקבלת בקשת כתיבה של מפתח החשבון תוך 15 שניות, הסשן של צימוד מהיר מסתיים.
- אחרי שמתקבלת בקשת כתיבה של מפתח החשבון, מגדירים זמן קצוב לתפוגה של 15 שניות לסיום הסשן של התאמה מהירה
- התאמה הבאה
- אם החיבור ב-LE מנותק, צריך לסיים את סשן ההתאמה המהירה
- אחרי שהמפתח הראשי משויך, אם לא מתקבלת בקשת כתיבה נוספת של מפתח גישה תוך 15 שניות, הסשן של צימוד מהיר מסתיים.
- אחרי קבלת בקשת כתיבה נוספת של מפתח גישה, אם הרכיב שמבוצעת אליו התאמה לא מותאם תוך 15 שניות, סשן ההתאמה המהירה מסתיים
- כשכל הרכיבים מחוברים, מסיימים את סשן ההתאמה המהירה.
- התאמה ראשונית
הסתרת סימון בממשק המשתמש
אם האוזניות לא מוכנות לצימוד, הספק ישתמש ב-type 0b0010 כדי להגדיר הסתרה של אינדיקציה בממשק המשתמש לגבי נתוני מפתח החשבון, כדי להודיע למכשיר המחפש לא להציג ממשק משתמש לצימוד בהמשך (ראו Advertising payload: Fast Pair Account Data).
דרישות לגבי מכשירים עם LE Audio
דרישות Bluetooth
המלצות לאוזניות LE Audio ל-Android
תמיכה ב-CTKD
במכשיר עם מצב כפול, חובה להשתמש ב-CTKD מ-LE ל-BR/EDR בהתאם לדרישות של BAP.
הודעה על טירגוט
מכשיר היקפי צריך להשתמש בהודעה ממוקדת כדי לבקש חיבור ממכשיר מרכזי משויך. ההגדרה של הודעות ממוקדות מופיעה ב-BAP וב-CAP לניהול חיבורים בהתאם לטבלה 8.4 (עמוד 48 מתוך 58) ב-CAP 1.0.
תמיכה בשרת GATT EATT
פרוטוקול EATT מאפשר למכשיר המרכזי לשלוח כמה עסקאות GATT במקביל כשהמכשיר מותאם. במכשיר שתומך ב-CSIP, הביצועים של חיבור הפרופיל ישתפרו, ואז תתחיל בקרוב פעולת הצימוד של CSIP לאוזניות האחרות.
שמירה במטמון של GATT (מומלץ מאוד)
אם הספק הוא לא מכשיר יחיד אלא קבוצה מתואמת עם הטמעה של CSIP, כדי לצמצם את מספר הפעמים שמתבצעת בדיקת זמינות של שירותים ולזרז את החיבור, הספק צריך להטמיע את GATT Caching שמוגדר ב-Bluetooth 5.1.
דרישות ההתאמה המהירה
LE Advertising
במצב גלוי או במצב לא גלוי, אם למכשיר יש כמה רכיבים, נתוני ההתאמה המהירה ישודרו על ידי הרכיב הראשי. אם המכשיר לא מוכן להתאמה הבאה, הרכיב המשני יכול לפרסם נתונים של התאמה מהירה לתכונות מתקדמות. ראו הסתרת אינדיקציה בממשק המשתמש.
חשיפה של שירות GATT
מסד הנתונים של GATT צריך להיות זהה לכל חיבורי GATT של LE transport. שירות LE Audio (0x184E) צריך להיכלל במסד הנתונים של GATT בחיבור של התאמה מהירה.
דוגמה: התאמה לספק במצב כפול של LEA
תרחיש 1 – כשכלי החיפוש לא תומך ב-LEA
הספק צריך לספק תאימות לאחור למחפש שלא תומך ב-LEA.
רכיבים
- ספק: A2DP/HFP/LEA
- מכשיר מחפש: A2DP/HFP
התנהגות צפויה בהתאמה ראשונית / התאמה חוזרת
- הספק מפרסם נתונים של שירות ההתאמה המהירה (0xFE2C) עם כתובת זהות (התחלתית) או RPA (לאחר מכן).
- שימוש בגרסה הקודמת של פרסום
- המשתמש שמחפש מקבל את הפרסום של הספק עם כתובת הזהות להתאמה ראשונית או עם RPA להתאמה הבאה
- המשתמש שולח בקשה להצמדה מבוססת-מפתח
- הביט 5 של הדגל בבקשה להצמדה מבוססת-מפתח מוגדר כ-0
- הספק שולח תגובה של שיוך מבוסס-מפתח עם כתובת ציבורית באחד מהפורמטים הבאים:
- אם נעשה שימוש בסוג ההודעה 0x01, הכתובת צריכה להיות כתובת ציבורית
- אם משתמשים בסוג ההודעה 0x02
- ביט 0 צריך להיות 0
- הביט הראשון צריך להיות 0
- הכתובת צריכה להיות כתובת ציבורית
- התוקף יוצר קשר עם פרוטוקול התעבורה BR/EDR
- היכולת של IO מוגדרת ל-DisplayYesNo עבור BR/EDR
- התקן המחפש והספק מבצעים את תהליך האימות של מפתח הגישה באמצעות התאמה מהירה
תרחיש 2 – כשהכלי לחיפוש תומך ב-LEA
רכיבים
- ספק
- תמיכה ב-A2DP/HFP/LEA
- רכיב יחיד
- Seeker
- SupportA2DP/HFP/LEA
התנהגות צפויה בהתאמה ראשונית / התאמה חוזרת
- הספק מפרסם נתונים של שירות ההתאמה המהירה (0xFE2C) עם כתובת זהות (התחלתית) או RPA (לאחר מכן).
- שימוש בגרסה הקודמת של פרסום
- המשתמש שולח בקשה להצמדה מבוססת-מפתח
- הביט 5 של הדגל בבקשה לשיוך מבוסס-מפתח מוגדר כ-1
- הספק שולח תגובה של צימוד מבוסס-מפתח עם סוג ההודעה 0x02
- ביט 0 צריך להיות 0
- הביט 1 צריך להיות 1
- הכתובת היא כתובת הזהות
- ה-Seeker יוצר קשר עם חיבור ה-LE הקיים בהעברת LE
- הכיוון של CTKD הוא מ-LE אל BR/EDR
- יכולת הקלט/פלט מוגדרת כ-DisplayYesNo עבור LE
- התקן המחפש והספק מבצעים את תהליך האימות של מפתח הגישה באמצעות התאמה מהירה
תרחיש 3 – כשהכלי לחיפוש תומך ב-LEA ו-CSIP מעורב
רכיבים
- ספק
- תמיכה ב-A2DP/HFP/LEA
- רכיבים מרובים
- הרכיב העיקרי הוא BR/EDR/LE
- הרכיב המשני הוא LE בלבד
- Seeker
- תמיכה ב-A2DP/HFP/LEA
התנהגות צפויה בהתאמה ראשונית / התאמה חוזרת
- הרכיב הראשי מפרסם נתוני שירות של Fast Pair (0xFE2C) עם כתובת זהות (התחלתית) או RPA (לאחר מכן).
- שימוש בגרסה הקודמת של פרסום
- המשתמש שולח בקשה להצמדה מבוססת-מפתח לרכיב הראשי
- הביט 5 של הדגל בבקשה לשיוך מבוסס-מפתח מוגדר כ-1
- הרכיב הראשי שולח תגובה של שיוך מבוסס-מפתח עם סוג ההודעה 0x02
- ביט 0 צריך להיות 0
- הביט 1 צריך להיות 1
- הכתובות מפורטות בהמשך:
- הכתובת הראשונה היא כתובת הזהות של הרכיב הראשי
- הכתובת השנייה היא הכתובת שאפשר לקשר אליה את הרכיב המשני, הרכיב השני משתמש גם בכתובת הזו כדי לפרסם CSIP
- ה-Seeker יוצר קשר עם הרכיב הראשי בחיבור ה-LE הקיים
- הכיוון של CTKD הוא מ-LE אל BR/EDR
- יכולת הקלט/פלט מוגדרת כ-DisplayYesNo עבור LE
- המחפש יוצר קשר עם רכיב משני שהכתובת שלו היא מתוך התגובה המורחבת של ההתאמה מבוססת-המפתח
- יכולת הקלט/פלט צריכה להיות DisplayYesNo, אחרת צריך לדחות את בקשת ההתאמה
- ההתקן המחפש והספק מבצעים הליך הגנה מפני התקפות MITM כדי להתאים את הרכיב המשני. הספק צריך להטמיע את שני התרחישים הבאים
- ה-Seeker מחכה עד שהוא מתחבר לרכיב המשני
תרשים עוקב של MITM
בסשן הזה נתאר את רצף הפעולות של הליך ההגנה מפני התקפות MITM.
קבלת מפתח גישה מהרכיב שמקושר באמצעות התראה

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

בעיה ידועה
התכונה 'הגנה מפני הונאה' עבור LEA עברה אופטימיזציה כדי לפעול עם Android V (Android 15).
לעומת זאת, נתקלנו בבעיות רבות באוזניות שתומכות ב-LEA אבל לא מותקנת בהן ההטמעה הנכונה של התאמה מהירה באמצעות LEA (כלומר, רק התאמה מהירה באמצעות Classic). לדוגמה, אם ה-RPA של הספק לא נוצר על ידי מפתח נכון לפתרון זהויות (IRK), ולא ניתן לפתור את הכתובת. לא הצלחנו לבדוק רשימה מקיפה של תצורות אוזניות, אבל הבדיקות המוגבלות שביצענו חשפו בעיות שונות, כולל אי הצגת התראות על סוללת האוזניות, היעדר פונקציונליות של מעבר אוטומטי בין מכשירים (SASS), כשלים נרחבים בהתאמה הראשונית ובהתאמות הבאות ועוד.
לכן מומלץ מאוד לשותפים להטמיע את המפרט של Fast Pair-LEA במכשירים חדשים ובמכשירים קיימים בשטח (באמצעות עדכונים דרך האוויר) שתומכים במצבים כפולים.