X.690 - X.690
X.690 je ITU-T standard určující několik ASN.1 formáty kódování:
- Základní pravidla kódování (BER)
- Kanonická pravidla kódování (CER)
- Rozlišující pravidla kódování (DER)
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 a syntaxe přenosu v jazyce ASN.1 uveďte přesné oktet sekvence, které se používají ke kódování dané datové položky. Syntaxe definuje takové prvky jako: reprezentace základních datových typů, struktura informací o délce a prostředky pro definování komplexních nebo složených typů založených na primitivnějších typech. Syntaxe BER spolu se dvěma podmnožinami BER ( Kanonická pravidla kódování a Rozlišující pravidla kódování ), jsou definovány ITU-T Dokument standardů X.690, který je součástí řady dokumentů ASN.1.
Kódování BER
Formát základních pravidel kódování určuje formát pro popis datových struktur ASN.1, který sám popisuje a sám sebe odděluje. Každý datový prvek je zakó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í typ-délka-hodnota nebo TLV kódování. Tento formát umožňuje přijímači dekódovat informace ASN.1 z neúplného proudu, aniž by vyžadoval jakékoli předběžné znalosti o velikosti, obsahu nebo sémantickém významu dat.[1]
Struktura kódování
Kódování dat se obvykle skládá ze čtyř komponent, které se objevují v následujícím pořadí:
Identifikační oktety Typ | Délka oktetů Délka | Obsah oktetů Hodnota | Oktety na konci obsahu |
Octety End-of-contents jsou volitelné a používají se pouze v případě, že se používá formulář s neurčitou délkou. Octet Contents může být také vynechán, pokud neexistuje žádný obsah ke kódování jako v typu NULL.
Identifikační oktety
Typy
Data (zejména členy posloupností a množin a možností) lze označit jedinečným číslem značky (zobrazeno v ASN.1 v hranatých závorkách []), aby se tato data od ostatních členů odlišila. Takové značky mohou být implicitní (kde jsou zakódovány jako značka TLV hodnoty namísto použití základního typu jako značky TLV) nebo explicitní (kde je značka použita ve vytvořeném TLV, který obaluje základní typ TLV). Výchozí styl značkování je explicitní, pokud není implicitní nastavena na úrovni modulu ASN.1. Takové značky mají výchozí třídu kontextově specifickou, ale kterou lze přepsat pomocí názvu třídy před značkou.
Kódování vybrané hodnoty je stejné jako kódování hodnoty vybraného typu. Kódování může být primitivní nebo zkonstruované v závislosti na zvoleném typu. Značka použitá v identifikátorových oktetech je značka vybraného typu, jak je uvedeno v definici ASN.1 vybraného typu.
Následující značky jsou nativní pro ASN.1:
název | Povolená konstrukce | 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 |
OCTET STRING | Oba | 4 | 4 |
NULA | Primitivní | 5 | 5 |
IDENTIFIKÁTOR OBJEKTŮ | Primitivní | 6 | 6 |
Deskriptor objektu | Oba | 7 | 7 |
EXTERNÍ | Postaveno | 8 | 8 |
REAL (plovák) | Primitivní | 9 | 9 |
ENUMERATED | Primitivní | 10 | A |
VLOŽENÉ PDV | Postaveno | 11 | B |
Řetězec UTF8 | Oba | 12 | C |
RELATIVNÍ OID | Primitivní | 13 | D |
ČAS | Primitivní | 14 | E |
Rezervováno | 15 | F | |
SEKVENCE a SEKVENCE | Postaveno | 16 | 10 |
SET a SET OF | Postaveno | 17 | 11 |
NumericString | Oba | 18 | 12 |
PrintableString | Oba | 19 | 13 |
Řetězec T61 | Oba | 20 | 14 |
Řetězec Videotex | 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 znaků | Postaveno | 29 | 1D |
Řetězec BMPS | 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 najdete na Rec. ITU-T X.680, bod 8, tabulka 1 [2] .
Kódování
Oktety identifikátoru kódují typ prvku jako značku ASN.1, skládající se z třídy a čísla a toho, zda oktety obsahu představují vytvořenou nebo primitivní hodnotu. Všimněte si, že některé typy mohou mít hodnoty buď s primitivním nebo konstruovaným kódováním. jako 1 nebo více oktetů.
1. října | 2. října | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
Třída značek | P / C | Číslo štítku (0–30) | N / A | ||||||||||||
31 | Více | Označ číslo |
V počátečním oktetu bit 6 kóduje, zda je typ primitivní nebo zkonstruovaný, bit 7–8 kóduje třídu typu a bity 1–5 kódují číslo tagu. Možné jsou 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 posloupnosti, množině nebo výběru) |
Soukromé | 3 | Definováno v soukromých specifikacích |
P / C | Hodnota | Popis |
---|---|---|
Primitivní (P) | 0 | Octety obsahu přímo kódují hodnotu prvku. |
Postaveno (C) | 1 | Octety obsahu obsahují 0, 1 nebo více kódování prvků. |
Dlouhá forma
Pokud je číslo tagu pro 5bitové pole tagu příliš velké, musí být zakódováno do dalších oktetů.
Počáteční oktet kóduje třídu a primitivní / konstruované jako dříve a bity 1–5 jsou 1. Číslo tagu je kódováno v následujících oktetech, kde bit 8 každého z nich je 1, pokud je jich více, a bity 1–7 kódují číslo tagu. Bity počtu tagů kombinované, big-endian, kódují číslo tagu. Měl by být kó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.
Formulář | Bity | |||||||
---|---|---|---|---|---|---|---|---|
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | |
Jednoznačné, krátké | 0 | Délka (0–127) | ||||||
Neurčitý | 1 | 0 | ||||||
Určitě, dlouhý | 1 | Počet následujících oktetů (1–126) | ||||||
Rezervováno | 1 | 127 |
Určitá forma
Toto kóduje počet oktetů obsahu a vždy se použije, pokud je typ primitivní nebo zkonstruovaný a data jsou okamžitě k dispozici. Existuje krátký formulář a dlouhý formulář, 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ý bit vždy jako první (napravo).
The krátká forma sestává z jediného oktetu, ve kterém bit 8 je 0, a bity 1–7 kódují délku (která může být 0) jako počet oktetů.
The dlouhá forma Skládá se z 1 počátečního oktetu následovaného 1 nebo více následnými oktety obsahujícími délku. V počátečním oktetu je bit 8 1 a bity 1–7 (kromě hodnot 0 a 127) kódují počet následujících oktetů.[1]Následující oktety kódují jako big-endian délku (která může být 0) jako počet oktetů.
1. října | 2. října | 3. října | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 oktetů obsahu |
Neomezená forma
To vůbec nekóduje délku, ale to, že oktety obsahu končí na oktetech značek. To platí pro konstruované typy a obvykle se používá, pokud obsah není okamžitě k dispozici v době kódování.
Skládá se z jediného oktetu, ve kterém bit 8 je 1 a bity 1–7 jsou 0. Pak 2 oktety na konci obsahu musí ukončit oktety obsahu.
Obsah oktetů
Octety obsahu kódují hodnotu dat prvku.[1]
Všimněte si, že nemusí existovat žádný obsah oktetů (proto má prvek délku 0), pokud je třeba poznamenat pouze existenci objektu ASN.1 nebo jeho prázdnotu. Například to je případ ASN. 1 NULL hodnota.
Kódování CER
CER (Canonical Encoding Rules) je omezená varianta BER pro vytvoření jednoznačné syntaxe přenosu pro datové struktury popsané v ASN.1. Zatímco BER poskytuje možnosti, jak lze kódovat datové hodnoty, CER (společně s DER ) vybere pouze jedno kódování z těch, které umožňují základní pravidla kódování, čímž se eliminují ostatní možnosti. CER je užitečné, když musí být kódování zachováno; např. v bezpečnostních burzách.
DER kódování
DER (Distinguished Encoding Rules) je omezená varianta BER pro vytvoření jednoznačné syntaxe přenosu pro datové struktury popsané v ASN.1. Jako CER, DER kódování jsou platná BER kódování. DER je stejná věc jako BER s odstraněnými možnostmi kromě jednoho odesílatele.
DER je podmnožina 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 kryptografie, a zajišťuje, že datová struktura, která musí být digitálně podepsána, vytváří jedinečnou serializovanou reprezentaci. DER lze považovat za kanonická forma BER. Například v BER a Booleovský value of true can be encoded as any of 255 non-zero byte values, while in DER there is one way to encode a boolean value of true.
Nejvýznamnější omezení kódování DER jsou:
- Kódování délky musí používat určitý tvar
- Navíc musí být použito kódování s co nejkratší délkou
- Bitstring, octetstring a omezené řetězce znaků musí používat primitivní kódování
- Prvky sady jsou kódovány v seřazeném pořadí na základě jejich hodnoty značky
DER je široce používán pro digitální certifikáty, jako je X.509.
Porovnány BER, CER a DER
Klíčovým rozdílem mezi formátem BER a formáty CER nebo DER je flexibilita poskytovaná základními pravidly kódování. BER, jak je vysvětleno výše, je základní sada pravidel kódování 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í odesílat, ale také ponechává odesílatelům některé 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říjemci, kteří tvrdí, že jsou v souladu se základními pravidly kódování, musí podporovat všechny alternativy“.[1]
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í předpisů BER. Naproti tomu CER i DER omezují dostupné specifikace délky na jednu možnost. CER a DER jsou tedy omezené formy BER a slouží k disambiguate standardu BER.
CER a DER se liší v souboru omezení, která ukládají na odesílatele. Základní rozdíl mezi CER a DER spočívá v tom, že DER používá definitivní délkový tvar a CER používá neurčitou délkovou formu v některých přesně stanovených případech. To znamená, že DER má vždy informace o úvodní délce, zatímco CER používá oktety konce obsahu namísto poskytnutí délky kódovaných dat. Z tohoto důvodu vyžaduje CER méně metadat pro velké kódované hodnoty, zatímco DER to dělá pro malé.
Abychom usnadnili výběr mezi pravidly kódování, poskytuje dokument standardů X.690 následující pokyny:
Rozlišující 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 je potřeba rychle přeskočit některé vnořené hodnoty. Kanonická pravidla kódování jsou vhodnější než rozlišující 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é kódovat a přenášet část hodnoty před celou hodnotu je k dispozici. Základní pravidla kódování jsou vhodnější než pravidla kanonického nebo odlišného kódování, pokud kódování obsahuje nastavenou hodnotu nebo nastavenou hodnotu a není potřeba omezení, která ukládají kanonická a odlišná pravidla kódování.
Kritika kódování BER
Ve srovnání s alternativními pravidly kódování je BER obecně vnímáno jako „neúčinné“. Někteří argumentovali, že toto vnímání je primárně způsobeno špatnou implementací, nemusí to nutně znamenat jakoukoli inherentní chybu v pravidlech kódování.[3] Tyto implementace se spoléhají na flexibilitu, kterou BER poskytuje při použití kódovací logiky, která se snáze implementuje, ale má za následek větší datový tok kódování, než je nutné. Ať už je tato neúčinnost realitou nebo vnímáním, vedla k řadě alternativních schémat kódování, jako je Zabalená pravidla kódování, které se pokoušejí zlepšit výkon a velikost BER.
Další alternativní pravidla formátování, která stále poskytují flexibilitu BER, ale používají alternativní schémata kódování, jsou rovněž vyvíjena. Nejoblíbenější z nich jsou alternativy založené na XML, například Pravidla kódování XML a ASN.1 MÝDLO.[4] Kromě toho existuje standardní mapování pro převod schématu XML na schéma ASN.1, které lze poté kódovat pomocí BER.[5]
Používání
Přes své vnímané problémy je BER populární formát pro přenos dat, zejména v systémech s různým nativním kódováním dat.
- The SNMP a LDAP protokoly specifikují ASN.1 s BER jako požadované schéma kódování.
- The EMV standard pro kreditní a debetní karty používá BER ke kódování dat na kartu
- 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í podpis nebo digitální obálka.
- Mnoho telekomunikačních systémů, jako např ISDN, směrování bezplatných hovorů a většina služeb mobilních telefonů používá ASN.1 s BER do určité míry k přenosu řídících zpráv po síti.
- GSM TAP (postupy převedeného účtu), NRTRDE Soubory (Near Real Time Roaming Data Exchange) jsou kódovány pomocí BER. [1]
Pro srovnání je jednoznačnější kódování DER široce používáno k přenosu digitálních certifikátů, jako je X.509.
Viz také
- Kerberos
- Zabalená pravidla kódování (PER, X.691)
- Formát výměny strukturovaných dat (SDXF )
- Serializace
Reference
Tento článek je založen na materiálu převzatém z Zdarma online slovník výpočetní techniky před 1. listopadem 2008 a začleněno pod "licencování" podmínek GFDL, verze 1.3 nebo novější.
- ^ A b C d Informační technologie - pravidla kódování ASN.1: Specifikace základních kódovacích pravidel (BER), kanonických kódovacích pravidel (CER) a rozlišovacích kódovacích pravidel (DER), ITU-T X6.90, 07/2002
- ^ http://itu.int/ITU-T/X.680
- ^ Lin, Huai-An. „Odhad optimálního výkonu syntaxe přenosu ASN.1 / BER“. Recenze počítačové komunikace ACM. 93. července 45-58.
- ^ ITU-T Rec. X.892, ISO / IEC 24824-2
- ^ ITU-T X.694, ISO / IEC ISO / IEC 8825-5
externí odkazy
- „Laický průvodce k podmnožině ASN.1, BER a DER“ společnosti RSA
- ITU-T X.690, ISO / IEC 8825-1
- ITU-T X.892, ISO / IEC 24824-2
- ITU-T X.694, ISO / IEC ISO / IEC 8825-5
- PKCS # 7
- jASN1 Otevřená kódovací knihovna Java ASN.1 BER / DER od beanit
- PHPASN1 Knihovna kódování / dekódování PHP ASN.1 BER na github, s licencí GPL
- ASN1js Knihovna kódování / dekódování Java ASN.1 BER na github, s licencí GPL
- Peter Gutmann „Průvodce stylem X.509“