الخصائص
خدمة الإقران السريع
يجب أن يتوفّر لدى موفّر الإقران السريع خدمة 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 |
يستخدم الباحث عن طريق الإقران السريع الخصائص التالية:
الاسم | مشفّر | الأذونات | معرِّف فريد عالمي (UUID) |
---|---|---|---|
مراجعة البرامج الثابتة | لا | مقروءة | 0x2A26 |
الخاصية: رقم تعريف النموذج
تتيح هذه الميزة للباحث قراءة رقم تعريف النموذج حسب الحاجة، خارج نطاق الإعلان في وضع قابلية الاكتشاف. يجب أن يعرض دائمًا البيانات التالية:
ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
---|---|---|---|
من 0 إلى 2 | uint24 |
رقم تعريف الطراز | يختلف |
السمة: الاقتران المستند إلى المفتاح
تتحكم هذه الميزة في إجراء الإقران المستند إلى المفتاح. في هذا الإجراء، يتم إنشاء مستوى معين من الثقة من خلال التحقق من أن كل من "الباحث" و"الموفّر" يملكان مفتاحًا تمت مشاركته مسبقًا. يختلف المفتاح في كل حالة:
الحالة 1: يعتمد المفتاح الذي تمت مشاركته مسبقًا على زوج المفتاح العام/الخاص لمكافحة الانتحال، وإلى زوج المفتاح العام/الخاص للباحث والذي سيتغير مع كل محاولة إقران.
- مقدّم الخدمة في وضع الإقران.
- يتحقّق "الباحث" من أنّ الموفّر يملك المفتاح الخاص لمكافحة الانتحال.
وتجدر الإشارة إلى أنّه عند تفعيل وضع الإقران، قد يقترن موفّر الخدمة أيضًا بالطريقة المعتادة، على سبيل المثال، للإقران بجهاز لا يتيح استخدام ميزة "الإقران المستند إلى المفاتيح" من خلال ميزة "الإقران السريع".
الحالة 2: المفتاح المشترك مسبقًا هو أحد مفاتيح الحساب.
- لا يكون موفّر الخدمة عادةً في وضع الإقران. (ولكن هذا ليس مطلبًا، ويجب أن يتيح موفّر الخدمة استخدام مفتاح حساب حتى عندما تكون في وضع الإقران).
- يتحقّق كلٌ من مقدِّم المحتوى والمقدّم من أنّ الآخر يملك مفتاح الحساب.
وبما أنّ كلتا الحالتين متشابهتان للغاية، باستثناء استخدام المفتاح المشترك مسبقًا، يتم دمجهما في الإجراء.
تنسيق البيانات
راجِع الإجراء لمعرفة كيفية استخدام كل تنسيق.
ثُمانِي واحد | نوع البيانات | الوصف | القيمة | إلزامي؟ |
---|---|---|---|---|
من 0 إلى 15 | uint128 |
طلب مشفّر | يختلف | إلزامي |
من 16 إلى 79 | مفتاح عام | يختلف | اختياري |
الجدول 1.1: طلب مشفّر، مكتوب وفقًا للميزة من قِبل "الباحث".
ثُمانِي واحد | نوع البيانات | الوصف | القيمة | إلزامي؟ |
---|---|---|---|---|
0 | uint8 |
نوع الرسالة | 0x00 = طلب إقران مستند إلى المفتاح |
إلزامي |
1 | uint8 |
علامات
|
تختلف | إلزامي |
من 2 إلى 7 | uint48 |
أن تحقق أيًا من التالي:
|
تختلف | إلزامي |
من 8 إلى 13 | uint48 |
عنوان BR/EDR للباحث | تختلف | لا يتم عرضها إلا في حال ضبط بت 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 سنة | القيمة العشوائية (ملح) | تختلف |
الجدول 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
. إذا لم يكن الأمر كذلك، فتجاهل هذه الكتابة والإنهاء. - تحقّق مما إذا كانت قائمة مفاتيح الحساب التي لا تزال تتضمّن مساحة للقيمة الجديدة.
- وإذا لم يكُن الأمر كذلك، احذف القيمة الأقل استخدامًا من القائمة.
- أضِف القيمة الجديدة إلى القائمة.
يتم استخدام مفاتيح الحساب المدرَجة في القائمة أثناء عملية الإقران المستنِد إلى المفتاح.
السمة: مراجعة البرامج الثابتة
تتيح هذه الخاصية للباحث قراءة مراجعة البرامج الثابتة للموفّر حسب الحاجة. يجب أن يعرض دائمًا البيانات التالية:
ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
---|---|---|---|
0 - var | utf8s |
رمز مراجعة البرامج الثابتة | تختلف |
يجب أن يتم تضمينه في سلسلة utf8 واحدة حتى إذا كان هناك أكثر من برنامج ثابت (مثلاً 3 برامج ثابتة للسماعة اليسرى والسماعة اليمنى والحافظة) على مقدّم الخدمة. يمكن للموفر أيضًا عرض السلاسل المحددة للحالات الخاصة:
تحديث الحالة: إذا كان موفّر الخدمة يُجري حاليًا تحديثًا إلى برامج ثابتة جديدة. بدلاً من ذلك، يمكن لموفّر المحتوى عرض إصدار البرامج الثابتة المرحلية.
status-abnormal: إذا كان مقدّم الخدمة في حالة غير طبيعية. على سبيل المثال، تعطلت بسبب فشل تحديث البرامج الثابتة. ستؤدّي هذه القيمة إلى عرض "الباحث" رسالة لإعلام المستخدم بضرورة تحديثها الآن.
على موفّر الخدمة تقييد الوصول إلى خاصية "مراجعة البرامج الثابتة" لمنع تتبُّع الجهاز. القيود المقترَحة:
- يجب أن تتمكن الأجهزة المرتدة من الوصول إليها في أي وقت
- يجب أن يتمكن أي جهاز من الوصول عندما يكون الموفّر قابلاً للاكتشاف
الخاصية: بيانات إضافية
يجب أن يكون لهذه الخدمة الخصائص التالية.
سمة خدمة الإقران السريع | مشفّر | الأذونات | معرِّف فريد عالمي (UUID) |
---|---|---|---|
البيانات | لا | الكتابة وإرسال إشعار | FE2C1237-8366-4814-8EB0-01DE32100BEA |
سمة قديمة لخدمة "الإقران السريع" (سيتم إيقاف الميزة نهائيًا في 1/1/2021) | مشفّر | الأذونات | معرِّف فريد عالمي (UUID) |
---|---|---|---|
البيانات | لا | الكتابة وإرسال إشعار | 0x1237 |
قبل الكتابة أو الإشعار بهذه السمة، يجب أن تتم عملية تأكيد الاتصال بالخاصية FE2C1234-8366-4814-8EB0-01DE32100BEA
للحصول على سر مشترك. سيتم استخدام AES-CTR لتشفير البيانات التي تتدفق من خلال هذه الميزة، والتي يتم تعريف خوارزميتها في ما يلي. ويُعد هذا الوضع أكثر أمانًا عبر البيانات التي تمتد إلى ما بعد كتلة واحدة بحجم 16 بايت. سيتم استخدام HMAC-SHA256
لضمان سلامة البيانات، كما هو موضح أدناه.
ثُمانِي واحد | الوصف | القيمة |
---|---|---|
من 0 إلى 7 | أول 8 بايت من HMAC-SHA256. | تختلف |
من 8 إلى 15 | لا يتم استخدام هذا الحقل في تشفير AES-CTR. | تختلف |
16 - var | البيانات المُشفَّرة | تختلف |
الجدول 3.1: حزمة البيانات التي يرسلها مقدّم الخدمة إلى الطالب من خلال إشعار أو إرساله إلى مقدّم الخدمة عبر رسالة كتابة.
ثُمانِي واحد | نوع البيانات | الوصف | القيمة |
---|---|---|---|
0 - var | byte array |
البيانات | يختلف، لذا عليك فك ترميزه وفقًا لمعرّف البيانات للجدول 1.2.2:
|
الجدول 3.2: البيانات الأولية: تم فك تشفير البيانات المشفَّرة في الجدول 3.1.
عند طلب إشعار (مثل طلب اسم مخصّص من خلال البت 2 في الجدول 1.2.1)، على موفّر خدمة "الإقران السريع" ما يلي:
- إنشاء 8 بايت عشوائية بشكل مشفَّرة لنظام Nonce
قم بتشفير البيانات باستخدام AES-CTR، حيث يتم إنشاء كل كتلة 16 بايت باستخدام
encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
أين
- مفتاح AES هو المفتاح السرّي المشترك من الخطوة 4 في الإجراء.
- clearBlock[i] هي كتلة 16 بايت تبدأ من البيانات[i * 16]. يمكن أن يكون حجم المقطع الأخير أقل من 16 بايت.
نفِّذ concat(cryptBlock[0], encryptedBlock[1],...) لإنشاء البيانات المشفرة.
إنشاء HMAC-SHA256 من خلال:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
أين
- يتم إنشاء K بواسطة concat(shared_secret, 48-bytes) ويكون 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))
أين
- segmentationBlock[i] هي كتلة 16 بايت وتبدأ من special_data[i * 16]. يمكن أن يكون حجم الجزء الأخير أقل من 16 بايت.
- يتم إنشاء مفتاح AES أو التعرُّف عليه من خلال تأكيد الاتصال، مثل:
- في تدفق التسمية 1، فهو من ECDH، ولن يتم استخدامه مرة أخرى لهذا الاقتران. ويجب رفض أي طلبات يتم تشفيرها باستخدام هذا المفتاح بدون إعادة تشغيل الإجراء.
- في تدفق التسمية 2، هو مفتاح الحساب.
نفِّذ concat(clearBlock[0], clearBlock[1],...) لإنشاء البيانات الأولية.