Aller au contenu
ecdsa.com

DER (règles de codage distinctives)

L’encodage binaire canonique d’ASN.1 défini par la recommandation ITU-T X.690, qui donne à chaque valeur exactement une représentation en octets : c’est pourquoi les certificats, les CSR, les CRL, les clés et de nombreuses signatures sont encodés en DER.
Autres graphiesDistinguished Encoding RulesDER encodingBERX.690

Chaque valeur est un triplet tag–longueur–valeur : un octet de tag (0x30 SEQUENCE, 0x02 INTEGER, 0x03 BIT STRING, 0x04 OCTET STRING, 0x05 NULL, 0x06 OBJECT IDENTIFIER, 0x0C UTF8String, 0x17 UTCTime), une longueur (un octet en dessous de 128, sinon 0x81/0x82… suivi des octets de longueur) et le contenu. DER est une forme restreinte de BER : longueurs définies uniquement, encodages minimaux des longueurs et des entiers, 0xFF pour TRUE, éléments de SET OF triés.

L’encodage canonique compte, car les signatures portent sur des octets exacts : le tbsCertificate d’un certificat doit se réencoder à l’identique pour que la signature soit vérifiée. Des parseurs permissifs, qui acceptent du BER là où DER est exigé, ont provoqué de la malléabilité de signature (le BIP 66 de Bitcoin) et des contournements de la vérification dans plusieurs bibliothèques.

Les entiers DER sont signés : une valeur positive dont le bit de poids fort vaut 1 reçoit un 0x00 en tête ; c’est pourquoi les signatures ECDSA en DER font entre 70 et 72 octets pour P-256. PEM n’est que du base64 de DER entouré de lignes d’en-tête. L’explorateur ASN.1 décode localement n’importe quelle structure DER.

Normes et références

Tous les termes