Простой-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------------------------