Qu'est-ce que la notation de syntaxe abstraite 1 (ASN.XNUMX) ?

8 mai 2024

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 la notation syntaxique abstraite 1

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 :

  1. prรฉnom, Qui est un Chaรฎne UTF8.
  2. รข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 :

  1. Identificateur de sรฉquence: 0x30 (indiquant une Sร‰QUENCE)
  2. Longueur: 0x0C (12 octets pour toute la sรฉquence)
  3. Identificateur de chaรฎne UTF8: 0x0C (indiquant UTF8String)
  4. Longueur du nom: 0x05 (5 octets pour le nom "Alice")
  5. Valeur du nom: 0x41 0x6C 0x69 0x63 0x65 ("Alice" encodรฉ en UTF-8)
  6. Identifiant ENTIER: 0x02 (indiquant ENTIER)
  7. Durรฉe d'รขge: 0x01 (1 octet pour l'entier)
  8. 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.


Anastasie
Spasojevic
Anastazija est une rรฉdactrice de contenu expรฉrimentรฉe avec des connaissances et une passion pour cloud l'informatique, les technologies de l'information et la sรฉcuritรฉ en ligne. ร€ phoenixNAP, elle se concentre sur la rรฉponse ร  des questions brรปlantes concernant la garantie de la robustesse et de la sรฉcuritรฉ des donnรฉes pour tous les acteurs du paysage numรฉrique.