Aller au contenu
ecdsa.com

ASN.1 (notation de syntaxe abstraite numéro un)

Le langage UIT-T X.680 qui décrit des structures de données indépendamment de leur encodage, utilisé pour définir les certificats X.509, CMS, les clés PKCS #8, OCSP, LDAP et des protocoles de télécommunications.
Autres graphiesASN.1Abstract Syntax Notation OneX.680

Un module ASN.1 déclare des types ; la RFC 5280, par exemple, définit Certificate comme une SEQUENCE de tbsCertificate, signatureAlgorithm (un AlgorithmIdentifier) et signatureValue (un BIT STRING). Les briques de base sont SEQUENCE, SET, CHOICE, les champs OPTIONAL et DEFAULT, les étiquettes spécifiques au contexte ([0], [1]) avec un étiquetage IMPLICIT ou EXPLICIT, et des types primitifs comme INTEGER, BIT STRING, OCTET STRING, OBJECT IDENTIFIER ainsi que les types de chaînes et de temps.

Les règles d’encodage transforment une valeur en octets : BER et son sous-ensemble canonique DER (X.690) pour la PKI, PER pour les messages de télécommunications compacts, XER et JER pour XML et JSON. L’essentiel de l’ASN.1 qui touche à la sécurité est en DER.

L’analyse d’ASN.1 a un long historique de bogues (dépassements de longueur, confusion BER/DER, divergences dans le traitement des étiquettes) : utilisez un analyseur maintenu et n’en écrivez jamais un vous-même pour des entrées non fiables. Savoir lire un dump est une compétence de débogage utile : openssl asn1parse -i ou l’explorateur ASN.1 affichent l’arbre avec les décalages.

Normes et références

Tous les termes