Abstract Syntax Notation One (ASN.1) est une notation standardisรฉe utilisรฉe pour dรฉfinir des structures de donnรฉes qui peuvent รชtre sรฉrialisรฉes et dรฉsรฉrialisรฉes sur diffรฉrentes plates-formes. Il fournit un cadre pour dรฉcrire les donnรฉes indรฉpendamment de la plate-forme, ce qui le rend crucial pour les protocoles de communication.
Quโest-ce que lโASN.1 ?
Abstract Syntax Notation One (ASN.1) est une notation standardisรฉe dรฉveloppรฉe par l'Union internationale des tรฉlรฉcommunications (ITU-T) pour spรฉcifier les structures de donnรฉes indรฉpendamment de la plate-forme. Il joue un rรดle essentiel dans les protocoles de tรฉlรฉcommunications, de rรฉseautage et de sรฉcuritรฉ en offrant un langage formel pour dรฉcrire des protocoles complexes. structures de donnรฉes. L'ASN.1 sรฉpare la syntaxe des donnรฉes du codage, permettant aux donnรฉes d'รชtre transmises et traitรฉes de maniรจre transparente sur divers systรจmes.
Ses rรจgles de codage, telles que les rรจgles de codage de base (BER), les rรจgles de codage distinguรฉes (DER) et les rรจgles de codage packรฉes (PER), garantissent que les donnรฉes sรฉrialisรฉes sont transmises efficacement tout en maintenant la fidรฉlitรฉ structurelle. L'ASN.1 dรฉfinit non seulement les types et les valeurs des donnรฉes, mais รฉgalement la maniรจre dont ces structures de donnรฉes sont liรฉes les unes aux autres, ce qui la rend indispensable dans les domaines oรน un รฉchange de donnรฉes prรฉcis et interopรฉrable est nรฉcessaire. C'est particuliรจrement utile en matiรจre de sรฉcuritรฉ applications, les certificats numรฉriques et les normes de tรฉlรฉcommunication oรน la cohรฉrence dans le traitement des donnรฉes est cruciale.
Exemple de syntaxe ASN.1
Voici un exemple de syntaxe ASN.1 illustrant une structure de message simple pour une personne avec un nom et un รขge :
Person DEFINITIONS ::= BEGIN PersonRecord ::= SEQUENCE { name UTF8String, age INTEGER } END
Dans cet exemple, le module Personne contient une structure appelรฉe Enregistrement de personne qui est dรฉfini comme un SรQUENCE. Cette sรฉquence comprend deux champs :
- prรฉnom, Qui est un Chaรฎne UTF8.
- รขge, qui est un INTEGER.
Exemple de codage ASN.1
Supposons que nous voulions dรฉfinir une structure pour une personne avec deux champs : prรฉnom (une chaรฎne) et รขge (un nombre entier). Cela serait รฉcrit en ASN.1 comme suit :
Person DEFINITIONS ::= BEGIN PersonRecord ::= SEQUENCE { name UTF8String, age INTEGER } END
Exemple de donnรฉes
Supposons que nous voulions reprรฉsenter une personne nommรฉe ยซ Alice ยป รขgรฉe de 30 ans.
Exemple de codage
Si nous utilisons BER (Basic Encoding Rules) pour le codage, les donnรฉes de ยซ Alice, 30 ยป seraient sรฉrialisรฉes comme suit :
- Identificateur de sรฉquence: 0x30 (indiquant une SรQUENCE)
- Longueur: 0x0C (12 octets pour toute la sรฉquence)
- Identificateur de chaรฎne UTF8: 0x0C (indiquant UTF8String)
- Longueur du nom: 0x05 (5 octets pour le nom "Alice")
- Valeur du nom: 0x41 0x6C 0x69 0x63 0x65 ("Alice" encodรฉ en UTF-8)
- Identifiant ENTIER: 0x02 (indiquant ENTIER)
- Durรฉe d'รขge: 0x01 (1 octet pour l'entier)
- Valeur de l'รขge: 0x1E (30 en hexadรฉcimal)
Ainsi, les donnรฉes codรฉes en BER ressembleraient ร ceci :
30 0C 0C 05 41 6C 69 63 65 02 01 1E
Cette reprรฉsentation hexadรฉcimale correspond ร la structure de donnรฉes dรฉfinie dans l'ASN.1, montrant comment elle peut รชtre utilisรฉe pour รฉchanger des donnรฉes de maniรจre cohรฉrente entre les systรจmes.
Types et valeurs ASN.1
ASN.1 (Abstract Syntax Notation One) fournit un ensemble complet de types de donnรฉes et de valeurs pour reprรฉsenter diverses structures de maniรจre standardisรฉe. Ces types de donnรฉes garantissent une communication efficace sur diffรฉrentes plateformes. Voici une liste de certains types et valeurs ASN.1 courants :
INTEGER
Un type INTEGER reprรฉsente des valeurs entiรจres (ร la fois positives et nรฉgatives). Il peut รชtre de n'importe quelle taille et est souvent utilisรฉ pour des identifiants ou des dรฉcomptes numรฉriques.
Mise en situation :
age INTEGER ::= 30
Boolรฉen
Le Type BOOLรEN reprรฉsente des valeurs logiques vraies ou fausses. Il est gรฉnรฉralement utilisรฉ pour les indicateurs et les dรฉcisions binaires.
Mise en situation :
isActive BOOLEAN ::= TRUE
CHAรNE D'OCTETS
Une OCTET STRING contient une sรฉquence d'octets (octets), couramment utilisรฉ pour les donnรฉes binaires comme les images, fichiers, ou des clรฉs cryptographiques.
Mise en situation :
rawData OCTET STRING ::= 'E04FD020EA3A6910A2D808002B30309D'H
NULL
Le type NULL signifie l'absence de valeur. Souvent utilisรฉ comme espace rรฉservรฉ dans les champs facultatifs.
Mise en situation :
nothing NULL ::= NULL
IDENTIFIANT DE L'OBJET
Un OBJECT IDENTIFIER (OID) est un identifiant unique au monde utilisรฉ pour rรฉfรฉrencer des normes, des protocoles ou des objets spรฉcifiques.
Mise en situation :
myObjectIdentifier OBJECT IDENTIFIER ::= { iso member-body us(1) ansi-x9-57(100) }
DรNOMBRร
Il est similaire ร un INTEGER mais limitรฉ ร une liste prรฉdรฉfinie de valeurs. Le type ENUMERATED est utile pour reprรฉsenter des options ou des รฉtats.
Mise en situation :
status ENUMERATED { active(0), inactive(1), pending(2) }
Chaรฎne UTF8
Il s'agit d'un type de chaรฎne codรฉ en UTF-8. Il est idรฉal pour reprรฉsenter des donnรฉes textuelles contenant des caractรจres spรฉciaux ou des alphabets non latins.
Mise en situation :
fullName UTF8String ::= "Alice Smith"
SรQUENCE
Une SรQUENCE est une collection de diffรฉrents champs de donnรฉes, agissant comme une structure ou un enregistrement en programmation. Les champs peuvent รชtre obligatoires ou facultatifs.
Mise en situation :
PersonRecord ::= SEQUENCE { name UTF8String, age INTEGER, address UTF8String OPTIONAL }
SรQUENCE DE
Une SEQUENCE OF est une collection dโรฉlรฉments du mรชme type, semblable ร un tableau.
Mise en situation :
PhoneNumbers ::= SEQUENCE OF UTF8String
SET
C'est comme une SรQUENCE, mais ses champs n'ont pas besoin d'apparaรฎtre dans un ordre particulier.
Mise en situation :
Identity SET { firstName UTF8String, lastName UTF8String }
Macros ASN.1
En ASN.1, des macros ont รฉtรฉ introduites pour simplifier la spรฉcification de certaines structures en dรฉfinissant des modรจles rรฉutilisables pour les structures de donnรฉes. Bien que les macros aient รฉtรฉ largement remplacรฉes par dโautres mรฉcanismes dans les rรฉvisions ultรฉrieures de lโASN.1, il est important de comprendre leur utilisation historique pour travailler avec des spรฉcifications plus anciennes.
Les macros ont jouรฉ un rรดle similaire aux fonctions ou aux modรจles dans langages de programmation. Ils ont permis aux utilisateurs de dรฉfinir un modรจle rรฉutilisable qui pouvait รชtre รฉtendu avec des dรฉtails spรฉcifiques partout oรน cela รฉtait nรฉcessaire, rรฉduisant ainsi la redondance et simplifiant les dรฉfinitions complexes.
Syntaxe des macros
Une macro est dรฉfinie ร l'aide de la structure gรฉnรฉrale suivante :
MyMacro MACRO ::= BEGIN -- Macro definition content goes here END
Exemple de macro
Un exemple simple pourrait consister ร dรฉfinir une macro qui crรฉe un TypeTagged:
TaggedType MACRO ::= BEGIN TYPE NOTATION ::= Type VALUE NOTATION ::= value INTEGER END
Ici, NOTATION DES TYPES et NOTATION DE VALEUR sont des espaces rรฉservรฉs qui sont remplis lorsque la macro est utilisรฉe.
Avec l'รฉvolution de l'ASN.1, les macros ont รฉtรฉ remplacรฉes par des macros plus puissantes et flexdes constructions ibles comme les types paramรฉtrรฉs et les classes dโobjets dโinformation. Les types paramรฉtrรฉs fournissent un moyen de spรฉcifier des modรจles qui peuvent รชtre rรฉutilisรฉs avec diffรฉrents types de donnรฉes, tandis que les classes d'objets d'information permettent de spรฉcifier plus explicitement les contraintes et les relations.
Rรจgles de codage ASN.1
Les rรจgles de codage ASN.1 dรฉfinissent la maniรจre dont les structures de donnรฉes dรฉcrites en ASN.1 doivent รชtre sรฉrialisรฉes et dรฉsรฉrialisรฉes dans un format binaire adaptรฉ ร la transmission ou au stockage. Chaque rรจgle de codage offre diffรฉrents niveaux d'efficacitรฉ et d'applicabilitรฉ en fonction d'exigences spรฉcifiques telles que la taille, la vitesse de traitement ou la rigueur.
Voici une liste et une explication de certaines rรจgles de codage courantes en ASN.1 :
- Rรจgles de codage de base (BER). BER est un flexrรจgle de codage ible qui utilise un format TLV (type-length-value) pour le codage. Chaque รฉlรฉment commence par un identifiant pour indiquer son type, suivi de la longueur de la valeur et enfin de la valeur elle-mรชme. BER permet un codage de longueur indรฉfinie, ce qui fournit flexabilitรฉ, mais peut entraรฎner des donnรฉes codรฉes plus volumineuses par rapport ร dโautres rรจgles.
- Rรจgles de codage distinguรฉes (DER). DER est un sous-ensemble de BER qui garantit un codage cohรฉrent en appliquant des rรจgles spรฉcifiques, comme l'utilisation du codage de longueur la plus petite possible. Il fournit des reprรฉsentations binaires sans ambiguรฏtรฉ des structures de donnรฉes. DER est largement utilisรฉ dans les protocoles de sรฉcuritรฉ et les certificats numรฉriques car il garantit que la mรชme structure ASN.1 code toujours de maniรจre identique.
- Rรจgles de codage canonique (CER). CER est รฉgalement un sous-ensemble de BER conรงu pour un codage sans ambiguรฏtรฉ. Il est similaire ร DER mais permet un codage de longueur indรฉfinie pour certains types, ce qui est utile pour les grands ensembles de donnรฉes. CER est idรฉal pour les applications de streaming oรน les structures de donnรฉes peuvent ne pas tenir dans une longueur prรฉdรฉfinie.
- Rรจgles d'encodage packagรฉes (PER). PER est conรงu pour รชtre trรจs efficace en supprimant les mรฉtadonnรฉes inutiles. Il optimise le codage en utilisant le nombre minimum de bits requis pour chaque champ, souvent basรฉ sur des plages ou des contraintes prรฉdรฉfinies. PER produit des tailles de donnรฉes nettement plus petites que BER, DER et CER, ce qui le rend adaptรฉ aux applications sensibles ร la bande passante telles que les communications mobiles.
- Rรจgles de codage XML (XER). XER mappe les structures ASN.1 sur une reprรฉsentation XML, la rendant lisible par l'homme. Il vise ร amรฉliorer l'interopรฉrabilitรฉ en tirant parti de la popularitรฉ du XML pour l'รฉchange de donnรฉes. XER est particuliรจrement utile lorsque les donnรฉes doivent รชtre examinรฉes ou modifiรฉes par des humains ou intรฉgrรฉes dans des flux de travail XML existants.
Rรจgles d'encodage JSON (JER). JER mappe les structures ASN.1 sur une reprรฉsentation JSON, les rendant lisibles et utilisables dans Applications Web. Il exploite la popularitรฉ de JSON dans les services Web. JER est utile pour les systรจmes Web modernes qui s'appuient sur JSON pour l'รฉchange et le stockage de donnรฉes.