Was ist Abstract Syntax Notation One (ASN.1)?

8. Mai 2024

Abstract Syntax Notation One (ASN.1) ist eine standardisierte Notation zur Definition von Datenstrukturen, die รผber verschiedene Plattformen hinweg serialisiert und deserialisiert werden kรถnnen. Es bietet einen Rahmen fรผr die plattformunabhรคngige Beschreibung von Daten und ist daher fรผr Kommunikationsprotokolle von entscheidender Bedeutung.

was ist abstrakte Syntaxnotation eins

Was ist ASN.1?

Abstract Syntax Notation One (ASN.1) ist eine von der International Telecommunication Union (ITU-T) entwickelte standardisierte Notation zur plattformunabhรคngigen Spezifikation von Datenstrukturen. Es spielt eine entscheidende Rolle in Telekommunikations-, Netzwerk- und Sicherheitsprotokollen, indem es eine formale Sprache zur Beschreibung komplexer Prozesse bietet Datenstrukturen. ASN.1 trennt die Datensyntax von der Codierung und ermรถglicht so die nahtlose รœbertragung und Verarbeitung von Daten รผber verschiedene Systeme hinweg.

Seine Kodierungsregeln wie Basic Encoding Rules (BER), Distinguished Encoding Rules (DER) und Packed Encoding Rules (PER) stellen sicher, dass die serialisierten Daten effizient รผbertragen werden und gleichzeitig die Strukturtreue gewahrt bleibt. ASN.1 definiert nicht nur die Arten und Werte von Daten, sondern auch die Beziehung dieser Datenstrukturen zueinander, was es in Bereichen unverzichtbar macht, in denen ein prรคziser und interoperabler Datenaustausch erforderlich ist. Es ist besonders nรผtzlich im Sicherheitsbereich Anwendungen, digitale Zertifikate und Telekommunikationsstandards, bei denen eine konsistente Datenverarbeitung von entscheidender Bedeutung ist.

ASN.1-Syntaxbeispiel

Hier ist ein Beispiel der ASN.1-Syntax, das eine einfache Nachrichtenstruktur fรผr eine Person mit einem Namen und einem Alter demonstriert:

Person DEFINITIONS ::= BEGIN PersonRecord ::= SEQUENCE { name UTF8String, age INTEGER } END

In diesem Beispiel das Modul Person enthรคlt eine Struktur namens Personendatensatz was definiert ist als a SEQUENCE. Diese Sequenz umfasst zwei Felder:

  1. Name, die ein UTF8String.
  2. Alter, das ist ein GANZE ZAHL.

ASN.1-Kodierungsbeispiel

Angenommen, wir mรถchten eine Struktur fรผr eine Person mit zwei Feldern definieren: Name (eine Zeichenfolge) und Alter (eine Ganzzahl). Dies wรผrde in ASN.1 wie folgt geschrieben werden:

Person DEFINITIONS ::= BEGIN PersonRecord ::= SEQUENCE { name UTF8String, age INTEGER } END

Datenbeispiel

Angenommen, wir mรถchten eine 30-jรคhrige Person namens โ€žAliceโ€œ vertreten.

Codierungsbeispiel

Wenn wir zur Kodierung BER (Basic Encoding Rules) verwenden, wรผrden die Daten fรผr โ€žAlice, 30โ€œ wie folgt serialisiert:

  1. Sequenzidentifikator: 0x30 (zeigt eine SEQUENZ an)
  2. Lรคnge: 0x0C (12 Bytes fรผr die gesamte Sequenz)
  3. UTF8String-Bezeichner: 0x0C (zeigt UTF8String an)
  4. Lรคnge des Namens: 0x05 (5 Bytes fรผr den Namen โ€žAliceโ€œ)
  5. Wert des Namens: 0x41 0x6C 0x69 0x63 0x65 (UTF-8-kodiert โ€žAliceโ€œ)
  6. INTEGER-Bezeichner: 0x02 (zeigt INTEGER an)
  7. Alter: 0x01 (1 Byte fรผr die Ganzzahl)
  8. Wert des Alters: 0x1E (30 im Hexadezimalformat)

Somit wรผrden die BER-codierten Daten wie folgt aussehen:

30 0C 0C 05 41 6C 69 63 65 02 01 1E

Diese hexadezimale Darstellung entspricht der in ASN.1 definierten Datenstruktur und zeigt, wie damit Daten konsistent zwischen Systemen ausgetauscht werden kรถnnen.

ASN.1-Typen und -Werte

ASN.1 (Abstract Syntax Notation One) bietet einen umfassenden Satz an Datentypen und Werten, um verschiedene Strukturen auf standardisierte Weise darzustellen. Diese Datentypen gewรคhrleisten eine effektive Kommunikation รผber verschiedene Plattformen hinweg. Hier ist eine Aufschlรผsselung einiger gรคngiger ASN.1-Typen und -Werte:

GANZE ZAHL


Ein INTEGER-Typ reprรคsentiert ganzzahlige Werte (sowohl positive als auch negative). Es kann eine beliebige GrรถรŸe haben und wird hรคufig fรผr numerische Bezeichner oder Zรคhlungen verwendet.

Ejemplo:

age INTEGER ::= 30

BOOLEAN


Das BOOLEAN-Typ stellt logische wahre oder falsche Werte dar. Es wird typischerweise fรผr Flags und binรคre Entscheidungen verwendet.

Ejemplo:

isActive BOOLEAN ::= TRUE

Oktett-String


Ein OCTET STRING enthรคlt eine Folge von Oktetten (Bytes), hรคufig fรผr Binรคrdaten wie Bilder verwendet, Dateienoder kryptografische Schlรผssel.

Ejemplo:

rawData OCTET STRING ::= 'E04FD020EA3A6910A2D808002B30309D'H

NULL

Der Typ NULL bedeutet das Fehlen eines Werts. Wird oft als Platzhalter in optionalen Feldern verwendet.

Ejemplo:

nothing NULL ::= NULL

OBJEKT-IDENTIFIKATOR


Ein OBJECT IDENTIFIER (OID) ist eine weltweit eindeutige Kennung, die zur Referenzierung bestimmter Standards, Protokolle oder Objekte verwendet wird.

Ejemplo:

myObjectIdentifier OBJECT IDENTIFIER ::= { iso member-body us(1) ansi-x9-57(100) }

AUFZร„HLEN


Es รคhnelt einem INTEGER, ist jedoch auf eine vordefinierte Werteliste beschrรคnkt. Der Typ ENUMERATED eignet sich zur Darstellung von Optionen oder Zustรคnden.

Ejemplo:

status ENUMERATED { active(0), inactive(1), pending(2) }

UTF8String


Dies ist ein mit UTF-8 codierter String-Typ. Es ist ideal fรผr die Darstellung von Textdaten, die Sonderzeichen oder nicht-lateinische Alphabete enthalten.

Ejemplo:

fullName UTF8String ::= "Alice Smith"

SEQUENCE


Eine SEQUENCE ist eine Sammlung verschiedener Datenfelder, die in der Programmierung wie eine Struktur oder ein Datensatz wirken. Felder kรถnnen obligatorisch oder optional sein.

Ejemplo:

PersonRecord ::= SEQUENCE { name UTF8String, age INTEGER, address UTF8String OPTIONAL }

EINE REIHE VON


Eine SEQUENCE OF ist eine Sammlung von Elementen desselben Typs, รคhnlich einem Array.

Ejemplo:

PhoneNumbers ::= SEQUENCE OF UTF8String

SET


Dies ist wie eine SEQUENCE, aber ihre Felder mรผssen nicht in einer bestimmten Reihenfolge erscheinen.

Ejemplo:

Identity SET { firstName UTF8String, lastName UTF8String }

ASN.1-Makros

In ASN.1 wurden Makros eingefรผhrt, um die Spezifikation bestimmter Strukturen zu vereinfachen, indem wiederverwendbare Vorlagen fรผr Datenstrukturen definiert werden. Obwohl Makros in spรคteren Versionen von ASN.1 weitgehend durch andere Mechanismen ersetzt wurden, ist das Verstรคndnis ihrer historischen Verwendung fรผr die Arbeit mit รคlteren Spezifikationen wichtig.

Makros erfรผllten eine รคhnliche Rolle wie Funktionen oder Vorlagen in Programmiersprachen. Sie ermรถglichten es Benutzern, ein wiederverwendbares Muster zu definieren, das bei Bedarf um spezifische Details erweitert werden konnte, wodurch Redundanzen reduziert und komplexe Definitionen vereinfacht wurden.

Makrosyntax

Ein Makro wird mithilfe der folgenden allgemeinen Struktur definiert:

MyMacro MACRO ::= BEGIN -- Macro definition content goes here END

Beispiel eines Makros

Ein einfaches Beispiel kรถnnte die Definition eines Makros sein, das ein erstellt TaggedType:

TaggedType MACRO ::= BEGIN TYPE NOTATION ::= Type VALUE NOTATION ::= value INTEGER END

Hier TYPNOTION und WERTENOTION sind Platzhalter, die bei Verwendung des Makros ausgefรผllt werden.

Mit der Entwicklung von ASN.1 wurden Makros durch leistungsfรคhigere und ersetzt flexible Konstrukte wie parametrisierte Typen und Informationsobjektklassen. Parametrisierte Typen bieten eine Mรถglichkeit, Vorlagen anzugeben, die mit verschiedenen Datentypen wiederverwendet werden kรถnnen, wรคhrend Informationsobjektklassen eine explizitere Angabe von Einschrรคnkungen und Beziehungen ermรถglichen.

ASN.1-Kodierungsregeln

ASN.1-Kodierungsregeln definieren, wie in ASN.1 beschriebene Datenstrukturen serialisiert und in ein fรผr die รœbertragung oder Speicherung geeignetes Binรคrformat deserialisiert werden sollen. Jede Codierungsregel bietet je nach spezifischen Anforderungen wie GrรถรŸe, Verarbeitungsgeschwindigkeit oder Strenge unterschiedliche Effizienz- und Anwendbarkeitsgrade.

Hier ist eine Liste und Erlรคuterung einiger allgemeiner Kodierungsregeln in ASN.1:

  • Grundlegende Kodierungsregeln (BER). BER ist ein flexMรถgliche Kodierungsregel, die zur Kodierung ein Typ-Lรคngen-Wert-Format (TLV) verwendet. Jedes Element beginnt mit einem Bezeichner, der seinen Typ angibt, gefolgt von der Lรคnge des Werts und schlieรŸlich dem Wert selbst. BER ermรถglicht eine Codierung mit unbestimmter Lรคnge flexDies kann jedoch im Vergleich zu anderen Regeln zu grรถรŸeren codierten Daten fรผhren.
  • Distinguished Encoding Rules (DER). DER ist eine Teilmenge von BER, die eine konsistente Kodierung durch die Durchsetzung bestimmter Regeln gewรคhrleistet, wie z. B. die Verwendung der Kodierung mit der kleinstmรถglichen Lรคnge. Es bietet eindeutige binรคre Darstellungen von Datenstrukturen. DER wird hรคufig in Sicherheitsprotokollen und digitalen Zertifikaten verwendet, da es garantiert, dass dieselbe ASN.1-Struktur immer identisch codiert.
  • Kanonische Kodierungsregeln (CER). CER ist auch eine Teilmenge von BER, die fรผr eine eindeutige Codierung entwickelt wurde. Es รคhnelt DER, ermรถglicht jedoch die Codierung einiger Typen mit unbestimmter Lรคnge, was fรผr groรŸe Datenmengen nรผtzlich ist. CER ist ideal fรผr Streaming-Anwendungen, bei denen Datenstrukturen mรถglicherweise nicht in eine vordefinierte Lรคnge passen.
  • Regeln fรผr gepackte Kodierung (PER). PER ist auf hohe Effizienz ausgelegt, indem unnรถtige Metadaten entfernt werden. Es optimiert die Codierung durch die Verwendung der fรผr jedes Feld erforderlichen Mindestanzahl an Bits, hรคufig basierend auf vordefinierten Bereichen oder Einschrรคnkungen. PER erzeugt im Vergleich zu BER, DER und CER deutlich kleinere Datenmengen und eignet sich daher fรผr bandbreitenempfindliche Anwendungen wie die Mobilkommunikation.
  • XML-Kodierungsregeln (XER). XER ordnet ASN.1-Strukturen einer XML-Darstellung zu und macht sie so fรผr Menschen lesbar. Ziel ist es, die Interoperabilitรคt zu verbessern, indem die Popularitรคt von XML fรผr den Datenaustausch genutzt wird. XER ist besonders nรผtzlich, wenn Daten von Menschen รผberprรผft oder geรคndert oder in bestehende XML-basierte Arbeitsablรคufe integriert werden mรผssen.

JSON-Kodierungsregeln (JER). JER ordnet ASN.1-Strukturen einer JSON-Darstellung zu und macht sie so lesbar und nutzbar Web Applikationen. Es nutzt die Beliebtheit von JSON bei Webdiensten. JER ist nรผtzlich fรผr moderne webbasierte Systeme, die fรผr den Datenaustausch und die Speicherung auf JSON angewiesen sind.


Anastazija
Spasojeviฤ‡
Anastazija ist eine erfahrene Content-Autorin mit Wissen und Leidenschaft fรผr cloud Computer, Informationstechnologie und Online-Sicherheit. Bei phoenixNAP, konzentriert sie sich auf die Beantwortung brennender Fragen zur Gewรคhrleistung der Datenrobustheit und -sicherheit fรผr alle Teilnehmer der digitalen Landschaft.