X.690

X.690 to standard ITU-T określający kilka formatów kodowania ASN.1 :

Podstawowe zasady kodowania (BER) były oryginalnymi zasadami określonymi w standardzie ASN.1 do kodowania danych w formacie binarnym. Reguły, określane zbiorczo jako składnia transferu w żargonie ASN.1, określają dokładne oktety (8-bitowe bajty) używane do kodowania danych.

X.680 definiuje składnię do deklarowania typów danych, na przykład: logiczne, liczbowe, łańcuchowe i struktury złożone. Każda definicja typu zawiera również numer identyfikacyjny. X.680 definiuje kilka prymitywnych typów danych, na przykład: BooleanType, IntegerType, OctetStringType. (ASN.1 zapewnia również skonstruowane typy zbudowane z innych typów). Typy są skojarzone z klasą . Na przykład typy pierwotne są częścią uniwersalnej . Trzy pozostałe klasy ( application , private i kontekstowe ) to zasadniczo różne zakresy obsługujące dostosowywanie do określonych aplikacji. W połączeniu klasa i typ tworzą tag , który w związku z tym odpowiada unikalnej definicji danych. X.690 zawiera reguły kodowania tych znaczników, wartości danych (zawartości) i długości tych zakodowanych danych.

BER, wraz z dwoma podzbiorami BER ( Canonical Encoding Rules i Distinguished Encoding Rules ), są zdefiniowane w dokumencie standardów X.690 ITU-T , który jest częścią serii dokumentów ASN.1.

kodowanie BER

Podstawowe reguły kodowania określają w sposób ogólny częściowo samoopisujący i samoograniczający protokół do kodowania struktur danych ASN.1. Każdy element danych należy zakodować jako identyfikator typu, opis długości, rzeczywiste elementy danych oraz, w razie potrzeby, znacznik końca treści. Te typy kodowania są powszechnie nazywane kodowaniem typ-długość-wartość (TLV). Jednak w terminologii BER jest to identyfikator-długość-zawartość .

Ten typ formatu umożliwiłby odbiornikowi dekodowanie informacji ASN.1 z niekompletnego strumienia, bez konieczności uprzedniej znajomości rozmiaru, treści lub znaczenia semantycznego danych, chociaż należałoby podać pewne szczegóły protokołu lub poddane inżynierii wstecznej z reprezentatywnych próbek ruchu lub oprogramowania.

Kodowanie danych składa się z trzech lub czterech elementów w następującej kolejności:


Oktety identyfikatora Typ

Długość oktetów Długość

Zawartość oktetów Wartość

Oktety końca treści (tylko w przypadku nieokreślonej formy )

Zauważ, że jeśli długość wynosi zero, to nie ma oktetów zawartości, np. typu NULL. Oktety końca treści są używane tylko dla nieokreślonej formy długości.

Oktety identyfikatora

identyfikatora BER kodują znaczniki ASN.1 . Listę tagów klasy uniwersalnej można znaleźć na stronie Rec. ITU-T X.680, klauzula 8, tabela 1. Następujące znaczniki są natywne dla ASN.1:

Typy, klasa uniwersalna
Nazwa Dozwolona konstrukcja Numer znacznika
Dziesiętny Szesnastkowy
Koniec treści (EOC) Prymitywny 0 0
BOOLEAN Prymitywny 1 1
LICZBA CAŁKOWITA Prymitywny 2 2
ŁAŃCUCH BITÓW Obydwa 3 3
ŁAŃCUCH OKTETU Obydwa 4 4
ZERO Prymitywny 5 5
IDENTYFIKATOR OBIEKTU Prymitywny 6 6
Deskryptor obiektu Obydwa 7 7
ZEWNĘTRZNY Zbudowana 8 8
RZECZYWISTY (zmiennoprzecinkowy) Prymitywny 9 9
WYLICZONE Prymitywny 10 A
WBUDOWANY PDV Zbudowana 11 B
Ciąg znaków UTF8 Obydwa 12 C
WZGLĘDNY OID Prymitywny 13 D
CZAS Prymitywny 14 mi
Skryty 15 F
KOLEJNOŚĆ I KOLEJNOŚĆ Zbudowana 16 10
ZESTAW i ZESTAW Zbudowana 17 11
Ciąg liczbowy Obydwa 18 12
Ciąg do wydrukowania Obydwa 19 13
T61String Obydwa 20 14
VideotexString Obydwa 21 15
Ciąg IA5 Obydwa 22 16
Czas UTC Obydwa 23 17
Uogólniony czas Obydwa 24 18
Ciąg graficzny Obydwa 25 19
Widoczny ciąg Obydwa 26 1A
Ciąg ogólny Obydwa 27 1B
Ciąg uniwersalny Obydwa 28 1C
ŁAŃCUCH ZNAKÓW Zbudowana 29 1D
BMPString Obydwa 30 1E
DATA Prymitywny 31 1F
PORA DNIA Prymitywny 32 20
DATA-CZAS Prymitywny 33 21
CZAS TRWANIA Prymitywny 34 22
OID-IRI Prymitywny 35 23
RELATIVE-OID-IRI Prymitywny 36 24

Kodowanie

Oktety identyfikatora kodują numer klasy i numer typu znacznika ASN.1. Koduje również, czy oktety zawartości reprezentują wartość skonstruowaną czy pierwotną. Identyfikator obejmuje jeden lub więcej oktetów.

Oktet 1
Oktet 2 ... n Tylko jeśli typ znacznika > 30 10
8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1
Klasa tagów komputer osobisty Typ znacznika (jeśli 0–30 10 ) Długa forma
31 10 = Długa forma 1=Więcej 7 bitów typu Tag

W początkowym oktecie bit 6 koduje, czy typ jest prymitywny, czy skonstruowany, bity 7–8 kodują klasę znacznika, a bity 1–5 kodują typ znacznika. Możliwe są następujące wartości:

Klasa Wartość Opis
uniwersalny 0 Typ jest natywny dla ASN.1
Aplikacja 1 Typ jest ważny tylko dla jednej określonej aplikacji
Specyficzne dla kontekstu 2 Znaczenie tego typu zależy od kontekstu (np. w ramach sekwencji, zestawu lub wyboru)
Prywatny 3 Zdefiniowane w prywatnych specyfikacjach
komputer osobisty Wartość Opis
Prymitywny (P) 0 Oktety zawartości bezpośrednio kodują wartość.
Zbudowany (C) 1 Oktety zawartości zawierają 0, 1 lub więcej kodowań.

Jeśli typ tagu mieści się w 5 bitach (0-30 10 ), to Identyfikator obejmuje tylko jeden bajt: Short Form . Jeśli typ znacznika jest zbyt duży dla 5-bitowego pola znacznika (> 30 10 ), należy go zakodować w dalszych oktetach: Long Form .

Początkowy oktet koduje klasę i prymityw/konstrukcję jak poprzednio, a bity 1–5 to 1. Numer znacznika jest zakodowany w następujących oktetach, gdzie bit 8 każdego z nich to 1, jeśli jest więcej oktetów, a bity 1–7 kodują numer znacznika. Połączone bity numeru znacznika, big-endian, kodują numer znacznika. Należy zakodować najmniejszą liczbę kolejnych oktetów; to znaczy, bity 1–7 nie powinny mieć wartości 0 w pierwszym kolejnym oktecie.

Długość oktetów

Istnieją dwie formy oktetów długości: forma określona i forma nieokreślona.

Oktet pierwszej długości
Formularz Bity
8 7 6 5 4 3 2 1
Zdecydowany, krótki 0 Długość (0–127)
Nieokreślony 1 0
Zdecydowany, długi 1 Liczba kolejnych oktetów (1–126)
Skryty 1 127

Zdecydowana forma

To koduje liczbę oktetów treści i jest używane zawsze, jeśli typ jest pierwotny lub skonstruowany, a dane są natychmiast dostępne. Istnieje krótka forma i długa forma, która może kodować różne zakresy długości. Dane liczbowe są kodowane jako liczby całkowite bez znaku, z najmniej znaczącym bitem zawsze na początku (po prawej).

Krótka forma składa się z pojedynczego oktetu, w którym bit 8 to 0, a bity 1–7 kodują długość (która może wynosić 0) jako liczbę oktetów.

Forma długa składa się z 1 początkowego oktetu, po którym następuje 1 lub więcej kolejnych oktetów zawierających długość. W początkowym oktecie bit 8 to 1, a bity 1–7 (z wyłączeniem wartości 0 i 127) kodują liczbę kolejnych oktetów. Następujące oktety kodują, jako big-endian, długość (która może wynosić 0) jako liczbę oktetów.

Przykład długiej formy, długość 435
Oktet 1 Oktet 2 Oktet 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
Długa forma 2 oktety długości 110110011 2 = 435 10 oktetów zawartości

Nieokreślona forma

To w ogóle nie koduje długości, ale oktety treści kończą się na oktetach znacznikowych. Dotyczy to skonstruowanych typów i jest zwykle używane, jeśli zawartość nie jest natychmiast dostępna w czasie kodowania.

Składa się z pojedynczego oktetu, w którym bit 8 to 1, a bity 1–7 to 0. Następnie dwa oktety końca treści muszą zakończyć oktety treści.

Zawartość oktetów

Oktety zawartości kodują wartość danych elementu.

Zauważ, że może nie być oktetów zawartości (stąd element ma długość 0), jeśli ma być odnotowane tylko istnienie obiektu ASN.1 lub jego pustka. Dotyczy to na przykład wartości ASN.1 NULL.

kodowanie CER

CER (Canonical Encoding Rules) to ograniczony wariant BER do tworzenia jednoznacznej składni transferu dla struktur danych opisanych przez ASN.1 . Podczas gdy BER daje wybór sposobu kodowania wartości danych, CER (wraz z DER ) wybiera tylko jedno kodowanie spośród dozwolonych przez podstawowe zasady kodowania, eliminując pozostałe opcje. CER jest przydatny, gdy kodowanie musi być zachowane; np. w giełdach papierów wartościowych.

kodowanie DER

DER (Distinguished Encoding Rules) to ograniczony wariant BER do tworzenia jednoznacznej składni transferu dla struktur danych opisanych przez ASN.1 . Podobnie jak CER , kodowania DER są prawidłowymi kodowaniami BER. DER to to samo co BER z usuniętymi wszystkimi opcjami nadawcy oprócz jednego.

DER to podzbiór BER zapewniający dokładnie jeden sposób kodowania wartości ASN.1. DER jest przeznaczony do sytuacji, w których potrzebne jest unikalne kodowanie, na przykład w kryptografii , i zapewnia, że ​​struktura danych, która musi być podpisana cyfrowo, tworzy unikalną serializowaną reprezentację. DER można uznać za kanoniczną formę BER. Na przykład w BER logiczną true można zakodować jako dowolną z 255 niezerowych wartości bajtowych, podczas gdy w DER istnieje jeden sposób zakodowania wartości logicznej true.

Najbardziej znaczące ograniczenia kodowania DER to:

  1. Kodowanie długości musi mieć postać określoną
    • Dodatkowo należy zastosować kodowanie długości możliwie najkrótszej
  2. Ciągi bitów, ciągi oktetów i ograniczone ciągi znaków muszą używać kodowania pierwotnego
  3. Elementy zestawu są kodowane w kolejności posortowanej na podstawie ich wartości znacznika

DER jest szeroko stosowany w przypadku certyfikatów cyfrowych, takich jak X.509 .

Porównanie BER, CER i DER

Kluczową różnicą między formatem BER a formatami CER lub DER jest elastyczność zapewniana przez podstawowe zasady kodowania. BER, jak wyjaśniono powyżej, jest podstawowym zestawem reguł kodowania podanych przez ITU-T X.690 do przesyłania struktur danych ASN.1. Daje nadawcom jasne zasady kodowania struktur danych, które chcą wysłać, ale pozostawia też nadawcom pewne opcje kodowania. Jak stwierdzono w standardzie X.690, „Alternatywne kodowanie jest dozwolone przez podstawowe zasady kodowania jako opcja nadawcy. Odbiorcy, którzy deklarują zgodność z podstawowymi zasadami kodowania, powinni wspierać wszystkie alternatywy”.

Odbiorca musi być przygotowany na zaakceptowanie wszystkich kodowań prawnych, aby zgodnie z prawem domagać się zgodności z BER. Natomiast zarówno CER, jak i DER ograniczają dostępne specyfikacje długości do jednej opcji. Jako takie, CER i DER są ograniczonymi formami BER i służą do ujednoznacznienia standardu BER.

CER i DER różnią się zestawem ograniczeń, które nakładają na nadawcę. Podstawowa różnica między CER i DER polega na tym, że DER używa formy o ostatecznej długości, a CER używa formy o nieokreślonej długości w niektórych dokładnie określonych przypadkach. Oznacza to, że DER zawsze zawiera informacje o długości wiodącej, podczas gdy CER używa oktetów końca treści zamiast dostarczania długości zakodowanych danych. Z tego powodu CER wymaga mniej metadanych dla dużych zakodowanych wartości, podczas gdy DER robi to dla małych.

Aby ułatwić wybór między regułami kodowania, dokument standardów X.690 zawiera następujące wskazówki:

Wyróżnione reguły kodowania są bardziej odpowiednie niż kanoniczne reguły kodowania, jeśli zakodowana wartość jest wystarczająco mała, aby zmieścić się w dostępnej pamięci i istnieje potrzeba szybkiego pominięcia niektórych zagnieżdżonych wartości. Reguły kodowania kanonicznego są bardziej odpowiednie niż reguły kodowania wyróżnionego, jeśli istnieje potrzeba zakodowania wartości, które są tak duże, że nie mieszczą się w dostępnej pamięci lub konieczne jest zakodowanie i przesłanie części wartości przed całą wartością jest dostępny. Podstawowe reguły kodowania są bardziej odpowiednie niż reguły kodowania kanonicznego lub wyróżniającego, jeśli kodowanie zawiera ustawioną wartość lub zestaw wartości i nie ma potrzeby stosowania ograniczeń, które narzucają reguły kodowania kanonicznego i wyróżniającego.

Krytyka kodowania BER

Powszechnie uważa się, że BER jest „nieefektywny” w porównaniu z alternatywnymi regułami kodowania. Niektórzy argumentowali, że to postrzeganie wynika przede wszystkim ze słabych implementacji, niekoniecznie z jakiejkolwiek nieodłącznej wady reguł kodowania. Implementacje te opierają się na elastyczności zapewnianej przez BER w zakresie stosowania logiki kodowania, która jest łatwiejsza do wdrożenia, ale skutkuje większym strumieniem zakodowanych danych niż to konieczne. Niezależnie od tego, czy ta nieefektywność jest rzeczywistością, czy postrzeganiem, doprowadziła do powstania wielu alternatywnych schematów kodowania, takich jak Packed Encoding Rules , które próbują poprawić wydajność i rozmiar BER.

Opracowywane są również inne alternatywne zasady formatowania, które nadal zapewniają elastyczność BER, ale wykorzystują alternatywne schematy kodowania. Najpopularniejsze z nich to alternatywy oparte na XML, takie jak XML Encoding Rules i ASN.1 SOAP . Ponadto istnieje standardowe mapowanie do konwersji schematu XML na schemat ASN.1, który można następnie zakodować za pomocą BER.

Stosowanie

Pomimo dostrzeganych problemów, BER jest popularnym formatem przesyłania danych, szczególnie w systemach z różnymi natywnymi kodowaniami danych.

  • SNMP i LDAP określają ASN.1 z BER jako wymagany schemat kodowania .
  • Standard EMV dla kart kredytowych i debetowych używa BER do kodowania danych na karcie
  • Standard podpisu cyfrowego PKCS #7 określa również ASN.1 z BER do kodowania zaszyfrowanych wiadomości i ich podpisu cyfrowego lub cyfrowej koperty .
  • Wiele systemów telekomunikacyjnych, takich jak ISDN , przekierowywanie połączeń bezpłatnych i większość usług telefonii komórkowej, w pewnym stopniu wykorzystuje ASN.1 z BER do przesyłania komunikatów kontrolnych przez sieć.
  • Pliki GSM TAP (Transferred Account Procedures), NRTRDE (Near Real Time Roaming Data Exchange) są kodowane przy użyciu BER. [1]

Dla porównania, bardziej dokładne kodowanie DER jest szeroko stosowane do przesyłania certyfikatów cyfrowych, takich jak X.509 .

Zobacz też

Linki zewnętrzne