سي بي أو آر
تمثيل الكائنات الثنائية المختصر ( CBOR ) هو تنسيق تسلسل بيانات ثنائية يعتمد بشكل فضفاض على JSON، وقد ابتكره كارستن بورمان وبول هوفمان. [ أ ] ومثل JSON، يسمح CBOR بنقل كائنات البيانات التي تحتوي على أزواج اسم-قيمة ، ولكن بطريقة أكثر اختصارًا. وهذا يزيد من سرعة المعالجة والنقل على حساب سهولة القراءة البشرية . وقد تم تعريفه في معيار IETF RFC 8949. [ 2 ]
من بين استخداماته الأخرى، يُعدّ هذا البروتوكول طبقة تسلسل البيانات الموصى بها لمجموعة بروتوكولات إنترنت الأشياء CoAP [ 3 ] ، وهو تنسيق البيانات الذي تستند إليه رسائل COSE . كما يُستخدم أيضًا في بروتوكول العميل-إلى-المصادق (CTAP) ضمن نطاق مشروع FIDO2. [ 4 ]
استُلهمت تقنية CBOR من MessagePack ، التي طوّرها وروّج لها سادايوكي فوروهاشي. وقد وسّعت CBOR نطاق MessagePack، لا سيما من خلال السماح بالتمييز بين السلاسل النصية وسلاسل البايت، وهو ما تمّ تطبيقه في MessagePack عام 2013. [ 5 ] [ 6 ]
مواصفات ترميز CBOR
تُعتبر البيانات المشفرة بتقنية CBOR بمثابة سلسلة من عناصر البيانات. يتكون كل عنصر بيانات من بايت رأس يحتوي على نوع مكون من 3 بتات وعدد قصير مكون من 5 بتات. يلي ذلك عدد موسع اختياري (إذا كان العدد القصير في النطاق من 24 إلى 27)، وحمولة اختيارية.
بالنسبة للأنواع 0 و1 و7، لا يوجد محتوى بيانات؛ فالعدد هو القيمة. أما بالنسبة للنوعين 2 (سلسلة بايت) و3 (سلسلة نصية)، فالعدد هو طول محتوى البيانات. وبالنسبة للنوعين 4 (مصفوفة) و5 (خريطة)، فالعدد هو عدد العناصر (الأزواج) في محتوى البيانات. أما بالنسبة للنوع 6 (وسم)، فمحتوى البيانات هو عنصر واحد، والعدد هو رقم وسم يصف العنصر المُضمّن.
| بيانات CBOR | البيانات رقم 1 | البيانات رقم 2 | البيانات رقم 3... | ||||||
|---|---|---|---|---|---|---|---|---|---|
| عدد البايتات | 1 بايت (رأس عنصر بيانات CBOR) | عامل | عامل | 1 بايت (رأس عنصر بيانات CBOR) | عامل | عامل | إلخ... | ||
| بناء | النوع الرئيسي | العد القصير | عدد موسع (اختياري) | حمولة البيانات (اختياري) | النوع الرئيسي | العد القصير | عدد موسع (اختياري) | حمولة البيانات (اختياري) | إلخ... |
| عدد البتات | 3 بتات | 5 بتات | 8 بت × متغير | 8 بت × متغير | 3 بتات | 5 بتات | 8 بت × متغير | 8 بت × متغير | إلخ.. |
أمثلة
[{"x": 1, "yz": true}, [2, "w"]] --> 82 # مصفوفة (2) A2 # الخريطة (2) 61 # نص (1) 78 "x" 01 # unsigned(1) 62 # نص (2) 797A "yz" F5 # بدائي (21) 82 # مصفوفة (2) 02 # unsigned(2) 61 # نص (1) 77 "w" معالجة النوع الرئيسي والعدد في كل عنصر من عناصر البيانات
يُحدد سلوك كل عنصر من عناصر البيانات من خلال نوعه الرئيسي وعدده. ويُستخدم النوع الرئيسي لاختيار السلوك الرئيسي أو نوع كل عنصر من عناصر البيانات.
يُشفّر حقل العد المختصر ذو الخمسة بتات القيم من 0 إلى 23 مباشرةً. وتشير القيم المختصرة من 24 إلى 27 إلى أن قيمة العد موجودة في حقل عد موسع لاحق ذي 8 أو 16 أو 32 أو 64 بت. أما القيم من 28 إلى 30 فهي غير مُخصصة ويجب عدم استخدامها.
يتم تقسيم الأنواع إلى أنواع "ذرية" 0 – 1 و 6 – 7، والتي يقوم حقل العد فيها بتشفير القيمة مباشرة، وأنواع غير ذرية 2 – 5، والتي يقوم حقل العد فيها بتشفير حجم حقل الحمولة التالي.
يُستخدم عدد قصير قدره 31 مع الأنواع غير الذرية من 2 إلى 5 للإشارة إلى طول غير محدد؛ وتتكون الحمولة من العناصر التالية حتى بايت علامة "الفاصل" 255 (النوع = 7، العدد القصير = 31). لا يُسمح باستخدام عدد قصير قدره 31 مع الأنواع الذرية الأخرى 0 أو 1 أو 6.
النوع 6 (الوسم) غير عادي من حيث أن حقل العد الخاص به يقوم بتشفير قيمة مباشرة، ولكنه يحتوي أيضًا على حقل الحمولة (الذي يتكون دائمًا من عنصر واحد).
يتم ترميز العدادات الموسعة وجميع القيم متعددة البايتات بترتيب البايتات الشبكي (big-endian) .
ترميز حقل عنصر بيانات CBOR
ترميز الحقول الصغيرة
| عدد البايتات | 1 بايت (رأس عنصر بيانات CBOR) | |
|---|---|---|
| بناء | النوع الرئيسي | عدد قصير (القيمة) |
| عدد البتات | 3 بتات | 5 بتات |
| الذرة | 0 – 1، 7 | 0 – 23 |
| علامة فاصلة | 7 | 31 |
ترميز الحقول القصيرة
| عدد البايتات | 1 بايت (رأس عنصر بيانات CBOR) | عامل | |
|---|---|---|---|
| بناء | النوع الرئيسي | العد القصير | قيمة |
| عدد البتات | 3 بتات | 5 بتات | 8 بت × متغير |
| الذرة | 0 – 1، 7 | 24 – 27 | 8 أو 16 أو 32 أو 64 بت |
| خيط | 2 – 3 | 0 – 23 | عدد × 8 بت |
| أغراض | 4 – 5 | 0 – 23 | عدد × العناصر/الأزواج |
| الوسم | 6 | 0 – 23 | عنصر واحد |
ترميز الحقل الطويل
| عدد البايتات | 1 بايت (رأس عنصر بيانات CBOR) | 1 أو 2 أو 4 أو 8 بايت | عامل | |
|---|---|---|---|---|
| بناء | النوع الرئيسي | العد القصير (24 – 27) | عدد الشحنات الممتد (طول الحمولة) | قيمة |
| عدد البتات | 3 بتات | 5 بتات | 8 أو 16 أو 32 أو 64 بت | 8 بت × متغير |
| خيط | 2 – 3 | 24 – 27 | حتى 264 - 1 | عدد × 8 بت |
| أغراض | 4 – 5 | 24 – 27 | حتى 264 - 1 | عدد × العناصر/الأزواج |
| الوسم | 6 | 24 – 27 | علامة، حتى 2 64 − 1 | عنصر واحد |
الأعداد الصحيحة (النوعان 0 و 1)
بالنسبة للأعداد الصحيحة، يمثل حقل العد القيمة؛ ولا توجد بيانات إضافية. يشفر النوع 0 الأعداد الصحيحة الموجبة أو غير الموقعة، بقيم تصل إلى 2⁶⁴ - 1. يشفر النوع 1 الأعداد الصحيحة السالبة ، بقيمة -1 - العد، للقيم من -2⁶⁴ إلى -1 .
السلاسل (النوعان 2 و 3)
يحتوي النوعان 2 و3 على حقل عدّ يُشفّر طول الحمولة بالبايتات. النوع 2 عبارة عن سلسلة بايتات غير مُهيكلة، بينما النوع 3 عبارة عن سلسلة نصية بتنسيق UTF-8 .
يشير العدد القصير 31 إلى سلسلة نصية غير محددة الطول. يلي ذلك صفر أو أكثر من السلاسل النصية محددة الطول من النوع نفسه، وتنتهي بعلامة "فاصل". قيمة العنصر هي مجموع قيم العناصر المضمنة. لا يُسمح بالعناصر من أنواع مختلفة، أو السلاسل النصية غير محددة الطول المتداخلة. يجب أن تكون السلاسل النصية سليمة البنية؛ ولا يجوز تقسيم أحرف UTF-8 بين العناصر.
المصفوفات والخرائط (النوعان 4 و 5)
يحتوي النوع 4 على حقل عدّ يُشفّر عدد العناصر التالية، متبوعًا بنفس العدد من العناصر. ليس بالضرورة أن تكون جميع العناصر من نفس النوع؛ تُسمّي بعض لغات البرمجة هذا النوع "مجموعة" بدلاً من "مصفوفة".
بدلاً من ذلك، يمكن استخدام ترميز غير محدد الطول بعدد قصير يبلغ 31. ويستمر هذا حتى بايت علامة "الفاصل" الذي يبلغ 255. ولأن العناصر المتداخلة قد تستخدم أيضاً الترميز غير المحدد، يجب على المحلل اللغوي أن يقرن علامات الفاصل ببايتات الرأس غير المحددة الطول المقابلة.
النوع الخامس مشابه، لكنه يُشفّر خريطة (تُسمى أيضًا قاموسًا أو مصفوفة ترابطية) من أزواج المفاتيح والقيم. في هذه الحالة، يُشفّر العدد عدد أزواج العناصر. إذا استُخدم التشفير غير المحدد الطول، فيجب أن يكون هناك عدد زوجي من العناصر قبل بايت علامة "الفاصل".
الوسم الدلالي (النوع 6)
الوسم الدلالي هو نوع ذري آخر تكون فيه القيمة هي العدد، ولكنه يحتوي أيضًا على حمولة (عنصر واحد لاحق)، ويعتبر الاثنان عنصرًا واحدًا في مصفوفة أو خريطة على سبيل المثال.
يُقدّم رقم الوسم معلومات إضافية عن نوع العنصر التالي، تتجاوز ما يُوفّره النوع الرئيسي ذو الثلاثة بتات. على سبيل المثال، يُشير الوسم 1 إلى أن الرقم التالي هو قيمة زمنية في نظام يونكس . ويُشير الوسم 2 إلى أن سلسلة البايتات التالية تُشفّر عددًا كبيرًا غير مُوقّع . ويُشير الوسم 32 إلى أن سلسلة النص التالية هي مُعرّف موارد موحد (URI) كما هو مُعرّف في RFC 3986. يُعرّف RFC 8746 الوسوم من 64 إلى 87 لتشفير المصفوفات المُتجانسة من قيم الأعداد الصحيحة أو العشرية ذات الحجم الثابت كسلاسل بايتات.
تم تخصيص الوسم 55799 للدلالة على "بيانات CBOR تلي". هذا الوسم لا يُحدث أي تغييرd9 d9 f7 دلالي، ولكنه يسمح بإضافة بايتات الوسم المقابلة إلى بداية ملف CBOR دون التأثير على معناه. يمكن استخدام هذه البايتات كرقم سحري لتمييز بداية بيانات CBOR.
القيم المكونة من جميع الآحاد 0xffff و 0xffffffff و 0xffffffffffffffff محجوزة للإشارة إلى عدم وجود علامة في مكتبة فك تشفير CBOR؛ يجب ألا تظهر أبدًا في دفق البيانات.
قد لا يكون العنصر الزائف الذي يشير إلى نقطة الفصل هو حمولة الوسم.
خاص/عائم (النوع 7)
يُستخدم هذا النوع الرئيسي لترميز قيم خاصة متنوعة لا تندرج ضمن الفئات الأخرى. وهو يتبع قواعد حجم الترميز نفسها المطبقة على الأنواع الذرية الأخرى (0 و1 و6)، ولكن يتم تفسير حقل العدد بشكل مختلف.
القيم من 0 إلى 19 غير محددة حاليًا.
تُستخدم القيم من 20 إلىfalse 23 لترميز القيم الخاصة ، true، null، و undefined.
يشير العدد المختصر 24 إلى وجود عدد موسع بطول بايت واحد يليه، والذي يمكن استخدامه لاحقًا لترميز قيم خاصة إضافية. ولتبسيط عملية فك الترميز، قد لا تُرمّز القيم من 0 إلى 31 بهذا الشكل. أما القيم من 32 إلى 255، فلم تُعرّف بعد.
تشير القيم القصيرة 25 أو 26 أو 27 إلى أن حقل العد الموسع التالي يُفسَّر على أنه قيمة فاصلة عائمة (big-endian) من نوع IEEE، 16 أو 32 أو 64 بت . هذه القيم لها نفس أحجام العد الموسع، ولكن تفسيرها يختلف. على وجه الخصوص، بالنسبة لجميع الأنواع الرئيسية الأخرى، فإن قيمة العد الموسع 0x1234 (بايتين) وقيمة العد الموسع 0x00001234 (أربعة بايتات) متكافئتان تمامًا. هذا لا ينطبق على قيم الفاصلة العائمة.
الأرقام القصيرة من 28 إلى 30 محجوزة، كما هو الحال بالنسبة لجميع الأنواع الرئيسية الأخرى.
يشير العدد المختصر 31 إلى علامة "الفاصل" الخاصة التي تُنهي ترميزًا غير محدد الطول. هذا مرتبط، ولكنه يختلف عن، الاستخدام مع الأنواع الرئيسية الأخرى حيث يبدأ العدد المختصر 31 ترميزًا غير محدد الطول. هذا ليس عنصرًا، وقد لا يظهر في حمولة بيانات محددة الطول.
تسجيل العلامات الدلالية
أنشأت هيئة IANA سجل علامات CBOR، الموجود على الرابط التالي: https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml . يجب أن تتضمن التسجيلات النموذج الموضح أدناه. [ 7 ]
| نوع الوسم الدلالي | يتراوح | نموذج | |||
|---|---|---|---|---|---|
| عنصر البيانات | علم الدلالة (بصيغة مختصرة) | نقطة الاتصال | وصف الدلالات (عنوان URL) | ||
| الإجراءات القياسية | 0–23 | مطلوب | مطلوب | غير متوفر | غير متوفر |
| المواصفات المطلوبة | 24–32767 (24 – 2 15 -1) | مطلوب | مطلوب | غير متوفر | غير متوفر |
| الأولوية لمن يأتي أولاً | 32768–18446744073709551615 (2 15 – 2 64 -1) | مطلوب | مطلوب | مطلوب | الوصف اختياري. يمكن أن يشير عنوان URL إلى مسودة إنترنت أو صفحة ويب. |
DAG-CBOR
تُعدّ مواصفات DAG -CBOR مجموعة فرعية أكثر صرامة من CBOR، وقد طوّرتها شركة Protocol Labs . تكمن المشكلة التي تحلّها DAG-CBOR في أنه في CBOR، يمكن تمثيل الكائن بأكثر من طريقة. على سبيل المثال، {"b":1,"a":2}يمكن تمثيله إما بـ
A2 # الخريطة (2) 61 # نص (1) 62 "ب" 01 # unsigned(1) 61 # نص (1) 61 "أ" 02 # unsigned(2) أو
A2 # الخريطة (2) 61 # نص (1) 61 "أ" 02 # unsigned(2) 61 # نص (1) 62 "ب" 01 # unsigned(1) هذا يعني أن الكائن الواحد يمكن أن يكون له تمثيلان تسلسليان مختلفان. يحدد معيار DAG-CBOR تمثيل CBOR واحدًا فقط من بين جميع تمثيلات CBOR الممكنة للكائن. بعض الكائنات التي يمكن أن يكون لها تمثيل CBOR لم تعد تمتلك تمثيل DAG-CBOR، لأن طبيعتها لا تسمح بتمثيل فريد. على سبيل المثال، العناصر ذات الطول غير المحدد (التي يمكن أن تكون سلسلة نصية، أو تسلسل بايتات، أو قائمة، أو خريطة) لا تمتلك تمثيل DAG-CBOR، على الرغم من إمكانية امتلاكها تمثيل CBOR. [ 8 ]
تتيح مواصفات DAG-CBOR تخزينًا متسقًا قابلًا للعنونة حسب المحتوى . على وجه التحديد، يمكن تسلسل جزء من البيانات بشكل فريد كسلسلة من البايتات، ويمكن بعد ذلك تجزئة هذه السلسلة لتصبح معرّف المحتوى (CID)، والذي يمكن استخدامه لعنونة المحتوى.
يشير اسم "DAG" إلى " الرسم البياني الموجه غير الدوري "، حيث تم إنتاج المواصفات خصيصًا للسماح بكائنات البيانات في شكل Merkle DAGs .
علم التشفير
توقيع الكائنات وتشفيرها
يُعدّ نظام توقيع وتشفير كائنات CBOR ( COSE ) تنسيقًا ثنائيًا لهياكل بيانات CBOR الموثقة و/أو المشفرة . [ 9 ]
رموز الويب
رمز الويب CBOR ( CWT ) هو رمز موقّع يستخدم CBOR كصيغة تسلسل. وهو بديل لرموز الويب JSON (JWT). [ 10 ]
انظر أيضاً
ملحوظات
مراجع
- ↑ بورمان، كارستن؛ هوفمان، بول (28 يوليو 2013). "تصميم CBOR ونظرة عامة" (ملف PDF) . وقائع IETF . مؤرشف (PDF) من الأصل بتاريخ 28 يناير 2025. تم الاطلاع عليه بتاريخ 1 يونيو 2024 .
- ↑ بورمان، كارستن. "CBOR - تمثيل الكائنات الثنائية الموجز | نظرة عامة" . cbor.io. مؤرشف من الأصل بتاريخ 28 يناير 2025. تم الاطلاع عليه بتاريخ 24 أغسطس 2016 .
- ↑ "CoAP - بروتوكول التطبيقات المقيدة | نظرة عامة" . مؤرشف من الأصل بتاريخ 2017-01-03 . تم الاطلاع عليه بتاريخ 2016-08-28 .
- ↑ مشروع "FIDO2" . تحالف FIDO. مؤرشف من الأصل بتاريخ 22 أبريل 2018. تم الاطلاع عليه بتاريخ 11 مايو 2018 .
- ↑ "مناقشات حول مواصفات MessagePack القادمة التي تضيف نوع السلسلة النصية إلى البروتوكول" . GitHub . مؤرشف من الأصل بتاريخ 4 يناير 2022. تم الاطلاع عليه بتاريخ 4 يناير 2022 .
- ↑ بورمان، كارستن؛ هوفمان، بول إي. (ديسمبر 2020). "RFC 8949: تمثيل الكائنات الثنائية الموجز (CBOR)" . IETF. مؤرشف من الأصل في 28 يناير 2025. تم الاطلاع عليه في 26 ديسمبر 2021 .
- ↑ بورمان، كارستن؛ هوفمان، بول إي. (ديسمبر 2020). "RFC 8949: تمثيل الكائنات الثنائية الموجز (CBOR)" . مؤرشف من الأصل بتاريخ 28 يناير 2025. تم الاطلاع عليه بتاريخ 25 مارس 2022 .
- ↑ "IPLD ♦ مستندات الترميز: DAG-CBOR" . ipld.io . تم الاسترجاع 2026-03-17 .
- ↑ شاد، ج. (يوليو 2017). "RFC 8152: توقيع وتشفير كائنات CBOR (COSE)" . مؤرشف من الأصل بتاريخ 16 نوفمبر 2024. تم الاطلاع عليه بتاريخ 4 يوليو 2025 .
- ^ جونز، م. والستروم، E.؛ إردتمان، س. تشوفينيج، هـ. (مايو 2018). "RFC 8392: رمز ويب CBOR (CWT)" . تم الاسترجاع 2025-07-04 .
روابط خارجية
- أداة عبر الإنترنت للتحويل من تمثيل ثنائي CBOR إلى تمثيل نصي والعكس.
- منطقة CBOR : أداة عبر الإنترنت لتحويل عنصر CBOR أو تسلسل CBOR بتنسيق HEX أو Base64 أو Base64URL أو CBOR Diagnostic Notation إلى تنسيق آخر.
- تنسيقات تسلسل البيانات
