Простой-TLV против BER-TLV

Я нашел в документах, которые они ссылаются на ПРОСТОЙ-TLV и BER-TLV . Я заглянул в большинство документов EMV и GP, но они не упоминали разные.

может ли кто-нибудь помочь мне понять разницу между двумя ?

2 ответов


поля данных в ISO / IEC 7816-4 для смарт-карт

BER кодировка

это спецификация более общего BER кодировка используется ISO / IEC 7816-4:

каждый объект данных BER-TLV должен состоять из 2 или 3 последовательных полей (см. ISO / IEC 8825 и приложение D).

поле тега T состоит из одного или нескольких последовательных байтов. Он кодирует класс, тип и число. Поле длины состоит из одного или больше последовательных байта. Он кодирует целое число L. Если L не равно null, то поле значения V состоит из L последовательных байтов. Если L равно null, то объект данных пуст: поле значение отсутствует.

обратите внимание, что ISO/IEC 7816 позволяет использовать только до 5 байт длины (указав размер до 2^32 - 1 байт) в текущем стандарте. Кодировка неопределенной длины также не поддерживается. Эти ограничения характерны для смарт-карт.

The BER TLV спецификация гораздо более экспансивна, как указывает "простая" часть SIMPLE-TLV. Я не буду вдаваться в детали слишком много, так как есть много информации, доступной в интернете.

обычно BER следует использовать только в качестве кодировки ASN.1 структуры, с ASN.1 синтаксис, определяющий структуру. Однако ISO 7816-4 портит это и только указывает байты тега BER напрямую.

обратите внимание, что иногда вместо BER указывается DER. В этом случае вы много только используете минимальное количество байтов для размера поля длины-например,05 в приведенных ниже примерах. Также обратите внимание, что спецификация ISO/IEC для кодирования BER в основном является копией стандарта X. 690 для США.

простой-TLV кодировка

спецификация BER за ней следует спецификация SIMPLE-TLV, которая специфична для ISO 7816-4. Обратите внимание, что стандарт забывает указать endianness напрямую. Вы можете предположить, что большая кодировка прямой в ИСО/МЭК 7816-4.

каждый объект данных SIMPLE-TLV состоит из 2 или 3 последовательных поля.

поле тега T состоит из одного байта, кодирующего только число из 1-254 (например, идентификатор записи). Его кодов нет класса и нет тип конструкции. Поле длины состоит из 1 или 3 подряд байты. Если ведущий байт поля length находится в диапазоне от '00' к 'FE', тогда поле длины состоит из однобайтовой кодировки целое число L ценится от 0 до 254. Если старший байт равен "FF", затем поле length продолжается на двух последующих байтах который кодирует целое число L со значением от 0 до 65535. Если L на не null, тогда поле значения V состоит из последовательных байтов. Если L null, тогда объект данных пуст: нет поля значения.

образцы

следующие образцы все использованы для того чтобы транспортировать такие же номер бирки (который определяет поле) и значение, за исключением тот, который определяет номер тега 31 для BER.

образец простой-TLV

0F 05 48656C6C6F                 // tag number 15, length 5 then the value
0F FF0005 48656C6C6F             // tag number 15, length 5 (two bytes), then the value

образец BER-TLV:

4F 05 48656C6C6F                 // *application specific*, primitive encoding of tag number 15, length 5 then the value
4F 8105 48656C6C6F               // the same, using two bytes to encode the length
4F 820005 48656C6C6F             // the same, using three bytes to encode the length
4F 83000005 48656C6C6F           // the same, using four bytes to encode the length
4F 8400000005 48656C6C6F         // the same , using five bytes to encode the length
5F0F 05 48656C6C6F               // **invalid** encoding of the same, with two bytes for the tag, specifiying a tag number 15 which is smaller than 31
5F1F 05 48656C6C6F               // application specific, primitive encoding of **tag number 31**

различия

следует отметить следующие различия:

  • SIMPLE-TLV-это другой метод кодирования для тега и длины (хотя кодировка может выглядеть аналогично, например, при использовании одного байта для указания части длины)
  • SIMPLE-TLV не содержит информации о классе поле, например, если оно определено для ASN.1 (потому что он не связан с ASN.1)
  • SIMPLE-TLV не содержит информации, если она примитивна или построена (примитив непосредственно указывает значение, построенное означает вложенные структуры TLV)
  • SIMPLE-TLV имеет ограничения относительно номера тега (от 1 до 254 включительно) и длины (до 65535)

простой TLV просто состоит из тега (или типа), длины и значения.

BER-TLV-это специальный TLV, который имеет один или несколько TLV внутри своего значения. Так оно имеет составную структуру.

Tag1 Len1 Tag2-Len2-Value2 Tag3-Len3-Value3 ... TagN-LenN-ValueN
          ------------------------Value1------------------------