Type-length-value

TLV (Type-length-value) je obecný název pro formát dat, která jsou složena z řady bloků:

  • Značka (anglicky type nebo tag) – číslo popisující typ dat v daném bloku; například „textový řetězec“
  • Délka (anglicky length) – číslo udávající délku dat v daném bloku; například „4 byte“
  • Data daného bloku; například „Ahoj“

Struktury TLV obvykle používají binární formát dat, často jsou zaměřené na optimalizaci objemu a rychlosti zpracování dat. Používají se také pro přenos nekonečného proudu dat, například v telekomunikacích.

Známým příkladem použití struktury typu TLV je standard ASN.1.

BER-TLV

Formátu BER-TLV se používá v kryptografii, například pro ukládání datových objektů na čipových kartičkách. Je popsán v ISO/IEC 7816, část 4, kapitola 5.2 (datové objekty). Některé značky popisuje také ISO/IEC 7816.

Struktura:

  • libovolněkrát trojice: značka - délka dat - data
  • v datovém objektu na začátku/na konci/mezi jednotlivými TLV bloky mohou být bajty s hodnotou 0x00 (padding, vata)
  • značka: přímo binární hodnota značky
    • jednobajtová značka: A, kde A & 0x1F != 0x1F (pět nejméně významných bitů nesmí být pět jedniček)
    • dvoubajtová značka: A C, kde A & 0x1F == 0x1F a C < 0x80
    • tříbajtová značka: A B C, kde A & 0x1F == 0x1F, B >= 0x80 a C < 0x80
  • délka
    • jednobajtová délka: A, kde A < 0x80; A je délka dat (binární číslo)
    • dvoubajtová délka: 0x81 A; A je délka dat (binární číslo)
    • tříbajtová délka: 0x82 A B; AB je délka dat (binární číslo)
    • čtyřbajtová délka: 0x83 A B C; ABC je délka dat (binární číslo)
    • pětibajtová délka: 0x84 A B C D; ABCD je délka dat (binární číslo)
  • data, například:
    • textový řetězec v kódování v utf-8
    • číslo - číslo binárně (4 byte)
    • datum: YYYYMMDD, kde YYYY je rok, MM je měsíc a DD je den v měsíci (textově)
    • vložená BER-TLV hodnota
    • a další (teoreticky cokoli)

Formát značky:

  • délka značky může být 1 až 3 bajty, vyšší hodnoty jsou rezervovány pro budoucí použití
  • hodnota značky nesmí být 0x00
  • 8. a 7. bit je nastaven na hodnotu 00 - univerzální třída značky; hodnota značky není definována v ISO/IEC 7816, význam značky nezávisí na kontextu (na pozici v datovém objektu)
  • 8. a 7. bit je nastaven na hodnotu 01 - aplikační třída značky; hodnota značky musí být definována v ISO/IEC 7816, část 6
  • 8. a 7. bit je nastaven na hodnotu 10 - třída značky závislá na kontextu; hodnota značky je definována v ISO/IEC 7816
  • 8. a 7. bit je nastaven na hodnotu 11 - soukromá třída značky; hodnota značky není definována v ISO/IEC 7816
  • 6. bit je nastaven na 1 - data v daném TLV bloku jsou strukturovaná (tj. jsou ve formátu BER-TLV)
  • 6. bit je nastaven na 0 - data v daném TLV bloku nejsou strukturovaná (tj. nejsou ve formátu BER-TLV)
  • 5. až 1. bit jsou nastaveny na 11111 (0x1F) - délka značky je delší než 1 byte
    • druhý byte nesmí nabývat hodnot 0x80 a 0x00 až 0x1E
    • u další bytů značky s výjimkou posledního je nastaven 8. bit na hodnotu 1
    • u posledního bytů značky je nastaven 8. bit na hodnotu 0
  • 5. až 1. bit jsou nastaveny na jinou hodnotu než 11111 - délka značky je 1 byte

Odkazy

Související články

Externí odkazy

  • tlve Obecný TLV parser