X.690

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 1 september 2018; kontroller kräver 5 redigeringar .

X.690 är en av ASN.1 -standarderna som utvecklats gemensamt av ISO , IEC och ITU-T för bekvämligheten att representera data under överföring i telekommunikationsnätverk. Kodningsreglerna som beskrivs i X.690 tjänar till att representera datastrukturer som beskrivs enligt ASN.1 -regler som sekvenser av byte. Det är bekvämare att överföra sådana sekvenser över kommunikationslinjer eller spara dem i filer än att göra samma operationer med själva strukturerna [1] .

X.690-standarden beskriver följande regler för kodning av datastrukturer skapade enligt ASN.1 :

Historik

1984 skapade ITU-T- organisationen en serie standarder X.400 , bland vilka var X.409- standarden , som, på grund av aktiv användning, 1988, ITU-T , tillsammans med ISO och IEC , separerade i två separata standarder: X.208 , som beskriver ASN.1 , och X.209 , som beskriver BER-reglerna. 1994 gjordes om ASN.1 och X.208-serien av standarder flyttade till X.680- serien , och X.209-standarden ersattes av X.690-standarden [2] .

Grundläggande kodningsregler

Basic Encoding Rules eller BER är en uppsättning regler som förklarar hur man representerar vilken datastruktur som helst som beskrivs enligt ASN.1 som en sekvens av åttabitars oktetter [3] .

För att tillåta olika typer av data att beskrivas på ett liknande sätt, definierade X.690 den allmänna strukturen för det kodade informationsblocket, bestående av följande 3 delar:

Identifierare

Identifieringsformatet är strikt fast [4] .

åtta 7 6 5 fyra 3 2 ett
Klass Sorts Märka

Bitarna 8 och 7 definierar dataklassen

Klass bit 8 bit 7 Klassbeskrivning
Universell 0 0 typer som endast definieras i X.690 och har samma betydelse i alla applikationer
Applicerad 0 ett typer vars betydelse varierar beroende på applikationen [Note 1]
Kontextkänslig ett 0 typer vars betydelse beror på en given sammansatt typ [not 2]
Privat ett ett typer vars betydelse beror på den särskilda organisationen

Bit 6 bestämmer om data är enkel (som INTEGER), eller kan innehålla olika andra datamängder (som SET). Samtidigt, när man kodar i det första fallet, talar man om primitiv kodning, och i det andra, konstruktiv;

Data typ bit 6
Enkel 0
Sammansatt ett

Bitarna 5 - 1 definierar datataggen.

Taggar som beskrivs i ASN.1
Data typ Tag (decimal) Tag (hexadecimal)
EOC (End-of-Content) 0 0
BOOLEAN ett ett
HELTAL 2 2
BITSTRÄNG 3 3
OCTETTSTRÄNG fyra fyra
NULL 5 5
OBJEKTIDENTIFIERING 6 6
Objektbeskrivning 7 7
EXTERN åtta åtta
VERKLIG 9 9
RÄKNAD tio A
INBÄDDAD PDV elva B
UTF8 String 12 C
RELATIV OID 13 D
(reserverad) fjorton E
(reserverad) femton F
SEKVENS och SEKVENS AV 16 tio
SET och SET OF 17 elva
Numerisk sträng arton 12
PrintableString 19 13
T61 String tjugo fjorton
VideotexString 21 femton
IA5 String 22 16
UTC-tid 23 17
Generaliserad tid 24 arton
GraphicString 25 19
VisibleString 26 1A
GeneralString 27 IB
UniversalString 28 1C
KARAKTÄRSTRÄNG 29 1D
BMPString trettio 1E
(lång form) 31 1F

Om dataklassen inte är definierad i ASN.1 kan taggen vara större än 30. I detta fall används flera oktetter för att representera identifieraren. I det här fallet har bitarna 5-1 i den första oktetten värdet , och följande oktetter kodas enligt följande: 111112

Kodad datalängd oktetter

Om längden på det kodade datablocket är känd i förväg, kodas längdoktetterna enligt följande:

Om denna längd inte överstiger 127 oktetter (byte), skrivs den helt enkelt till motsvarande längdoktett. Denna form av representation av längdoktetter kallas kortform .

Exempel: Datablockets längd L: L = 34 kommer att kodas som 0010 0010

Om längden på det kodade datablocket är större än 127 byte, då:

Denna form av att representera längdoktetter kallas långform .

Exempel: Datablockets längd L: L = 2614 (0000 1010 0011 0110 i binärt) kommer att kodas som: 82 0A 36 (10000010 00001010 00110110 i binärt)

Om längden på det kodade datablocket vid tidpunkten för längdkodningen är okänd, skrivs värdet till längdoktetten 0х80, vilket indikerar kodning med en obestämd längd (obestämd form). I detta fall måste slutet av det kodade datablocket vara oktetter som 00 00uttryckligen indikerar dess avslutning. Obestämd längdkodning är endast tillåten för konstruktiva datatyper; de två nolloktetterna i slutet motsvarar ASN.1-datatypen med tagg 0 (End-of-contents) och längd 0.

Kodningsstrukturer av olika slag

Kodning av olika datatyper beskrivs i detalj i standardtexten  (eng.) .

Tvetydighet i kodningen

Beroende på strukturen och målen som eftersträvas under kodningen, kan kodningen av samma data variera avsevärt [5] [6] .

Således kan BER-kodningen för ett TRUE-värde av typen BOOLEAN se ut så här:

01 01 01

så är utsikten:

01 01 0F

Resultatet av att koda SET-typen kan vara olika beroende på i vilken ordning vi kodar de "kapslade" datatyperna:

om

set::= SET { int, float} int::= HELTAL flyta::= RIKTIGT

sedan för

set{-128, 0,15625}

Resultatet av kodning enligt BER-reglerna kan bli följande:

31 08 02 01 80 09 03 80 FB 05;

och så här:

31 08 09 03 80 FB 05 02 01 80.

Beroende på om primitiv eller konstruktiv kodning används kan resultatet också skilja sig åt. Så för värdet "Testa användare 1" av typen STRING med primitiv kodning kommer resultatet att se ut så här:

13 0B 54 65 73 74 20 55 73 65 72 20 31

med konstruktiva:

33 0F 13 05 54 65 73 74 20 13 06 55 73 65 72 20 31

DER och CER

DER- och CER-kodningsregler används för att entydigt koda data.

Distinguished Encoding Rules

Särskilda kodningsregler eller DER är samma som BER med förbehåll för följande begränsningar:

  1. För att koda data med känd längd måste antalet längdoktetter vara det minsta;
  2. Kodningen av enkla datatyper (inklusive STRING, OCTET STRING och BIT ARRAY) är alltid primitiv;
  3. För en SET-typ måste kapslade typer kodas i ordningen för sina taggar (enligt ASN.1 ).

Kanoniska kodningsregler

De kanoniska kodningsreglerna eller CER är desamma som BER med förbehåll för följande begränsningar:

  1. Sammansatta datatyper MÅSTE använda en kodning av okänd längd;
  2. För primitiv kodning bör antalet längdoktetter vara det minsta;
  3. För en SET-typ måste kapslade typer kodas i ordningen för sina taggar (enligt ASN.1 ).

Jämförelse av BER, DER och CER

BER erbjuder användaren olika sätt att koda samma data, och det antas att ett system som stöder ASN.1- standarder korrekt kan avkoda dem oavsett representation, medan DER och CER endast stöder ett specifikt kodningsalternativ för varje typ [6] . Denna skillnad manifesteras i hastigheten för datakodning: enligt forskning, om ett strikt definierat dataformat används under kodning, kräver systemet mycket färre operationer för detta. Enkelt uttryckt ger DER och CER mycket snabbare prestanda än BER [7] .

Huvudskillnaden mellan DER och CER är att DER använder kodning av data med en känd längd, medan CER i vissa fall (till exempel vid kodning av data av typen STRING med en längd på mer än 1000 tecken) använder kodning med en okänd längd i förväg. Denna skillnad uttrycks i antalet block som krävs för att koda längden på den krypterade datan. Så för att bestämma längden på blocket med kodad data vid kodning med en okänd längd krävs endast 3 oktetter, medan för stora meddelanden med DER-kodning kan deras antal nå 32 oktetter. Det vill säga att det är tillrådligt att använda DER vid kodning av små data, och CER - för stora [8] .

Jämförelse av X.690 och X.209

Allmänt

Övergången från standarderna X.208 och X.209 till X.680 - X.683 och X.690 berodde på behovet av att korrigera fel som identifierats i processen för att använda protokoll som arbetar med ASN.1 [9] . I detta avseende, under övergången från en standard till en annan, säkerställdes deras fulla kompatibilitet. I synnerhet när en användare får en BER-kodad struktur från en annan är det ofta omöjligt att med säkerhet säga vilken av standarderna han använde vid kodningen [10] .

Skillnader

  • Kodningsregler har lagts till för nya datatyper (som RELATIVE-OID);
  • För datatyper vars beskrivningsregler har ändrats har kodningsreglerna också ändrats (men resultatet av att koda samma datastruktur är detsamma både när du använder X.209 och när du använder X.690) [10] .

Applikation

BER, DER och CER används aktivt i olika dataöverföringsprotokoll och i kryptografiska protokoll, såsom:

Andra kodningsstandarder

Trots enkelheten i datakodning [14] anser många att BER, DER och CER är ineffektiva jämfört med andra kodningsregler, eftersom, för det första, storleken på datakodningsresultatet med hjälp av BER ofta visar sig vara större än när man använder dess alternativ. , och för det andra tar själva kodningen lite mer tid [7] .

Sådana datakodningsscheman utvecklade för att förbättra BER [6] är Packed Encoding Rules (PER), XML Encoding Rules (XER) och ASN.1 SOAP, som beskrivs i ITU-T X.691 , X.693 , respektive X. 892 .

Se även

ASN.1

Anteckningar

  1. Till exempel, för X.500-katalogtjänster kan typer i två olika applikationer ha samma taggar men olika betydelser.
  2. Sådana taggar används för att skilja mellan komponenttyper med samma bastaggar i samband med en given sammansatt typ.

Litteratur

  1. Douglas Steedman , E4. kodningsregler.
  2. Introduktion till ASN.1  . ASN.1 Projekt . ITU-T. Hämtad 12 december 2012. Arkiverad från originalet 16 december 2012.
  3. Semenov Yu.A. 4.4.13.2 ASN.1-beteckning .  (inte tillgänglig länk)
  4. Yuri Strozhevsky, 2012 , kapitel 1.
  5. Bernett et al, 2001 , Appendix B.
  6. 1 2 3 Douglas Steedman , E.1 Vad är ASN.1?.
  7. 1 2 Lin Huai-An Uppskattning av den optimala prestandan för ASN.1/BER-överföringssyntax. - ACM Computer Communication Review, juli 93, s. 45 - 58.
  8. ITU-T Rec. X.690, ISO/IEC 8825-1 Introduktion.
  9. Tony Bradley. Sårbarhet i Microsoft ASN.1 - Vad är det stora problemet?  (engelska) . About.com Guide (12 februari 2004). Datum för åtkomst: 11 december 2012. Arkiverad från originalet den 25 januari 2013.
  10. 1 2 Ändring från ASN.1:1988/1990 till ASN.1:  2008 . ASN.1 Projekt . ITU-T (12 februari 2004). Datum för åtkomst: 11 december 2012. Arkiverad från originalet den 25 januari 2013.
  11. Vijay Mukhi, Sonal Kotecha, Arsalan Zaidi, Vinesh Kurup. Grundläggande  kodningsregler . Datum för åtkomst: 11 december 2012. Arkiverad från originalet den 25 januari 2013.
  12. B. Kaliski. PKCS #7: Kryptografisk meddelandesyntax - Version 1.5  ( mars 1998). - Generell översikt. Datum för åtkomst: 11 december 2012. Arkiverad från originalet den 25 januari 2013.
  13. Peter Gutmann. X.509 Style Guide  (engelska) (oktober 2000). — Inledning. Datum för åtkomst: 11 december 2012. Arkiverad från originalet den 25 januari 2013.
  14. Douglas Steedman , E.4 kodningsregler.

Källor

Länkar