سي بي أو آر

تمثيل الكائنات الثنائية المختصر ( 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، 70 23
علامة فاصلة731

ترميز الحقول القصيرة

عدد البايتات1 بايت (رأس عنصر بيانات CBOR)عامل
بناءالنوع الرئيسيالعد القصيرقيمة
عدد البتات3 بتات5 بتات8 بت × متغير
الذرة0 1، 724 278 أو 16 أو 32 أو 64 بت
خيط2 30 23عدد × 8 بت
أغراض4 50 23عدد × العناصر/الأزواج
الوسم60 23عنصر واحد

ترميز الحقل الطويل

عدد البايتات1 بايت (رأس عنصر بيانات CBOR)1 أو 2 أو 4 أو 8 بايتعامل
بناءالنوع الرئيسيالعد القصير (24 27)عدد الشحنات الممتد (طول الحمولة)قيمة
عدد البتات3 بتات5 بتات8 أو 16 أو 32 أو 64 بت8 بت × متغير
خيط2 324 27حتى 264 - 1عدد × 8 بت
أغراض4 524 27حتى 264 - 1عدد × العناصر/الأزواج
الوسم624 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 ]

انظر أيضاً

ملحوظات

  1. لم يُسمَّ نظام CBOR على اسم بورمان، على الرغم من أن اسم النظام هو اختصار لاسمه. [ 1 ]

مراجع

  1. بورمان، كارستن؛ هوفمان، بول (28 يوليو 2013). "تصميم CBOR ونظرة عامة" (ملف PDF) . وقائع IETF . مؤرشف (PDF) من الأصل بتاريخ 28 يناير 2025. تم الاطلاع عليه بتاريخ 1 يونيو 2024 .
  2. بورمان، كارستن. "CBOR - تمثيل الكائنات الثنائية الموجز | نظرة عامة" . cbor.io. مؤرشف من الأصل بتاريخ 28 يناير 2025. تم الاطلاع عليه بتاريخ 24 أغسطس 2016 .
  3. "CoAP - بروتوكول التطبيقات المقيدة | نظرة عامة" . مؤرشف من الأصل بتاريخ 2017-01-03 . تم الاطلاع عليه بتاريخ 2016-08-28 .
  4. مشروع "FIDO2" . تحالف FIDO. مؤرشف من الأصل بتاريخ 22 أبريل 2018. تم الاطلاع عليه بتاريخ 11 مايو 2018 .
  5. "مناقشات حول مواصفات MessagePack القادمة التي تضيف نوع السلسلة النصية إلى البروتوكول" . GitHub . مؤرشف من الأصل بتاريخ 4 يناير 2022. تم الاطلاع عليه بتاريخ 4 يناير 2022 .
  6. بورمان، كارستن؛ هوفمان، بول إي. (ديسمبر 2020). "RFC 8949: تمثيل الكائنات الثنائية الموجز (CBOR)" . IETF. مؤرشف من الأصل في 28 يناير 2025. تم الاطلاع عليه في 26 ديسمبر 2021 .
  7. بورمان، كارستن؛ هوفمان، بول إي. (ديسمبر 2020). "RFC 8949: تمثيل الكائنات الثنائية الموجز (CBOR)" . مؤرشف من الأصل بتاريخ 28 يناير 2025. تم الاطلاع عليه بتاريخ 25 مارس 2022 .
  8. "IPLD ♦ مستندات الترميز: DAG-CBOR" . ipld.io . تم الاسترجاع 2026-03-17 .
  9. شاد، ج. (يوليو 2017). "RFC 8152: توقيع وتشفير كائنات CBOR (COSE)" . مؤرشف من الأصل بتاريخ 16 نوفمبر 2024. تم الاطلاع عليه بتاريخ 4 يوليو 2025 .
  10. ^ جونز، م. والستروم، E.؛ إردتمان، س. تشوفينيج، هـ. (مايو 2018). "RFC 8392: رمز ويب CBOR (CWT)" . تم الاسترجاع 2025-07-04 .