إشارة إعلانات مقدِّم الخدمة
الإعلانات: عندما يكون الجهاز قابلاً للاكتشاف
عندما يكون جهاز "المزوّد" قابلاً للاكتشاف من خلال BR/EDR (أي في وضع الإقران)، يجب أن يعلن عن بيانات معرّف طراز "الإقران السريع" عبر BLE، ويجب عدم تدوير عنوان BLE.
الفاصل الزمني للإعلان: عندما يكون الجهاز قابلاً للاكتشاف
يجب ألا تزيد الفترة الفاصلة بين الإعلانات عن 100 ملي ثانية (10 هرتز). ويتيح المعدّل السريع لـ "الباحث" العثور على "مقدّم الخدمة" بسرعة، حتى عند البحث في وضع توفير الطاقة.
حمولة الإعلان: بيانات معرّف طراز "الإقران السريع"
يجب أن يحتوي الإعلان على نوع بيانات Service Data، المرجع نفسه، § 1.11. يجب أن يكون معرّف UUID هو معرّف UUID لخدمة "الإقران السريع" وهو 0xFE2C. يجب أن تحتوي بيانات الخدمة
على ما يلي:
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0-2 | uint24 |
رقم تعريف الطراز المكوّن من 24 بت | يختلف |
حمولة إعلانات ميزة "مشاركة الصوت" عبر LE: بيانات رقم تعريف طراز "الإقران السريع" وخريطة إمكانات "الإقران السريع"
يجب أن تحتوي بيانات الخدمة على ما يلي:
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 | uint8 |
الإصدار والعلامات 0bVVVVFFFF
|
0x00 |
| 1 | uint8 |
طول الحقل ونوعه 0bLLLLTTTT
|
0bLLLL0111
|
| 2 - s | رقم تعريف الطراز | يختلف | |
| s + 1 | uint8 |
طول الحقل ونوعه 0bLLLLTTTT
|
0bLLLL1000
|
| s + 2 | uint8 |
خريطة إمكانات FP | يختلف |
خريطة إمكانات FP
The FP Capability Map is a bitmap representing which FP features the Provider supports. يتم تحديد البايت الأول من الصورة النقطية على النحو التالي:
| صورة نقطية | الوصف |
|---|---|
| 0bRRRRRRSO | R: بت محجوز، سيتجاهله جهاز البحث في الوقت الحالي وسيتم ضبطه على 0. S: بت متوافق مع ميزة "مشاركة الصوت" المنخفض الطاقة في ميزة "الإقران السريع" (يتم ضبطه على 1 في حال تفعيل الميزة، وإلا يتم ضبطه على 0). O: بت "جاهز للاستخدام" (OOB)، يتم ضبطه على 1 إذا كان الجهاز جديدًا من المصنع. |
إذا كان "المزوّد" متوافقًا مع مواصفات ميزة "مشاركة الصوت" عبر تكنولوجيا LE في ميزة "الإقران السريع" (أي أنّه متوافق مع الإقران المؤقت وحمولة إعلانية لميزة "مشاركة الصوت" عبر تكنولوجيا LE والإصدار 2 من التحكّم في الأجهزة السمعية)، اضبط وحدة بت التوافق مع ميزة "مشاركة الصوت" عبر تكنولوجيا LE في ميزة "الإقران السريع" على 1، وإلا اضبطها على 0.
إذا لم يتم إقران "المزوّد" بأي "باحث عن أجهزة قريبة" وكان جديدًا من المصنع (أي لا تتوفّر مفاتيح حسابات "الإقران السريع" لدى المزوّد)، اضبط قيمة بت OOB على 1، وإلا اضبطها على 0.
حمولة إعلانية لمعلومات المجموعة المنسَّقة: بيانات رقم تعريف طراز "الإقران السريع" ومعلومات المجموعة المنسَّقة في "الإقران السريع"
يجب أن تحتوي بيانات الخدمة على ما يلي:
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 | uint8 |
الإصدار والعلامات 0bVVVVFFFF
|
0x00 |
| 1 | uint8 |
طول الحقل ونوعه 0bLLLLTTTT
|
0bLLLL0111
|
| 2 - s | رقم تعريف الطراز | يختلف | |
| s + 1 | uint8 |
طول الحقل ونوعه 0bLLLLTTTT
|
0b01101011
|
| s + 2 - s + 7 | uint48 |
بيانات مجموعة منسّقة من "مجموعات البيانات الخاصة" | بيانات بحجم 6 بايت، راجِع معلومات مجموعة "الاقتران السريع" المنسَّقة |
معلومات عن مجموعة منسَّقة من المنتجات المميّزة
يتم استخدام معلومات مجموعة الأجهزة المنسَّقة في ميزة "العثور على جهازي" لتحديد ما إذا كان الجهاز الإعلاني في مجموعة الأجهزة المنسَّقة نفسها أم لا.
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 | uint8 |
عدد القطع في المجموعة المنسَّقة | يختلف |
| 1 | uint8 |
نوع عضو المجموعة المنسَّقة في ميزة "الإقران السريع" | يمكن أن تكون إحدى القيم التالية:
|
| من تطبيقَين إلى 5 تطبيقات | uint32 |
ضبط تجزئة مفتاح حلّ الهوية | يختلف |
خوارزمية إنشاء قيمة التجزئة لمفتاح حلّ الهوية المحدّد هي
استخدِم SHA256 لتجزئة قيمة SIRK
SIRK = 0xe3b0c44298fc1c149afbf4c8996fb924SHA256(SIRK) = 0x2646036bb22781536be710245c8cbb04b92842c587f845996ce8ab542592a25eاستخرِج أول أربعة بايت كقيمة تجزئة
Hash Value of Set Identity Resolving Key = 0x2646036b
بالنسبة إلى مفتاح حلّ المجموعة، يُرجى الاطّلاع على خدمة تحديد المجموعة المنسَّقة لمزيد من المعلومات.
الإعلان: عندما لا يكون الجهاز قابلاً للاكتشاف
عندما يكون جهاز "المزوّد" غير قابل للاكتشاف (أي ليس في وضع الإقران)، عليه الإعلان عن بيانات حساب "الإقران السريع" باستخدام الإرشادات التالية.
يتيح الإعلان عن بيانات الحساب للأجهزة الباحثة القريبة التعرّف على الأجهزة المزوِّدة التابعة لحسابها وبدء عملية الإقران بدون الحاجة إلى فرض وضع الإقران على الجهاز المزوِّد أولاً، وهو سبب شائع لشكاوى المستخدمين. ستوفّر أجهزة البحث الفرصة للمستخدمين لتجاهل هذا البث في حال عدم انتظارهم للإقران مع جهاز المزوّد أو إذا كان البث غير ذي صلة (على سبيل المثال، إذا سبق لهم الإقران). ستعمل أجهزة البحث أيضًا على فلترة عمليات البث السيئة بشكل واضح تلقائيًا، مثل عندما يتم ضبط بيانات الحساب بشكل خاطئ.
الفاصل الزمني للإعلان: عندما لا يكون الجهاز قابلاً للاكتشاف
يجب ألا تزيد الفترة الفاصلة بين الإعلانات عن 250 ملي ثانية (4 هرتز).
حمولة الإعلان: بيانات حساب "الإقران السريع"
يجب أن يحتوي الإعلان على نوع بيانات Service Data، المرجع نفسه، § 1.11. يجب أن يكون معرّف UUID هو معرّف UUID لخدمة "الإقران السريع" وهو 0xFE2C. يجب أن تحتوي بيانات الخدمة
على ما يلي:
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 | uint8 |
الإصدار والعلامات 0bVVVVFFFF
|
0x00(محجوزة للاستخدام في المستقبل) |
| 1 - يختلف | بيانات مفتاح الحساب | يختلف |
تحتوي بيانات مفتاح الحساب على ما يلي:
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 | uint8 |
طول الحقل ونوعه 0bLLLLTTTT
|
0bLLLL0000
|
| 1 - s | فلتر مفتاح الحساب | يختلف | |
| s + 1 | uint8 |
طول الحقل ونوعه 0bLLLLTTTT
|
0b00100001
|
| s + 2 - s + 3 | uint16 |
Salt | يختلف |
فلتر مفتاح الحساب
يتيح "فلتر مفتاح الحساب" (Account Key Filter) المُعلَن عنه لـ "الباحث" (Seeker) التحقّق بسرعة مما إذا كان "المزوّد" (Provider) يمتلك مفتاح حساب معيّنًا (مع احتمال منخفض للنتائج الإيجابية الخاطئة، أقل من %0.5 في المتوسط) قبل إجراء المزيد من التفاعلات. قد يتصل "الباحث" تلقائيًا ويحاول بدء الإجراء عندما يرى فلترًا يتم بثه بالنوع 0، أي يعرض مؤشر واجهة المستخدم، والذي قد يحتوي على أحد مفاتيح الحساب، وذلك لتقليل معدل النتائج الإيجابية الخاطئة بشكل أكبر. في بعض الحالات، قد يريد "المزوِّد" أن يتعرّف عليه "الباحث" بدون أن يكون جاهزًا للإقران. على سبيل المثال، عندما تتم إعادة سماعات الأذن إلى الحافظة، نريد إيقاف عرض إشعار الإقران اللاحق لأنّ سماعة الرأس قد ترفض هذا الإقران.
"فلتر مفتاح الحساب" هو فلتر بلوم متغير الطول يتم إنشاؤه على النحو التالي:
- لنفترض أنّ n هو عدد مفاتيح الحساب (n >= 1) في قائمة مفاتيح الحساب المحفوظة.
- لنفترض أنّ s، أي حجم الفلتر بالبايت، هو (1.2*n + 3) مقتطع. على سبيل المثال، إذا تم الاحتفاظ بمفتاح واحد، تكون قيمة s = 4 بايت.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3); - ابدأ الفلتر F كمصفوفة من وحدات البايت s، مع ضبط كل منها على 0.
uint8_t F[s] = {0}; لكل مفتاح حساب K في قائمة مفاتيح الحسابات المحفوظة:
أ. لنفترض أنّ V هي concat(K, Salt).// In the sample code, the size of salt is 2 bytes. #define SALT_SIZE 2 uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE]; for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++) { // concat (K, Salt) fastpair_get_account_key_by_index(keyIndex, V); uint8_t randomSalt = (uint8_t)rand(); V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt; ... }ب. يتم تجزئة V باستخدام خوارزمية SHA256، للحصول على قيمة 32 بايت H = {H0, …, H31}.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);ج. قسِّم H إلى ثمانية أعداد صحيحة غير موقَّعة بحجم 4 بايت بتنسيق big-endian، X = {X0, …, X7}، حيث X0 = 0xH0H1H2H3.
uint32_t X[8]; for (index = 0; index < 8; index++) { X[index] = (((uint32_t)(H[index * 4])) << 24) | (((uint32_t)(H[index * 4 + 1])) << 16) | (((uint32_t)(H[index * 4 + 2])) << 8) | (((uint32_t)(H[index * 4 + 3])) << 0); }د. بالنسبة إلى كل Xi:
1. لنفترض أنّ M هو Xi modulo عدد وحدات البت في الفلتر، (s * 8).
2. احصل على البايت في F عند الفهرس (M / 8)، مع التقريب إلى الأدنى.
3. داخل البايت، اضبط البت في الفهرس (M % 8) على 1.
4. بعبارة أخرى:// M = Xi % (s * 8) // F[M/8] = F[M/8] | (1 << (M % 8)) for (index = 0; index < 8; index++) { uint32_t M = X[index] % (s * 8); F[M / 8] = F[M / 8] | (1 << (M % 8)); }
أدرِج الفلتر F كحقل "فلتر مفتاح الحساب" في بيانات الإعلانات. يُرجى العِلم أنّه لا يوجد "ترتيب بايت" لهذه القيمة، لأنّه لا يوجد بايت أكثر أو أقل أهمية، لذا لا تغيّر ترتيب البايت.
حقل ملح
القيمة العشوائية هي قيمة عشوائية يتم إلحاقها بمفاتيح الحسابات عند إنشاء فلتر بلوم. يجب إعادة إنشاء هذا الرمز في كل مرة يتم فيها تعديل RPA لمقدّم الخدمة لتجنُّب التتبُّع في جميع عمليات تبديل العناوين.
لإنشاء فلتر مفتاح الحساب باستخدام القيمة العشوائية:
- أنشِئ S عشوائيًا من 2 بايت. يُرجى العِلم أنّه لا يوجد "ترتيب بايت" لهذه القيمة، لأنّه لا يوجد بايت أكثر أو أقل أهمية، لذا لا تغيّر ترتيب البايت.
- استخدِم S المكوّن من بايتَين كقيمة عشوائية.
- في بيانات حساب "الإقران السريع" المُعلَن عنها، أدرِج الفلتر الذي تم إنشاؤه في حقل "فلتر مفتاح الحساب"، وS في حقل "القيمة العشوائية".