الخصائص
خدمة "الإقران السريع"
يجب أن يتضمّن مزوّد خدمة "الإقران السريع" خدمة 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 |
العلامات
|
يختلف | إلزامي |
| من 2 إلى 7 | uint48 |
أيٌّ مما يلي:
|
يختلف | إلزامي |
| 8 - 13 | uint48 |
عنوان BR/EDR الخاص بجهاز البحث | يختلف | تظهر فقط إذا تم ضبط العلامة Bit 1 أو 3 |
| n - 15 | قيمة عشوائية (قيمة عشوائية إضافية) | يختلف | إلزامي |
الجدول 1.2.1: طلب أولي (النوع 0x00) تم فك تشفيرها من الطلب المشفّر في الجدول 1.1.
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة | هل هو إلزامي؟ |
|---|---|---|---|---|
| 0 | uint8 |
نوع الرسالة | 0x10 = طلب اتخاذ إجراء |
إلزامي |
| 1 | uint8 |
العلامات
|
يختلف | إلزامي |
| من 2 إلى 7 | uint48 |
أيٌّ مما يلي:
|
يختلف | إلزامي |
| 8 | uint8 |
إرسال رسائل إلى المجموعة | يختلف | إلزامية إذا تم ضبط البت 0 في البلاغات |
| 9 | uint8 |
رمز الرسالة | يختلف | إلزامية إذا تم ضبط البت 0 في البلاغات |
| 10 | uint8 |
يعتمد على العلامات:
|
يختلف | إلزامي إذا تم ضبط البت 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 |
نوع الرسالة | أحد الخيارات التالية:
|
| من 1 إلى 3 | unit32 |
مفتاح مرور مكوّن من 6 أرقام | يختلف |
| من 4 إلى 15 | قيمة عشوائية (ملح) | يختلف |
الجدول 2.2: حظر مفتاح المرور الأولي نسخة تم فك تشفيرها من الجدول 2.1.
الخاصية: مفتاح الحساب
بعد الإقران، سيكتب جهاز "الباحث" في ميزة "الإقران السريع" مفتاح حساب في جهاز "المزوّد" في ميزة "الإقران السريع".
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| من 0 إلى 15 | uint128 |
مفتاح الحساب (مشفّر) | يختلف |
عند تلقّي طلب كتابة، على مقدّم خدمة "الإقران السريع" تنفيذ ما يلي:
- فكّ تشفير مفتاح الحساب باستخدام الرمز السري المشترَك الذي تم إنشاؤه من الخطوة 4 في
الإجراء.
- بالنسبة إلى مقدّمي الخدمات الذين يتطلّبون تأمينًا (شائع):
- قبل فك التشفير، تحقَّق من استخدام السر المشترك لفك تشفير طلب مفتاح المرور من الخطوة 12. إذا لم يتم اجتياز هذه الخطوة باستخدام هذا المفتاح السري، تجاهل هذه الكتابة واخرج.
- في هذه المرحلة، لن يتم استخدام المفتاح السري المشترك (K في الإجراء) مرة أخرى لعملية الإقران هذه. يجب رفض أي طلبات تأتي مشفرة بهذا المفتاح دون إعادة تشغيل الإجراء.
- بالنسبة إلى مقدّمي الخدمات الذين يتطلّبون تأمينًا (شائع):
- تأكَّد من أنّ القيمة التي تم فك تشفيرها تبدأ بـ
0x04أو0xFF. وإذا لم يكن الأمر كذلك، فتجاهل هذه الكتابة واخرج.- إذا كانت القيمة
0x04:- تحقَّق مما إذا كانت قائمة مفاتيح الحساب المحفوظة تتضمّن مساحة للقيمة الجديدة.
- إذا لم يكن الأمر كذلك، فاحذف القيمة الأقل استخدامًا مؤخرًا من القائمة.
- أضِف القيمة الجديدة إلى القائمة.
- إذا كانت القيمة
0xFF:- يتم التعامل مع هذه الجلسة على أنّها جلسة إقران مؤقتة ولا يتم تنفيذ أي عملية.
- يمكن أن يحدث ذلك من خلال مسار كتابة مفتاح الحساب بأثر رجعي.
- لا تخزِّن المفتاح ولا تستخدِمه في قائمة مفاتيح الحساب أو التشفير أو عمليات احتساب MAC.
- يتم تفعيل عملية إزالة الربط من خلال حدث أو مهلة محدّدة في الميزة. بالنسبة إلى ميزة "مشاركة الصوت" عبر BLE، يُنصح بشدة بإزالة عملية الربط ومفتاح الربط عبر BLE بعد 10 دقائق من قطع الاتصال بالجلسة المؤقتة.
- إذا كانت القيمة
يتم استخدام مفاتيح الحساب في القائمة أثناء عملية الإقران المستند إلى المفتاح.
السمة: مراجعة البرامج الثابتة
تسمح هذه السمة لـ "الباحث" بقراءة إصدار البرامج الثابتة لـ "المزوّد" حسب الحاجة. يجب أن تعرض دائمًا البيانات التالية:
| ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 - var | utf8s |
رمز مراجعة البرامج الثابتة | يختلف |
يجب تضمينها في سلسلة utf8 واحدة حتى إذا كان هناك أكثر من برنامج ثابت واحد (مثل 3 برامج ثابتة لسماعة الأذن اليسرى وسماعة الأذن اليمنى والعلبة) على جهاز "المزوّد". يمكن لموفّر المحتوى أيضًا عرض السلاسل المحدّدة للحالات الخاصة:
status-updating: إذا كان مقدّم الخدمة بصدد التحديث إلى برنامج ثابت جديد. بدلاً من ذلك، يمكن لمقدّم الخدمة عرض إصدار البرامج الثابتة المرحلية.
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:
|
الجدول 3.2: البيانات الأولية تم فك تشفيرها من البيانات المشفَّرة في الجدول 3.1.
عند طلب إشعار (على سبيل المثال، طلب اسم مخصّص من خلال البت 2 في الجدول 1.2.1)، على مزوّد خدمة "الإقران السريع" تنفيذ ما يلي:
- أنشئ 8 بايتات عشوائية مشفَّرة للرقم العشوائي.
يتم تشفير البيانات باستخدام AES-CTR، حيث يتم إنشاء كل مجموعة من 16 بايت باستخدام
encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))أين
- مفتاح AES هو المفتاح السري المشترك من الخطوة 4 في الإجراء.
- clearBlock[i] هي كتلة من 16 بايت تبدأ من data[i * 16]. يمكن أن تكون الكتلة الأخيرة أقل من 16 بايت.
نفِّذ concat(encryptedBlock[0], encryptedBlock[1],...) لإنشاء البيانات المشفّرة.
إنشاء HMAC-SHA256 من خلال
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))أين
- يتم إنشاء K من خلال concat(shared_secret, 48-byte ZEROs)، ويكون shared_secret من الخطوة 4 في الإجراء.
- opad هي حشوة خارجية بحجم 64 بايت، وتتألف من بايتات متكررة بقيمة
0x5C. - يبلغ حجم الحشو الداخلي في ipad 64 بايت، ويتألف من بايتات مكرّرة بقيمة
0x36.
استخدِم أول 8 بايت من HMAC-SHA256 كبادئة لحزمة البيانات.
عند تلقّي طلب كتابة، يجب أن ينفّذ موفّر الإقران السريع ما يلي:
- تحقَّق من سلامة البيانات من خلال مراجعة أول 8 بايت من HMAC-SHA256.
فك تشفير البيانات المشفّرة باستخدام AES-CTR، حيث يتم إنشاء كل كتلة باستخدام
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))أين
- encryptedBlock[i] هي كتلة مكوّنة من 16 بايت تبدأ من encrypted_data[i * 16]. يمكن أن تكون الكتلة الأخيرة أقل من 16 بايت.
- يتم إنشاء مفتاح AES أو تحديده من عملية تأكيد الاتصال، على سبيل المثال:
- في عملية التسمية 1، يكون من بروتوكول ECDH، ولن يتم استخدامه مرة أخرى لعملية الإقران هذه. يجب رفض أي طلبات تأتي مشفرة بهذا المفتاح دون إعادة تشغيل الإجراء.
- في مسار التسمية 2، يكون مفتاح الحساب.
نفِّذ concat(clearBlock[0], clearBlock[1],...) لإنشاء البيانات الأولية.