الخصائص

خدمة "الإقران السريع"

يجب أن يتضمّن مزوّد خدمة "الإقران السريع" خدمة GATT التالية.

الخدمة معرِّف فريد عالمي (UUID)
خدمة "الإقران السريع" 0xFE2C

يجب أن تتوفّر في هذه الخدمة الخصائص التالية.

سمة خدمة "الإقران السريع" مشفّر الأذونات معرِّف فريد عالمي (UUID)
رقم تعريف الطراز لا قراءة FE2C1233-8366-4814-8EB0-01DE32100BEA
الإقران المستند إلى المفتاح لا الكتابة والإشعار FE2C1234-8366-4814-8EB0-01DE32100BEA
مفتاح المرور لا الكتابة والإشعار FE2C1235-8366-4814-8EB0-01DE32100BEA
مفتاح الحساب لا كتابة FE2C1236-8366-4814-8EB0-01DE32100BEA

خدمة معلومات الجهاز

يجب أن يتيح مزوّد خدمة "الإقران السريع" أيضًا خدمة "معلومات الجهاز".

الخدمة معرِّف فريد عالمي (UUID)
خدمة معلومات الجهاز 0x180A

يستخدم تطبيق الإقران السريع Seeker الخصائص التالية.

الاسم مشفّر الأذونات معرِّف فريد عالمي (UUID)
نسخة البرامج الثابتة لا قراءة 0x2A26

الخاصية: رقم تعريف الطراز

تتيح هذه السمة لـ "جهاز البحث" قراءة رقم تعريف الطراز حسب الحاجة، خارج نطاق الإعلان في وضع قابل للاكتشاف على الجهاز. يجب أن تعرض دائمًا البيانات التالية:

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

الخاصية: الإقران المستند إلى المفتاح

تتحكّم هذه السمة في إجراء الإقران المستند إلى المفتاح. في هذا الإجراء، يتم إنشاء مستوى معيّن من الثقة من خلال التحقّق من أنّ "الباحث" و"مقدّم الخدمة" يمتلكان مفتاحًا مشتركًا مسبقًا. يختلف المفتاح في كل حالة كما يلي:

  • الحالة 1: يستند المفتاح المشترَك مسبقًا إلى زوج المفاتيح العام/الخاص المضاد للانتحال، وإلى زوج المفاتيح العام/الخاص الخاص بجهاز Seeker والذي سيتغير في كل محاولة إقران.

    • يكون "المزوّد" في وضع الإقران.
    • يتأكّد طالب التحقّق من أنّ موفِّر التحقّق يملك المفتاح الخاص لمكافحة التزييف.

    يُرجى العِلم أنّه في وضع الإقران، يمكن لمقدّم الخدمة أيضًا الإقران بالطريقة المعتادة، على سبيل المثال، للإقران بجهاز لا يتيح ميزة "الإقران المستنِد إلى المفتاح" في Fast Pair.

  • الحالة 2: المفتاح المشترك مسبقًا هو أحد مفاتيح الحساب.

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

بما أنّ الحالتَين متشابهتان للغاية، باستثناء المفتاح المشترك مسبقًا المستخدَم، يتم دمجهما في الإجراء.

تنسيق البيانات

اطّلِع على الإجراء لمعرفة كيفية استخدام كل تنسيق.

ثُمانِي واحد نوع البيانات الوصف القيمة هل هو إلزامي؟
من 0 إلى 15 uint128 طلب مشفّر يختلف إلزامي
من 16 إلى 79 مفتاح عام يختلف اختياري

الجدول 1.1: الطلب المشفّر، الذي يكتبه الباحث في السمة.

ثُمانِي واحد نوع البيانات الوصف القيمة هل هو إلزامي؟
0 uint8 نوع الرسالة ‫0x00 = طلب إقران مستند إلى مفتاح إلزامي
1 uint8 العلامات
  • البت 0 (MSB): تم إيقافه نهائيًا ويتجاهله Seeker.
  • البت 1: 1 إذا طلب "الباحث" من "المزوّد" بدء عملية الربط، ويحتوي هذا الطلب على عنوان BR/EDR الخاص بـ "الباحث". و0 في الحالات الأخرى.
  • البت 2: 1 إذا طلب الباحث أن يبلّغ المقدّم عن الاسم الحالي. و0 في الحالات الأخرى.
  • البت 3: 1 إذا كان هذا الإجراء مخصّصًا لكتابة مفتاح الحساب بأثر رجعي. و0 في الحالات الأخرى.
  • يتم حجز وحدات البت من 4 إلى 7 للاستخدام في المستقبل، ويجب تجاهلها.
يختلف إلزامي
من 2 إلى 7 uint48 أيٌّ مما يلي:
  • عنوان BLE الحالي لمقدّم الخدمة
  • العنوان العام لمقدّم الخدمة
يختلف إلزامي
8 - 13 uint48 عنوان BR/EDR الخاص بجهاز البحث يختلف تظهر فقط إذا تم ضبط العلامة Bit 1 أو 3
n - 15 قيمة عشوائية (قيمة عشوائية إضافية) يختلف إلزامي

الجدول 1.2.1: طلب أولي (النوع 0x00) تم فك تشفيرها من الطلب المشفّر في الجدول 1.1.

ثُمانِي واحد نوع البيانات الوصف القيمة هل هو إلزامي؟
0 uint8 نوع الرسالة ‫0x10 = طلب اتخاذ إجراء إلزامي
1 uint8 العلامات
  • البت 0 (البت الأكثر أهمية): 1 إذا كان إجراءً على الجهاز، و0 في الحالات الأخرى
  • البت 1: 1 إذا كان سيتبعه سمة "بيانات إضافية"، و0 في الحالات الأخرى.
  • البتات من 2 إلى 7 محجوزة للاستخدام في المستقبل، وسيتم تجاهلها.
يختلف إلزامي
من 2 إلى 7 uint48 أيٌّ مما يلي:
  • عنوان BLE الحالي لمقدّم الخدمة
  • العنوان العام لمقدّم الخدمة
يختلف إلزامي
8 uint8 إرسال رسائل إلى المجموعة يختلف إلزامية إذا تم ضبط البت 0 في البلاغات
9 uint8 رمز الرسالة يختلف إلزامية إذا تم ضبط البت 0 في البلاغات
10 uint8 يعتمد على العلامات:
  • تم ضبط البت 0: طول البيانات الإضافية، أقل من 6
  • تم ضبط البت 1: معرّف البيانات
يختلف إلزامي إذا تم ضبط البت 0 أو 1 في البلاغات
‫11 - n البيانات الإضافية يختلف اختياري
n - 15 قيمة عشوائية (قيمة عشوائية إضافية) يختلف إلزامي

الجدول 1.2.2: طلب البيانات الأولية (النوع 0x10) تم فك تشفيرها من الطلب المشفّر في الجدول 1.1.

ثُمانِي واحد نوع البيانات الوصف القيمة
0 uint8 نوع الرسالة ‫0x01 = ردّ على طلب الإقران المستند إلى المفتاح
‫1 - 6 uint48 عنوان مقدّم الخدمة العام (BR/EDR) يختلف
‫7 - 15 قيمة عشوائية (salt) يختلف

الجدول 1.3: الردّ الأوّلي مشفَّرة لإنتاج الردّ المشفَّر في الجدول 1.4.

ثُمانِي واحد نوع البيانات الوصف القيمة
0 -15 uint128 ردّ مشفّر يختلف

الجدول 1.4: الرد المشفّر، الذي يرسله مقدّم الخدمة إلى طالب الخدمة عبر إشعار.

الخاصية: مفتاح مرور

يتم استخدام هذه السمة أثناء إجراء الإقران المستند إلى المفتاح.

ثُمانِي واحد نوع البيانات الوصف القيمة
من 0 إلى 15 uint128 مجموعة مفاتيح مرور مشفّرة يختلف

الجدول 2.1: كتلة مفتاح المرور المشفّر يمكنك الاطّلاع على إجراء "الإقران المستند إلى المفتاح" لمعرفة كيفية الاستخدام.

ثُمانِي واحد نوع البيانات الوصف القيمة
0 uint8 نوع الرسالة أحد الخيارات التالية:
  • ‫0x02 = مفتاح مرور الباحث
  • ‫0x03 = مفتاح مرور مقدّم الخدمة
من 1 إلى 3 unit32 مفتاح مرور مكوّن من 6 أرقام يختلف
من 4 إلى 15 قيمة عشوائية (ملح) يختلف

الجدول 2.2: حظر مفتاح المرور الأولي نسخة تم فك تشفيرها من الجدول 2.1.

الخاصية: مفتاح الحساب

بعد الإقران، سيكتب جهاز "الباحث" في ميزة "الإقران السريع" مفتاح حساب في جهاز "المزوّد" في ميزة "الإقران السريع".

ثُمانِي واحد نوع البيانات الوصف القيمة
من 0 إلى 15 uint128 مفتاح الحساب (مشفّر) يختلف

عند تلقّي طلب كتابة، على مقدّم خدمة "الإقران السريع" تنفيذ ما يلي:

  1. فكّ تشفير مفتاح الحساب باستخدام الرمز السري المشترَك الذي تم إنشاؤه من الخطوة 4 في الإجراء.
    • بالنسبة إلى مقدّمي الخدمات الذين يتطلّبون تأمينًا (شائع):
      • قبل فك التشفير، تحقَّق من استخدام السر المشترك لفك تشفير طلب مفتاح المرور من الخطوة 12. إذا لم يتم اجتياز هذه الخطوة باستخدام هذا المفتاح السري، تجاهل هذه الكتابة واخرج.
    • في هذه المرحلة، لن يتم استخدام المفتاح السري المشترك (K في الإجراء) مرة أخرى لعملية الإقران هذه. يجب رفض أي طلبات تأتي مشفرة بهذا المفتاح دون إعادة تشغيل الإجراء.
  2. تأكَّد من أنّ القيمة التي تم فك تشفيرها تبدأ بـ 0x04 أو 0xFF. وإذا لم يكن الأمر كذلك، فتجاهل هذه الكتابة واخرج.
    • إذا كانت القيمة 0x04:
      • تحقَّق مما إذا كانت قائمة مفاتيح الحساب المحفوظة تتضمّن مساحة للقيمة الجديدة.
      • إذا لم يكن الأمر كذلك، فاحذف القيمة الأقل استخدامًا مؤخرًا من القائمة.
      • أضِف القيمة الجديدة إلى القائمة.
    • إذا كانت القيمة 0xFF:
      • يتم التعامل مع هذه الجلسة على أنّها جلسة إقران مؤقتة ولا يتم تنفيذ أي عملية.
      • يمكن أن يحدث ذلك من خلال مسار كتابة مفتاح الحساب بأثر رجعي.
      • لا تخزِّن المفتاح ولا تستخدِمه في قائمة مفاتيح الحساب أو التشفير أو عمليات احتساب MAC.
      • يتم تفعيل عملية إزالة الربط من خلال حدث أو مهلة محدّدة في الميزة. بالنسبة إلى ميزة "مشاركة الصوت" عبر BLE، يُنصح بشدة بإزالة عملية الربط ومفتاح الربط عبر BLE بعد 10 دقائق من قطع الاتصال بالجلسة المؤقتة.

يتم استخدام مفاتيح الحساب في القائمة أثناء عملية الإقران المستند إلى المفتاح.

السمة: مراجعة البرامج الثابتة

تسمح هذه السمة لـ "الباحث" بقراءة إصدار البرامج الثابتة لـ "المزوّد" حسب الحاجة. يجب أن تعرض دائمًا البيانات التالية:

ثُمانِي واحد نوع البيانات الوصف القيمة
0 - var utf8s رمز مراجعة البرامج الثابتة يختلف

يجب تضمينها في سلسلة utf8 واحدة حتى إذا كان هناك أكثر من برنامج ثابت واحد (مثل 3 برامج ثابتة لسماعة الأذن اليسرى وسماعة الأذن اليمنى والعلبة) على جهاز "المزوّد". يمكن لموفّر المحتوى أيضًا عرض السلاسل المحدّدة للحالات الخاصة:

  1. status-updating: إذا كان مقدّم الخدمة بصدد التحديث إلى برنامج ثابت جديد. بدلاً من ذلك، يمكن لمقدّم الخدمة عرض إصدار البرامج الثابتة المرحلية.

  2. ‫status-abnormal: إذا كان "مقدّم الخدمة" في حالة غير طبيعية على سبيل المثال، تعطّل الجهاز بسبب فشل تحديث البرامج الثابتة. ستؤدي هذه القيمة إلى أن يعرض تطبيق Seeker رسالة لإعلام المستخدم بأنّه يجب تحديثه الآن.

على مقدّم الخدمة فرض قيود على إمكانية الوصول إلى سمة "مراجعة البرامج الثابتة" لمنع تتبُّع الجهاز. القيود المقترَحة:

  • يجب أن تتمكّن الأجهزة المرتبطة من الوصول في أي وقت
  • يجب أن يتمكّن أي جهاز من الوصول إلى "المزوّد" عندما يكون قابلاً للاكتشاف

إذا كان "مقدّم الخدمة" يتيح استخدام "مركز العثور"، يجب تنفيذ خطوات إضافية. يمكنك الاطّلاع على تحديثات البرامج الثابتة في "مركز العثور" لمزيد من التفاصيل.

السمة: بيانات إضافية

يجب أن تتوفّر في هذه الخدمة السمة التالية.

سمة خدمة "الإقران السريع" مشفّر الأذونات معرِّف فريد عالمي (UUID)
البيانات لا الكتابة وإرسال إشعارات FE2C1237-8366-4814-8EB0-01DE32100BEA
سمة خدمة "الإقران السريع" القديمة (من المقرر إيقافها نهائيًا في 1/1/2021) مشفّر الأذونات معرِّف فريد عالمي (UUID)
البيانات لا الكتابة والإشعار 0x1237

قبل كتابة هذه السمة أو إرسال إشعار بشأنها، يجب إجراء مصافحة عبر السمة FE2C1234-8366-4814-8EB0-01DE32100BEA للحصول على سر مشترك. سيتم استخدام AES-CTR لتشفير البيانات التي تنتقل عبر هذه السمة، ويتم تحديد خوارزميتها أدناه. ويُعدّ هذا الوضع أكثر أمانًا للبيانات التي تتجاوز حجم كتلة واحدة تبلغ 16 بايت. سيتم استخدام HMAC-SHA256 لضمان صحّة البيانات، وهو معرَّف أيضًا أدناه.

Octet الوصف القيمة
من 0 إلى 7 أول 8 بايت من HMAC-SHA256 يختلف
‫8 - 15 Nonce، يُستخدم في تشفير AES-CTR. يختلف
‫16 - var البيانات المشفَّرة يختلف

الجدول 3.1: حزمة البيانات التي يرسلها الموفّر إلى الباحث من خلال إشعار أو التي يرسلها الباحث إلى الموفّر من خلال عملية كتابة

Octet نوع البيانات الوصف القيمة
0 - var byte array البيانات يختلف، فقم بفك ترميزه وفقًا لمعرّف البيانات في الجدول 1.2.2:
  • ‫0x01(اسم مخصّص): utf8s

الجدول 3.2: البيانات الأولية تم فك تشفيرها من البيانات المشفَّرة في الجدول 3.1.

عند طلب إشعار (على سبيل المثال، طلب اسم مخصّص من خلال البت 2 في الجدول 1.2.1)، على مزوّد خدمة "الإقران السريع" تنفيذ ما يلي:

  1. أنشئ 8 بايتات عشوائية مشفَّرة للرقم العشوائي.
  2. يتم تشفير البيانات باستخدام AES-CTR، حيث يتم إنشاء كل مجموعة من 16 بايت باستخدام

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    أين

    1. مفتاح AES هو المفتاح السري المشترك من الخطوة 4 في الإجراء.
    2. ‫clearBlock[i] هي كتلة من 16 بايت تبدأ من data[i * 16]. يمكن أن تكون الكتلة الأخيرة أقل من 16 بايت.
  3. نفِّذ concat(encryptedBlock[0], encryptedBlock[1],...)‎ لإنشاء البيانات المشفّرة.

  4. إنشاء HMAC-SHA256 من خلال

    sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
    

    أين

    1. يتم إنشاء K من خلال concat(shared_secret, 48-byte ZEROs)، ويكون shared_secret من الخطوة 4 في الإجراء.
    2. ‫opad هي حشوة خارجية بحجم 64 بايت، وتتألف من بايتات متكررة بقيمة 0x5C.
    3. يبلغ حجم الحشو الداخلي في ipad 64 بايت، ويتألف من بايتات مكرّرة بقيمة 0x36.
  5. استخدِم أول 8 بايت من HMAC-SHA256 كبادئة لحزمة البيانات.

عند تلقّي طلب كتابة، يجب أن ينفّذ موفّر الإقران السريع ما يلي:

  1. تحقَّق من سلامة البيانات من خلال مراجعة أول 8 بايت من HMAC-SHA256.
  2. فك تشفير البيانات المشفّرة باستخدام AES-CTR، حيث يتم إنشاء كل كتلة باستخدام

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    أين

    1. ‫encryptedBlock[i] هي كتلة مكوّنة من 16 بايت تبدأ من encrypted_data[i * 16]. يمكن أن تكون الكتلة الأخيرة أقل من 16 بايت.
    2. يتم إنشاء مفتاح AES أو تحديده من عملية تأكيد الاتصال، على سبيل المثال:
      1. في عملية التسمية 1، يكون من بروتوكول ECDH، ولن يتم استخدامه مرة أخرى لعملية الإقران هذه. يجب رفض أي طلبات تأتي مشفرة بهذا المفتاح دون إعادة تشغيل الإجراء.
      2. في مسار التسمية 2، يكون مفتاح الحساب.
  3. نفِّذ concat(clearBlock[0], clearBlock[1],...) لإنشاء البيانات الأولية.