ПРОСТО-TLV против BER-TLV

nfc javacard apdu

13519 просмотра

2 ответа

1450 Репутация автора

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

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

Автор: nish1013 Источник Размещён: 17.09.2013 03:23

Ответы (2)


1 плюс

2152 Репутация автора

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

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

Tag1 Len1 Tag2-Len2-Value2 Tag3-Len3-Value3 ... TagN-LenN-ValueN
          ------------------------Value1------------------------
Автор: David Размещён: 19.09.2013 08:02

24 плюса

62593 Репутация автора

Решение

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

Кодировка BER

Это спецификация более распространенной кодировки BER, используемой ISO / IEC 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.

SIMPLE-TLV кодирование

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

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

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

образцы

Следующие примеры используются для передачи одного и того же номера тега (который определяет поле) и значения, за исключением одного, который определяет номер тега 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)
Автор: Maarten Bodewes Размещён: 21.09.2013 12:34
32x32