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í (BER)
- Pravidla kanonického kódování (CER)
- Rozlišovací 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 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:
| 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.
| 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ů.
| 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:
- 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
- Řetězce bitových řetězců, oktetové řetězce a omezené znaky musí používat primitivní kódování
- 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é
- Kerberos
- Balíček pravidel kódování (PER, X.691)
- Prezentační vrstva
- Formát pro výměnu strukturovaných dat ( SDXF )
- Serializace
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
- Příručka laika 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á zdrojová 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 JavaScript Knihovna kódování/dekódování ASN.1 BER na github, s licencí GPL
- Průvodce stylem X.509 Petera Gutmanna