بطاقات ذكية. الجزء 3. TLV

مرحبا Giktayms!

في الجزء الأخير ، رأينا كيف يحدث الاتصال بين الجهاز والبطاقة. لقد نظرنا في تنسيقي C-APDU و R-APDU ، لكننا لم ننتبه إلى البيانات التي تحتوي عليها هذه APDU. في هذا الجزء ، سنأخذ في الاعتبار الأشكال الأكثر شيوعًا التي يتم فيها إرسال المعلومات بين الجهاز والبطاقة (والعكس صحيح). جميعهم ينتمون إلى عائلة واحدة - TLV.

TLV هي اختصار لـ T ag و L ength و V alue وتستخدم لتكوين المعلومات. على المستوى التجريدي للغاية ، يمكن اعتبار TLVs كنسخة ثنائية من XML. ومع ذلك ، ما هي العلامة والطول والقيمة؟

  • العلامة : تقول ما هو نوع المعلومات الموجودة في TLV. يمكن أن يكون العرض ، على سبيل المثال ، خطًا أو رقمًا بسيطًا ، أو معرفًا ، أو حتى بنية معقدة. في بعض النماذج ، يحتوي Tag أيضًا على معلومات تعريفية عن TLV.
  • الطول : طول عنصر القيمة بالبايت.
  • القيمة : البيانات الواردة في TLV

لكل متغير TLV قواعد ترميز خاصة به لكل عنصر. بعد ذلك ، سنلقي نظرة على خيارات TLV الأكثر شيوعًا. أود أن أشير على الفور إلى أن هذه المقالة ستخصص بشكل أساسي لـ BER-TLV ، نظرًا لأن هذا هو الشكل الأكثر انتشارًا ومرونة وتعقيدًا. سيتم النظر في خيارات TLV الأخرى لفترة وجيزة فقط.

BER-TLV


لذا ، نحن نتحدث عن الشخصية الرئيسية لهذا المقال - BER-TLV. هذا جزء من معيار ASN.1 ويستخدم ليس فقط في مجال البطاقات الذكية.

بطاقة شعار

البايت الأول للعلامة بالتنسيق التالي:
ب 8ب 7ب 6ب 5ب 4ب 3ب 2ب 1
صف دراسينوعبطاقة شعار

الفئات التالية موجودة:
ب 8ب 7وصف
00عام - أنواع البيانات الأساسية ، مثل بيانات السلسلة أو الأرقام. نادرا ما تستخدم في البطاقات الذكية.
01التطبيقية - الأنواع التي يختلف معناها حسب التطبيق
10حساسة للسياق - الأنواع التي يعتمد معناها على نوع مركب معين
11خاص - الأنواع التي يعتمد معناها على منظمة معينة

نظرًا لأن المواصفات تصف القيمة الكاملة للعلامة ، فإن تذكر قيمة الفئات أمر غير ضروري تمامًا. لا يؤثر الفصل الدراسي على كيفية معالجة العلامة.

الأكثر إثارة للاهتمام هو بت 6. عندما تكون 1 ، فإن TLV هذا يحتوي على TLVs أخرى. إذا ، على العكس من ذلك ، كانت قيمته 0 ، فإن TLV يحتوي على بيانات بسيطة أو بيانات غير منظمة في تنسيق TLV.

عادةً ما تكون البتات المتبقية (5-1) مجرد رقم العلامة. ومع ذلك ، إذا كانت جميعها وحدات ، فسيستمر رقم العلامة في البايت الثاني. إذا كانت bit8 للبايت الثاني تساوي 1 ، فسيستمر الرقم في البايت الثالث ، إلخ. من الناحية العملية ، تستخدم البطاقات الذكية فقط العلامات المكتوبة على بايت واحد أو وحدتي بايت.

الطول

يمكن أن يكون الطول محددًا وغير محدد.

تتم كتابة طول غير محدد على بايت واحد بقيمة 0x80. هذه الطريقة صالحة فقط لـ TLVs المركبة (أي TLVs التي تحتوي على TLVs أخرى). في هذه الحالة ، يجب أن يحتوي TLV بالضرورة على TLV-NULL باعتباره العنصر الأخير ، والذي تم ترميزه كـ "00 00". غالبًا ما يتم استخدام طريقة مماثلة في المعايير الأكثر حداثة ، ولكنها ، بشكل عام ، ليست شائعة جدًا.

تتم كتابة طول محدد على بايت واحد أو أكثر.
طول البياناتالترميز
0x00 <= x <= 0x7Fتتم كتابة القيمة دون تغيير على بايت واحد
0x80 <= x <= 0xFF0x81 والقيمة على البايت الثاني
0x100 <= x <= 0xFFFF0x82 والقيمة على البايت الثاني والثالث
0x10000 <= x <= 0xFFFFFF0x83 والقيمة على البايت الثلاثة التالية
0x1000000 <= x <= 0xFFFFFFFF0x84 والقيمة على البايت الأربعة التالية

من حيث المبدأ ، يمكن مواصلة هذا الجدول أكثر. ومع ذلك ، لم يتم العثور على TLVs ضخمة في مجال البطاقات الذكية. الطول المسجل على أكثر من ثلاثة بايت (بما في ذلك البادئة 0x82) ، أنا شخصياً لم أر. يتم كتابة القيم دائمًا بتنسيق Big Endian.

يرجى ملاحظة أنه في البطاقات الذكية ، غالبًا ما يتم استخدام طريقة طول التسجيل هذه حتى خارج TLV (أي LV فقط) ، ولكن كقاعدة عامة ، باستثناء أنه يمكن أيضًا كتابة القيمة 0x80 كما هي ، على بايت واحد.

القيمة

يمكن أن تكون القيمة إما تسلسل TLV أو مجرد وحدات بايت ، والتي يعتمد معناها على السياق والتطبيق. ليس من المقبول مزج نوعي البيانات في نفس TLV. يمكن أن تكون TLVs الموجودة في مركب TLV من أي نوع - مركب أو بسيط. هذا العنصر مفقود عندما يكون طول TLV 0.

أمثلة

AID (معرف التطبيق)
4F 08 A0 00 00 01 51 00 00 00

العلامة 0x4F: تطبيق TLV بسيط ، في هذا المثال يحتوي على 8 بايت (قيمته معرّف التطبيق ، أي معرف التطبيق).

حالة دورة الحياة
9F70 01 0F

العلامة 0x9F70: TLV بسيط حساس للسياق ، في هذا المثال يحتوي على 1 بايت. لاحظ أنه في البايت الأول للعلامة (9F) ، تكون البتات 5-1 كلها وحدات ، لذلك تستمر العلامة في البايت التالي.

تحميل كتلة بيانات الملف
C4 82 0x01 0x0c 01 ... 266 بايت أخرى ... 0 أ

العلامة 0xC4: TLV خاص بسيط ، في هذا المثال ، يحتوي على 268 بايت. الطول مكتوب بثلاث بايتات ، أولها البادئة 0x82.

بيانات GlobalPlatform Registry ذات الصلة
E3 11 4F 08 A0 00 00 01 51 00 00 00 9F70 01 0F C5 01 00

العلامة 0xE3: TLV خاص مركب يحتوي على TLVs أخرى. في هذا المثال ، يحتوي فقط على TLVs بسيطة. يجوز أيضًا احتواء مركب TLV أو خليط من مركب وبسيط.

من الناحية النظرية ، يمكن كتابة ذلك أيضًا
E3 80 4F 08 A0 00 00 01 51 00 00 00 9F70 01 0F C5 01 00 00 00

باستخدام طول غير محدد. ومع ذلك ، من الناحية العملية ، تقبل البطاقة (أو ترسل) فقط إلى أجل غير مسمى عندما تسمح به المواصفات.

ضغط- TLV


تم وصف COMPLEHENSION-TLV في معيار ETSI TS 101 220. يتم ترميز الطول بنفس الطريقة كما هو الحال في BER-TLV. يتم ترميز العلامة وفقًا للجداول التالية:

على بايت واحد (0x01 - 0x7E)
ب 8ب 7ب 6ب 5ب 4ب 3ب 2ب 1
سجل تجاريبطاقة شعار

على ثلاثة بايت (0x0001 - 0x7FFF)
البايت 1بايت 2بايت 3
ب -8 ب 1ب 8ب 7ب 6ب 5ب 4ب 3ب 2ب 1ب -8 ب 1
0x7Fسجل تجاريبطاقة شعار


يشير اختصار CR إلى الفهم المطلوب. عندما يكون هذا البت 1 ، يجب أن يعرض جهاز استقبال TLV خطأ إذا لم يكن يدعم TLV هذا. إذا كان ، على العكس من ذلك ، يساوي 0 ، فعندئذٍ يحق للمستلم تجاهل TLV إذا لم يكن مدعومًا.

التطبيق الرئيسي لـ COMPREHENSION-TLV هو نقل المعلمات إلى SIM-Toolkit (يتم استخدام SIM-Toolkit ، من بين أشياء أخرى ، لقائمة SIM في الهواتف). لزيادة التوافق بين البطاقات والهواتف ، يتم إرسال المعلمات الاختيارية (أي تلك المعلمات التي بدونها يمكنك تنفيذ الأمر بطريقة ما على الأقل) باستخدام CR = 0.

بسيطة- TLV


تم وصف SIMPLE-TLV في ISO7816-4. على عكس BER-TLV في SIMPLE-TLV ، فإن العلامة هي ببساطة رقم بين 0x01 و 0xFE لا يحتوي على معلومات الفئة والنوع. الطول مكتوب على النحو التالي:
طول البياناتالترميز
0x00 <= x <= 0xFEتتم كتابة القيمة دون تغيير على بايت واحد
0xFF <= x <= 0xFFFF0xFF والقيمة على البايت الثاني والثالث


DGI (معرف تجميع البيانات)


تم وصف DGI في مواصفات بطاقة النظام الأساسي العالمي ومواصفات لغة البرمجة النصية لأنظمة GP. يتم ترميز العلامة دائمًا على وحدتي بايت ولا تحتوي على أي معلومات تعريفية. يتم تسجيل الطول بنفس طريقة تسجيل SIMPLE-TLV. غالبًا ما تحتوي DGIs على BER-TLVs ، ولكن يمكن أن تكون بسيطة.

COMPACT-TLV


تم وصف COMPACT-TLV في ISO7816-4 ويستخدم حصريًا في ATR (الإجابة على إعادة الضبط). في هذا التنسيق ، تتم كتابة العلامة والطول بنفس البايت. العلامة مكتوبة في القضم الأقدم ، ويكتب الطول في القاصر.

لذلك وصلنا إلى نهاية هذا الجزء. إذا كان لدى أي شخص أسئلة ، يمكنك كتابتها في التعليقات. الجزء التالي من المقالة سيكون حول JavaCard ، وبعد ذلك سنتحدث مباشرة عن المنصة العالمية.

بقية المقال


الجزء 1. مبادئ العملية
الجزء 2. APDU

All Articles