الخصائص
خدمة "الإقران السريع"
يجب أن يوفّر "مقدّم خدمة الإقران السريع" خدمة 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 |
السمة: رقم تعريف الطراز
تسمح هذه السمة لجهاز Seeker بقراءة رقم تعريف النموذج حسب الحاجة، خارج نطاق الإعلان في وضع قابل للاكتشاف. يجب أن تعرض دائمًا البيانات التالية:
| Octet | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 - 2 | uint24 |
رقم تعريف الطراز | يختلف |
الخاصية: الاقتران المستند إلى المفتاح
تتحكّم هذه السمة في إجراء الاقتران المستند إلى المفتاح. في هذا الإجراء، يتم تحديد مستوى معيّن من الثقة من خلال التحقّق من أنّ كلّاً من "الباحث" و"الموفّر" يملكان مفتاحًا مشتركًا مسبقًا. يختلف المفتاح في كل حالة كما يلي:
الحالة 1: يستند المفتاح المشترَك مسبقًا إلى زوج المفاتيح العام/الخاص المضاد للانتحال، وإلى زوج المفاتيح العام/الخاص الخاص بجهاز Seeker والذي سيتغير في كل محاولة إقران.
- يكون الجهاز المزوّد بالشبكة في وضع الإقران.
- يتأكّد طالب التحقّق من أنّ موفِّر التحقّق يملك المفتاح الخاص لمكافحة التزييف.
يُرجى العِلم أنّه عند تفعيل وضع الإقران، يمكن للموفّر أيضًا إجراء عملية الإقران بالطريقة المعتادة، مثلاً، للإقران بجهاز لا يتيح ميزة "الإقران السريع" المستندة إلى المفتاح.
الحالة 2: المفتاح المشترك مسبقًا هو أحد مفاتيح الحساب.
- لا يكون الجهاز عادةً في وضع الإقران. (ولكن هذا ليس شرطًا، إذ يجب أن يتيح مقدّم الخدمة استخدام مفتاح حساب حتى في وضع الاقتران).
- يتحقّق كل من "الباحث" و"المزوّد" من أنّ الطرف الآخر يملك مفتاح الحساب.
بما أنّ كلتا الحالتين متشابهتان إلى حدّ كبير، باستثناء المفتاح المشترك مسبقًا المستخدَم، تم دمجهما في الإجراء.
تنسيق البيانات
اطّلِع على الإجراء لمعرفة كيفية استخدام كل تنسيق.
| Octet | نوع البيانات | الوصف | القيمة | هل هو إلزامي؟ |
|---|---|---|---|---|
| من 0 إلى 15 | uint128 |
الطلب المشفّر | يختلف | إلزامي |
| من 16 إلى 79 | مفتاح عام | يختلف | اختياري |
الجدول 1.1: الطلب المشفّر، الذي يكتبه الباحث في السمة.
| Octet | نوع البيانات | الوصف | القيمة | هل هو إلزامي؟ |
|---|---|---|---|---|
| 0 | uint8 |
نوع الرسالة | 0x00 = طلب إقران يستند إلى مفتاح |
إلزامي |
| 1 | uint8 |
العلامات
|
يختلف | إلزامي |
| من 2 إلى 7 | uint48 |
أيّ مما يلي:
|
يختلف | إلزامي |
| 8 - 13 | uint48 |
عنوان مقدم الطلب في البرازيل أو جمهورية الدومينيكان | يختلف | يتم عرضها فقط إذا تم ضبط "بت 1" أو "بت 3" في "العلامات" |
| n - 15 | قيمة عشوائية (salt) | يختلف | إلزامي |
الجدول 1.2.1: الطلب الأوّلي (النوع 0x00) تم فك تشفيرها من الطلب المشفّر في الجدول 1.1.
| Octet | نوع البيانات | الوصف | القيمة | هل هو إلزامي؟ |
|---|---|---|---|---|
| 0 | uint8 |
نوع الرسالة | 0x10 = طلب اتّخاذ إجراء |
إلزامي |
| 1 | uint8 |
العلامات
|
يختلف | إلزامي |
| من 2 إلى 7 | uint48 |
أيّ مما يلي:
|
يختلف | إلزامي |
| 8 | uint8 |
إرسال رسائل إلى المجموعة | يختلف | إلزامي إذا تم ضبط البت 0 من العلامات |
| 9 | uint8 |
رمز الرسالة | يختلف | إلزامي إذا تم ضبط البت 0 من العلامات |
| 10 | uint8 |
يعتمد على العلامات:
|
يختلف | إلزامي إذا تم ضبط البت 0 أو 1 من العلامات |
| 11 - n | البيانات الإضافية | يختلف | اختياري | |
| n - 15 | قيمة عشوائية (salt) | يختلف | إلزامي |
الجدول 1.2.2: طلب أولي (النوع 0x10). تم فك تشفيرها من الطلب المشفّر في الجدول 1.1.
| Octet | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 | uint8 |
نوع الرسالة | 0x01 = ردّ الإقران المستند إلى المفتاح |
| 1 - 6 | uint48 |
عنوان مقدّم الخدمة العام (BR/EDR) | يختلف |
| 7 - 15 | قيمة عشوائية (salt) | يختلف |
الجدول 1.3: الردّ الأوّلي مشفَّرة لإنتاج الردّ المشفَّر في الجدول 1.4.
| Octet | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 -15 | uint128 |
ردّ مشفَّر | يختلف |
الجدول 1.4: الرد المشفّر، الذي يرسله مقدّم الخدمة إلى طالب الخدمة عبر إشعار
الخاصية: مفتاح مرور
يتم استخدام هذه السمة أثناء إجراء الإقران المستند إلى المفتاح.
| Octet | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| من 0 إلى 15 | uint128 |
حظر مفتاح المرور المشفّر | يختلف |
الجدول 2.1: "كتلة مفتاح المرور المشفّر" راجِع إجراءات الاقتران المستندة إلى المفتاح لمعرفة كيفية الاستخدام.
| Octet | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 0 | uint8 |
نوع الرسالة | أحد الخيارات التالية:
|
| 1 - 3 | unit32 |
مفتاح مرور مكوّن من 6 أرقام | يختلف |
| 4 - 15 | قيمة عشوائية (salt) | يختلف |
الجدول 2.2: حظر مفتاح المرور الأولي نسخة فك تشفير الجدول 2.1
السمة: مفتاح الحساب
بعد الإقران السريع، ستكتب أداة Fast Pair Seeker مفتاح حساب إلى Fast Pair Provider.
| Octet | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| من 0 إلى 15 | uint128 |
مفتاح الحساب (مشفّر) | يختلف |
عند تلقّي طلب كتابة، يجب أن ينفّذ موفّر الإقران السريع ما يلي:
- فك تشفير مفتاح الحساب باستخدام المفتاح السري المشترك الذي تم إنشاؤه من الخطوة 4 في
الإجراء.
- بالنسبة إلى مقدّمي الخدمات الذين يتطلّبون الربط (وهو أمر شائع):
- قبل فك التشفير، تحقَّق من استخدام المفتاح السري المشترك لفك تشفير طلب مفتاح المرور من الخطوة 12. إذا لم يتم اجتياز هذه الخطوة باستخدام كلمة المرور هذه، تجاهِل عملية الكتابة هذه واخرج.
- في هذه المرحلة، لن يتم استخدام المفتاح السري المشترك (K في الإجراء) مرة أخرى لعملية الإقران هذه. يجب رفض أي طلبات مشفّرة بهذا المفتاح بدون إعادة بدء الإجراء.
- بالنسبة إلى مقدّمي الخدمات الذين يتطلّبون الربط (وهو أمر شائع):
- تأكَّد من أنّ القيمة التي تم فك تشفيرها تبدأ بـ
0x04أو0xFF. إذا لم يكن كذلك، تجاهَل عملية الكتابة هذه واخرج.- إذا كانت القيمة
0x04:- تحقَّق ممّا إذا كانت قائمة مفاتيح الحسابات المحفوظة تتضمّن مساحة للقيمة الجديدة.
- إذا لم يكن كذلك، احذف القيمة الأقل استخدامًا مؤخرًا من القائمة.
- أضِف القيمة الجديدة إلى القائمة.
- إذا كانت القيمة
0xFF:- تعامَل مع هذا على أنّه جلسة إقران مؤقتة ولا تنفِّذ أي عملية.
- يمكن أن يحدث ذلك من خلال مسار كتابة مفتاح الحساب بأثر رجعي.
- لا تخزِّن المفتاح ولا تستخدِمه في قائمة مفاتيح الحساب أو التشفير أو عمليات احتساب MAC.
- يتم تشغيل عملية إزالة الربط من خلال حدث أو مهلة محدّدة للميزة. بالنسبة إلى ميزة "مشاركة الصوت" عبر البلوتوث المنخفض الطاقة (LE)، يُنصح بشدة بإزالة ربط البلوتوث المنخفض الطاقة ومفتاح الربط بعد 10 دقائق من قطع اتصال الجلسة المؤقتة.
- إذا كانت القيمة
يتم استخدام مفاتيح الحساب في القائمة أثناء عملية الإقران المستند إلى المفتاح.
السمة: مراجعة البرامج الثابتة
تسمح هذه السمة لـ "الباحث" بقراءة مراجعة البرامج الثابتة الخاصة بـ "الموفّر" عند الحاجة. يجب أن تعرض دائمًا البيانات التالية:
| Octet | نوع البيانات | الوصف | القيمة |
|---|---|---|---|
| 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)، على "مزوّد Fast Pair" اتّخاذ الإجراءات التالية:
- أنشئ 8 بايتات عشوائية مشفَّرة لـ Nonce.
تشفير البيانات باستخدام 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],...) لإنشاء البيانات الأولية.