gpt4 book ai didi

nfc - SIMPLE-TLV 与 BER-TLV

转载 作者:行者123 更新时间:2023-12-03 13:24:32 24 4
gpt4 key购买 nike

我在他们所指的文档中找到了 简单的 TLV BER-TLV .我查看了大多数 EMV 和 GP 文档,但他们没有提到不同之处。

谁能帮我理解两者的区别?

最佳答案

ISO/IEC 7816-4 中智能卡的数据字段

BER编码

这是比较常见的BER encoding的规范ISO/IEC 7816-4 使用:

Each BER-TLV data object shall consists of 2 or 3 consecutive fields (see ISO/IEC 8825 and annex D).

The tag field T consists of one or more consecutive bytes. It encodes a class, a type and a number. The length field consists of one or more consecutive bytes. It encodes an integer L. If L is not null, then the value field V consists of L consecutive bytes. If L is null, then the data object is empty: there is no value field.



请注意,在当前标准中,ISO/IEC 7816 仅允许使用最多 5 个长度字节(指定最大大小为 2^32 - 1 个字节)。也不支持不定长编码。这些限制特定于智能卡。请注意,在 ISO/IEC 7816-4 的更高版本中引入了 4 和 5 字节长度编码;早期的卡/读卡应用程序可能仅支持 3 个长度字节(即值大小高达 64KiB 字节,而不是 4GiB)。

BER TLV 规范更加广泛(这就是 SIMPLE-TLV 被称为“简单”的原因)。我不会过多介绍细节,因为互联网上有很多可用的信息。仅举几个不同之处,标签具有语法意义,可能由多个字节组成,长度编码相当复杂。

通常,BER 应该只用作 ASN.1 结构的编码,并使用 ASN.1 语法定义结构。然而,ISO 7816-4 把这搞砸了,只直接指定了 BER 标签字节。

请注意,有时会指定 DER 而不是 BER。在这种情况下,您应该只使用最小字节数作为长度字段的大小 - 例如具有值 05 的单个长度字节在下面的示例中。 BER 编码的 ISO/IEC 规范基本上是美国特定 X.690 标准的副本,也反射(reflect)在国际标准 ISO/IEC 8825-1(均为付费软件)中。

SIMPLE-TLV 编码

ISO/IEC 7816-4 中的 BER 规范之后是 SIMPLE-TLV 规范。 SIMPLE-TLV 特定于 ISO 7816-4。

Each SIMPLE-TLV data object shall consist of 2 or 3 consecutive fields.

The tag field T consists of a single byte encoding only a number from 1 to 254 (e.g. a record identifier). It codes no class and no construction-type. The length field consists of 1 or 3 consecutive bytes. If the leading byte of the length field is in the range from '00' to 'FE', then the length field consists of a single byte encoding an integer L valued from 0 to 254. If the leading byte is equal to 'FF', then the length field continues on the two subsequent bytes which encode an integer L with a value from 0 to 65535. If L in not null, then the value field V consists of consecutive bytes. If L is null, then the data object is empty: there is no value field.



请注意,标准忘记直接指定字节顺序。但是,您可以假设 ISO/IEC 7816-4 中的大端编码。

sample

以下示例均用于传达相同的标签号(定义字段)和值,但为 BER 定义标签号 31 的示例除外。

示例 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)有限制
  • 关于nfc - SIMPLE-TLV 与 BER-TLV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18853800/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com