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 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:
- Name, die ein UTF8String.
- 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:
- Sequenzidentifikator: 0x30 (zeigt eine SEQUENZ an)
- Lรคnge: 0x0C (12 Bytes fรผr die gesamte Sequenz)
- UTF8String-Bezeichner: 0x0C (zeigt UTF8String an)
- Lรคnge des Namens: 0x05 (5 Bytes fรผr den Namen โAliceโ)
- Wert des Namens: 0x41 0x6C 0x69 0x63 0x65 (UTF-8-kodiert โAliceโ)
- INTEGER-Bezeichner: 0x02 (zeigt INTEGER an)
- Alter: 0x01 (1 Byte fรผr die Ganzzahl)
- 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.