Подтвердить что ты не робот

SIMPLE-TLV против BER-TLV

Я нашел в документах, что они относятся к SIMPLE-TLV и BER-TLV. Я изучал большинство документов EMV и GP, но они не упоминали разные.

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

4b9b3361

Ответ 1

Поля данных в ИСО/МЭК 7816-4 для смарт-карт

Кодировка BER

Это спецификация наиболее распространенной кодировки BER, используемой в ИСО/МЭК 7816-4:

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

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

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

Спецификация BER TLV гораздо более обширна (именно поэтому SIMPLE-TLV называется "простой"). Я не буду вдаваться в подробности, так как в Интернете достаточно информации. Чтобы назвать лишь несколько различий, теги имеют синтаксическое значение и могут состоять из нескольких байтов, а кодирование длины довольно сложно.

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

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

Кодировка SIMPLE-TLV

За спецификацией BER в ISO/IEC 7816-4 следует спецификация SIMPLE-TLV. SIMPLE-TLV соответствует стандарту ISO 7816-4.

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

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

Обратите внимание, что стандарт забывает указывать порядок байтов напрямую. Однако вы можете принять кодирование с прямым порядком байтов в ISO/IEC 7816-4.

Образцы

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

Образец SIMPLE-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**

В последнем примере с двухбайтовой кодировкой тега первый байт равен 40 шестнадцатеричным, где первые 3 крайних левых бита 010 определяют кодирование, специфичное для приложения, добавляя к нему магическое значение 1F (31), чтобы указать, что последует другой байт с фактическим номером тега, снова 1F, поэтому значение 31.

Различия

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

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

Ответ 2

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

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

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