X.690 - X.690

X.690 je standard ITU-T, který určuje několik formátů kódování ASN.1 :

Základní pravidla kódování byla původní pravidla stanovená standardem ASN.1 pro kódování abstraktních informací do konkrétního datového proudu. Pravidla, souhrnně označovaná jako syntaxe přenosu v jazyce ASN.1, určují přesné oktetové sekvence, které se používají ke kódování dané datové položky. Syntax definuje takové prvky jako: reprezentace pro základní datové typy, struktura informací o délce a prostředky pro definování komplexních nebo složených typů na základě primitivnějších typů. Syntaxe BER spolu se dvěma podmnožinami BER ( Canonical Encoding Rules a Distinguished Encoding Rules ) jsou definovány v dokumentu standardů ITU-T X.690, který je součástí řady dokumentů ASN.1.

Kódování BER

Formát pro základní pravidla kódování určuje formát pro vlastní popis a oddělování pro kódování datových struktur ASN.1. Každý datový prvek je kódován jako identifikátor typu, popis délky, skutečné datové prvky a v případě potřeby značka konce obsahu. Tyto typy kódování se běžně nazývají kódování TLV ( type -length -value). Tento formát umožňuje příjemci dekódovat informace ASN.1 z neúplného proudu, aniž by vyžadoval jakékoli předběžné znalosti velikosti, obsahu nebo sémantického významu dat.

Struktura kódování

Kódování dat se obecně skládá ze čtyř komponent, které se objevují v následujícím pořadí:

Oktety identifikátoru
Typ
Délka oktetů
Délka
Obsah oktety
Hodnota
Oktety na konci obsahu

Oktety na konci obsahu jsou volitelné a používají se pouze v případě, že je použit tvar neurčité délky. Octet obsahu může být také vynechán, pokud neexistuje žádný obsah ke kódování jako u typu NULL.

Identifikační oktety

Typy

Data (zejména členy sekvencí, sad a voleb) lze označit jedinečným číslem tagu (zobrazeným v ASN.1 v hranatých závorkách []), aby se tato data odlišila od ostatních členů. Takové tagy mohou být implicitní (kde jsou zakódovány jako TLV tag hodnoty namísto použití základního typu jako TLV tagu) nebo explicitní (kde je tag použit v konstruovaném TLV, který obaluje TLV základního typu). Výchozí styl značkování je explicitní, pokud není na úrovni modulu ASN.1 nastaven implicitní. Takové značky mají výchozí třídu kontextově specifickou, ale lze ji přepsat pomocí názvu třídy před značkou.

Kódování hodnoty volby je stejné jako kódování hodnoty zvoleného typu. Kódování může být primitivní nebo konstruované v závislosti na zvoleném typu. Tag použitý v oktetech identifikátoru je tag zvoleného typu, jak je uvedeno v definici ASN.1 zvoleného typu.

Následující značky jsou nativní pro ASN.1:

Typy, univerzální třída
název Povolená stavba Označ číslo
Desetinný Hexadecimální
Konec obsahu (EOC) Primitivní 0 0
BOOLEAN Primitivní 1 1
CELÉ ČÍSLO Primitivní 2 2
BIT STRING Oba 3 3
OCTETOVÁ STRUNA Oba 4 4
NULA Primitivní 5 5
IDENTIFIKÁTOR OBJEKTU Primitivní 6 6
Popisovač objektu Oba 7 7
EXTERNÍ Vyrobeno 8 8
SKUTEČNÉ (plovoucí) Primitivní 9 9
ENUMEROVÁNO Primitivní 10 A
ZAPOJENÉ PDV Vyrobeno 11 B
Řetězec UTF8 Oba 12 C
RELATIVNÍ OID Primitivní 13 D
ČAS Primitivní 14 E
Rezervováno 15 F
SEKVENCE a SEKVENCE OD Vyrobeno 16 10
SET a SET OF Vyrobeno 17 11
NumericString Oba 18 12
PrintableString Oba 19 13
Řetěz T61 Oba 20 14
VideotexString Oba 21 15
Řetězec IA5 Oba 22 16
UTCTime Oba 23 17
GeneralizedTime Oba 24 18
GraphicString Oba 25 19
VisibleString Oba 26 1A
GeneralString Oba 27 1B
UniversalString Oba 28 1C
ŘETĚZEC ZNAKU Vyrobeno 29 1D
BMPString Oba 30 1E
DATUM Primitivní 31 1F
TIME-OF-DAY Primitivní 32 20
ČAS SCHŮZKY Primitivní 33 21
DOBA TRVÁNÍ Primitivní 34 22
OID-IRI Primitivní 35 23
RELATIVNÍ OID-IRI Primitivní 36 24

Seznam přiřazení značek Universal Class lze nalézt na Rec. ITU-T X.680, článek 8, tabulka 1.

Kódování

Oktety identifikátoru kódují typ prvku jako značku ASN.1, skládající se ze třídy a čísla a zda oktety obsahu představují vytvořenou nebo primitivní hodnotu. Některé typy mohou mít hodnoty buď s primitivním, nebo vytvořeným kódováním. Je kódován jako 1 nebo více oktetů.

Oktet 1 Od 2. října
8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1
Třída tagů P/C Číslo značky (0–30) N/A
31 Více Označ číslo

V počátečním oktetu bit 6 kóduje, zda je typ primitivní nebo konstruovaný, bit 7–8 kóduje třídu typu a bity 1–5 kódují číslo značky. Jsou možné následující hodnoty:

Třída Hodnota Popis
Univerzální 0 Typ je nativní pro ASN.1
aplikace 1 Typ je platný pouze pro jednu konkrétní aplikaci
Kontextově specifické 2 Význam tohoto typu závisí na kontextu (například v rámci sekvence, sady nebo výběru)
Soukromý 3 Definováno v soukromých specifikacích
P/C Hodnota Popis
Primitivní (P) 0 Obsahové oktety přímo kódují hodnotu prvku.
Vyrobeno (C) 1 Oktety obsahu obsahují 0, 1 nebo více kódování prvků.

Dlouhá forma

Pokud je číslo značky pro pole 5bitových značek příliš velké, musí být zakódováno v dalších oktetech.

Počáteční oktet kóduje třídu a primitivní/konstruovanou jako dříve a bity 1–5 jsou 1. Číslo značky je zakódováno v následujících oktetech, kde bit 8 každého je 1, pokud existuje více oktetů, a bity 1–7 kódují číslo značky. Kombinované bity čísla tagu, big-endian, kódují číslo tagu. Měl by být zakódován nejmenší počet následujících oktetů; to znamená, že bity 1–7 by neměly být všechny 0 v prvním následujícím oktetu.

Délka oktetů

Existují dvě formy délkových oktetů: Definitivní forma a neurčitá forma.

První oktet
Formulář Bity
8 7 6 5 4 3 2 1
Jednoznačně, krátce 0 Délka (0–127)
Neurčitý 1 0
Určitě, dlouho 1 Počet následujících oktetů (1–126)
Rezervováno 1 127

Definitivní forma

Toto kóduje počet oktetů obsahu a používá se vždy, pokud je typ primitivní nebo konstruovaný a data jsou okamžitě k dispozici. Existuje krátká forma a dlouhá forma, která může kódovat různé rozsahy délek. Číselná data jsou kódována jako celá čísla bez znaménka s nejméně významným bitem vždy na prvním místě (vpravo).

Krátká forma se skládá z jednoho oktetu, ve kterém bit 8 je 0 a bity 1-7 kódování délky (která může být 0) jako počet oktetů.

Dlouhá forma se skládá z 1 počáteční oktet a pak 1 nebo více dalších oktetů, obsahující délku. V počátečním oktetu je bit 8 1 a bity 1–7 (bez hodnot 0 a 127) kódují počet následujících oktetů. Následující oktety kódují jako big-endian délku (která může být 0) jako počet oktetů.

Příklad dlouhé formy, délka 435
Oktet 1 Octet 2 Octet 3
1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1
Dlouhá forma 2 oktety délky 435 obsahových oktetů

Neurčitá forma

To vůbec nekóduje délku, ale že obsahové oktety končí na značkových oktetech. To platí pro konstruované typy a obvykle se používá, pokud obsah není v době kódování okamžitě k dispozici.

Skládá se z jednoho oktetu, ve kterém bit 8 je 1, a bity 1–7 jsou 0. Potom musí 2 oktety konce obsahu ukončit obsahové oktety.

Obsah oktetů

Obsahové oktety kódují hodnotu dat prvku.

Všimněte si, že nemusí existovat žádné obsahové oktety (proto má prvek délku 0), pokud je třeba poznamenat pouze existenci objektu ASN.1 nebo jeho prázdnotu. To je například případ hodnoty NULL ASN.1.

Kódování CER

CER (Canonical Encoding Rules) je omezená varianta BER pro vytváření jednoznačné syntaxe přenosu pro datové struktury popsané v ASN.1 . Zatímco BER dává na výběr, jak mohou být kódovány hodnoty dat, CER (společně s DER ) vybírá pouze jedno kódování z těch, které umožňují základní pravidla kódování, čímž eliminuje zbývající možnosti. CER je užitečný, když musí být zachována kódování; např. na bezpečnostních burzách.

Kódování DER

DER (Distinguished Encoding Rules) je omezená varianta BER pro vytváření jednoznačné syntaxe přenosu pro datové struktury popsané v ASN.1 . Stejně jako CER jsou kódování DER platná kódování BER. DER je to samé jako BER, ale jsou odstraněny všechny možnosti kromě jednoho odesílatele.

DER je podmnožinou BER, která poskytuje přesně jeden způsob kódování hodnoty ASN.1. DER je určen pro situace, kdy je potřeba jedinečné kódování, například v kryptografii , a zajišťuje, že datová struktura, kterou je třeba digitálně podepsat, vytváří jedinečnou serializovanou reprezentaci. DER lze považovat za kanonickou formu BER. Například v BER lze booleovskou hodnotu true zakódovat jako kteroukoli z 255 nenulových bajtových hodnot, zatímco v DER existuje jeden způsob, jak zakódovat booleovskou hodnotu true.

Nejvýznamnější omezení kódování DER jsou:

  1. Kódování délky musí používat určitý tvar
    • Kromě toho musí být použito kódování co nejkratší délky
  2. Řetězce bitových řetězců, oktetové řetězce a omezené znaky musí používat primitivní kódování
  3. Prvky sady jsou kódovány v seřazeném pořadí na základě jejich hodnoty tagu

DER je široce používán pro digitální certifikáty, jako je X.509 .

Srovnání BER, CER a DER

Klíčovým rozdílem mezi formátem BER a formátem CER nebo DER je flexibilita poskytovaná základními pravidly kódování. Jak je vysvětleno výše, BER je základní sada kódovacích pravidel daných ITU-T X.690 pro přenos datových struktur ASN.1. Poskytuje odesílatelům jasná pravidla pro kódování datových struktur, které chtějí odeslat, ale také ponechává odesílatelům určité možnosti kódování. Jak je uvedeno ve standardu X.690, „Alternativní kódování jsou povolena základními pravidly kódování jako volba odesílatele. Přijímače, kteří tvrdí, že jsou v souladu se základními pravidly kódování, musí podporovat všechny alternativy“.

Přijímač musí být připraven přijmout všechna zákonná kódování, aby mohl oprávněně požadovat dodržování BER. Naproti tomu CER i DER omezují dostupné specifikace délky na jedinou možnost. CER a DER jako takové jsou omezenými formami BER a slouží k disambiguaci standardu BER.

CER a DER se liší v sadě omezení, která kladou na odesílatele. Základní rozdíl mezi CER a DER spočívá v tom, že DER v některých přesně definovaných případech používá formu s konečnou délkou a CER používá formu s neurčitou délkou. To znamená, že DER má vždy informace o úvodní délce, zatímco CER místo poskytnutí délky kódovaných dat používá oktety na konci obsahu. Z tohoto důvodu CER vyžaduje méně metadat pro velké kódované hodnoty, zatímco DER to dělá pro malé.

Aby se usnadnila volba mezi pravidly kódování, poskytuje dokument standardů X.690 následující pokyny:

Rozlišená pravidla kódování jsou vhodnější než pravidla kanonického kódování, pokud je kódovaná hodnota dostatečně malá, aby se vešla do dostupné paměti, a existuje potřeba rychle přeskočit některé vnořené hodnoty. Kanonická pravidla kódování jsou vhodnější než rozlišovací pravidla kódování, pokud existuje potřeba kódovat hodnoty, které jsou tak velké, že se nemohou snadno vejít do dostupné paměti, nebo je nutné zakódovat a odeslat část hodnoty před celou hodnotu je k dispozici. Základní kódovací pravidla jsou vhodnější než kanonická nebo rozlišovací kódovací pravidla, pokud kódování obsahuje nastavenou hodnotu nebo sadu hodnot a není třeba žádných omezení, která ukládají kanonická a rozlišovací pravidla kódování.

Kritika kódování BER

Ve srovnání s alternativními pravidly kódování je BER obecně vnímán jako „neefektivní“. Někteří tvrdili, že toto vnímání je primárně způsobeno špatnou implementací, ne nutně nějakou inherentní vadou v pravidlech kódování. Tyto implementace spoléhají na flexibilitu, kterou BER poskytuje při používání logiky kódování, která se snadněji implementuje, ale má za následek větší tok kódovaných dat, než je nutné. Ať už je tato neefektivita realitou nebo vnímáním, vedla k řadě alternativních kódovacích schémat, jako jsou pravidla pro balené kódování , která se pokoušejí zlepšit výkon a velikost BER.

Vyvíjejí se také další alternativní pravidla formátování, která stále poskytují flexibilitu BER, ale používají alternativní schémata kódování. Nejoblíbenější z nich jsou alternativy založené na XML , jako jsou pravidla pro kódování XML a SOAP ASN.1 . Kromě toho existuje standardní mapování pro převod schématu XML na schéma ASN.1, které lze poté kódovat pomocí BER.

Používání

Navzdory svým vnímaným problémům je BER oblíbeným formátem pro přenos dat, zejména v systémech s odlišným nativním kódováním dat.

  • Protokoly SNMP a LDAP specifikují jako požadované schéma kódování ASN.1 s BER.
  • Standard EMV pro kreditní a debetní karty používá ke kódování dat na kartu BER
  • Standard digitálního podpisu PKCS #7 také specifikuje ASN.1 s BER pro kódování šifrovaných zpráv a jejich digitálního podpisu nebo digitální obálky .
  • Mnoho telekomunikačních systémů, jako je ISDN , směrování bezplatných hovorů a většina služeb mobilních telefonů, do určité míry používají ASN.1 s BER k přenosu řídicích zpráv po síti.
  • Soubory GSM TAP (Transferred Account Procedures), NRTRDE (Near Real Time Roaming Data Exchange) jsou kódovány pomocí BER. [1]

Pro srovnání, konkrétnější kódování DER se široce používá k přenosu digitálních certifikátů, jako je X.509 .

Viz také

Reference

Tento článek vychází z materiálu převzatého z Free On-line Dictionary of Computing před 1. listopadem 2008 a začleněn pod podmínky „relicencování“ GFDL , verze 1.3 nebo novější.

externí odkazy