إشارة إعلانات مقدّم الخدمة

الإعلانات: عند قابلية العثور عليها

عندما يكون جهاز الموفِّر قابلاً للاكتشاف (BR/EDR) (أي في وضع الإقران)، فإنه الإعلان عن بيانات معرّف النموذج ذات الإقران السريع عبر BLE، ولن يسمح عنوان BLE الدوران.

الفاصل الزمني للإعلانات: عندما يكون قابلاً للاكتشاف

يجب ألا تزيد الفاصل الزمني بين الإعلانات عن 100 ملي ثانية (10 هرتز). حاسمة بسرعة، يسمح للباحث بالعثور على المزود بسرعة، حتى عند البحث في وضع الطاقة المنخفضة.

حمولة الإعلانات: بيانات الرقم التعريفي لنموذج الإقران السريع

يجب أن يحتوي الإعلان على نوع بيانات الخدمة، المرجع السابق الفقرة 1.11. تشير رسالة الأشكال البيانية سيكون المعرّف الفريد العالمي (UUID) هو المعرّف الفريد العالمي لخدمة "الإقران السريع" لـ 0xFE2C. يجب على بيانات الخدمة تحتوي على ما يلي:

ثُمانِي واحد نوع البيانات الوصف القيمة
0-2 uint24 رقم تعريف طراز 24 بت تختلف

الإعلانات: عندما لا تكون قابلة للاكتشاف

إذا لم يكن بالإمكان اكتشاف الجهاز (أي أنه ليس في وضع الإقران)، سيتم أعلن عن بيانات الحسابات التي يتم ربطها باستخدام ميزة "الإقران السريع" باتّباع الإرشادات التالية.

يتيح الإعلان عن بيانات الحساب للباحثين القريبين منك معرفة أنّ مقدّم الخدمة إلى حسابه وبدء الإقران دون الحاجة إلى فرض إعادة تفعيل الخدمة إلى وضع الإقران أولاً، وهو سبب شائع لدى المستخدم الشكوى. سيوفر الباحثون الفرصة للمستخدمين ليكونوا قادرين على تجاهل هذا البث في حال عدم الانتظار للاقتران بمقدم الخدمة أو إذا كان البث غير ملائم (على سبيل المثال، إذا سبق وتم إقرانه). يفلتر الباحثون أيضًا أحداث البث التي تبدو سيئة بشكل تلقائي، مثل عندما يتم إعداد بيانات الحساب بشكل خاطئ.

الفاصل الزمني للإعلانات: عندما لا تكون قابلة للاكتشاف

يجب ألا تزيد الفاصل الزمني بين الإعلانات عن 250 ملي ثانية (4 هرتز).

حمولة الإعلانات: بيانات الحساب التي يتم ربطها باستخدام ميزة "الإقران السريع"

يجب أن يحتوي الإعلان على نوع بيانات الخدمة، المرجع السابق. الفقرة 1.11. تشير رسالة الأشكال البيانية سيكون المعرّف الفريد العالمي (UUID) هو المعرّف الفريد العالمي لخدمة "الإقران السريع" لـ 0xFE2C. يجب على بيانات الخدمة تحتوي على ما يلي:

ثُمانِي واحد نوع البيانات الوصف القيمة
0 uint8 الإصدار والعلامات
0bVVVVFFFF
  • V = الإصدار
  • F = علامات
0x00
(محجوزة للاستخدام في المستقبل)
1 - يختلف البيانات الأساسية للحساب تختلف
أو 0x00 إذا كانت "قائمة مفاتيح الحساب" فارغة.

تحتوي البيانات الأساسية للحساب على:

ثُمانِي واحد نوع البيانات الوصف القيمة
0 uint8 طول الحقل ونوعه
0bLLLLTTTT
  • L = طول فلتر مفتاح الحساب بالبايت
  • T = النوع
0bLL0000
  • الطول = 0bLLLL = يختلف
  • النوع = 0b0000 (إظهار مؤشر واجهة المستخدم) أو 0b0010 (إخفاء مؤشر واجهة المستخدم)، فلتر مفتاح الحساب
1 - ث فلتر مفتاح الحساب تختلف
s + 1 uint8 طول الحقل ونوعه
0bLLLLTTTT
  • L = الطول بالبايت
  • T = النوع
0b00100001
  • الطول = 0b0010 = 2
  • النوع = 0b0001, Salt
s + 2 - s + 3 uint16 Salt تختلف

فلتر مفتاح الحساب

يسمح فلتر مفتاح الحساب المُعلَن عنه للباحث بالتحقق بسرعة مما إذا كان قد يمتلك موفّر الخدمة مفتاح حساب معيّنًا (بدرجة سالبة خاطئة منخفضة الاحتمالية، في المتوسط أقل بكثير من 0.5%)، قبل تفاعلات أخرى. تشير رسالة الأشكال البيانية قد يتواصل الباحث تلقائيًا ويحاول بدء الإجراء عندما يرصد. إذا كان هناك فلتر يتم بثه من النوع 0، أي عرض مؤشر واجهة المستخدم، على أحد مفاتيح الحساب، وذلك لتقليل معدل الأخطاء بالإيجابيات أكثر. في بعض الحالات، قد يرغب مقدّم الخدمة في أن يتم الاعتراف به. بواسطة Seeker أثناء عدم استعداده للإقران. ومن الأمثلة على ذلك أنه عندما يتم وضع السمّاعات سنتوقف عن عرض إشعار الإقران اللاحق. نظرًا لأنه يمكن رفض هذا الاقتران بواسطة سماعة الرأس.

فلتر مفتاح الحساب عبارة عن متغير من الطول فلتر Bloom تم إنشاؤه باسم التالي:

  1. ستكون قيمة n هي عدد مفاتيح الحساب (n >= 1) في القيم قائمة مفاتيح الحساب:
  2. لنفترض أن s، يتم اقتطاع حجم الفلتر بالبايت (1.2*n + 3). بالنسبة على سبيل المثال، في حال الاحتفاظ بمفتاح واحد، تكون s = 4 بايت.
    uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
  3. عليك إعداد الفلتر F كمصفوفة من s بايت، مع ضبط كل فلتر على 0.
    uint8_t F[s] = {0};
  4. لكل مفتاح حساب 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 بايت في الأرقام الكبيرة. X = {X0، ...، X7}، حيث س0 = 0xH0ارتفاع1ارتفاع2ارتفاع3.

         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 - عدد وحدات البت في الفلتر. (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) مزوِّد الخدمة لتجنب التتبع عبر تدوير العناوين.

لإنشاء فلتر مفتاح الحساب باستخدام القيمة العشوائية:

  1. عليك إنشاء رمز S عشوائي بحجم 2 بايت. لاحظ أنه لا يوجد "انتهاء" إلى هذا بما أنه لا يوجد بايت أكثر أو أقل أهمية — لا تغيِّر وحدة البايت طلبك.
  2. استخدِم عنصر S 2 بايت كقيمة عشوائية.
  3. في بيانات الحساب التي يتم ربطها باستخدام ميزة "الإقران السريع" المُعلَن عنها، يمكنك تضمين الفلتر الذي تم إنشاؤه في حقل فلتر مفتاح الحساب، وS في الحقل الملح.