Annexe B. Calcul de la clé étiquette
Cette annexe décrit comment calculer la clé étiquette (key tag). La clé étiquette est utilisée pour sélectionner efficacement l'enregistrement approprié au sein d'un DNSKEY RRset contenant un enregistrement de ressources DNSKEY donné. Le champ clé étiquette dans le RDATA d'un enregistrement de ressources DNSKEY est un entier non signé de 16 bits du RDATA. La valeur de la clé étiquette est utilisée, avec le nom du propriétaire (owner name) et l'algorithme de l'enregistrement de ressources DNSKEY, pour sélectionner le DNSKEY RR.
La clé étiquette DOIT être calculée conformément au pseudo-code équivalent à l'algorithme donné dans la section 3.2.1 de [RFC2535]. N'importe quel algorithme équivalent produisant la même valeur de clé étiquette peut être utilisé.
;;
;; On suppose que « key » contient la partie RDATA de l'enregistrement
;; de ressources DNSKEY, dans l'ordre : Flags, Protocol, Algorithm, Public Key.
;;
;; On suppose que « keytag » est un entier non signé.
;;
;; L'algorithme de calcul de la clé étiquette est le suivant :
;;
Keytag = 0
IF (l'algorithme DNSKEY est RSASHA1 ou RSASHA1-NSEC3-SHA1) THEN
Keytag = les 8 bits de poids fort (most significant 8 bits) de l'octet
de poids fort de Key
ELSE
Pour chaque octet « i » de Key (compté à partir de 0,
dans l'ordre des octets réseau Network Byte Order) :
si i est impair, Keytag = Keytag + le produit de i et Key[i]
(calcul sur 16 bits non signés)
si i est pair, Keytag = Keytag + Key[i]
Si la longueur de Key est impaire, ajouter le 0ème octet
(c'est-à-dire Key[0]) à Keytag comme décrit ci-dessus
Keytag = (Keytag AND 0xFFFF) + (Keytag >> 16)
Keytag = (Keytag AND 0xFFFF) + (Keytag >> 16)
Keytag = Keytag AND 0xFFFF
END IF
Dans le pseudo-code ci-dessus, l'exception ne s'applique que lorsque l'algorithme DNSKEY est RSASHA1 ou RSASHA1-NSEC3-SHA1 ; pour ces algorithmes, la clé étiquette DOIT être fixée à la valeur de l'octet de poids fort du matériel de clé (clé publique). Cette exception améliore la qualité de la distribution des clés étiquettes pour ces algorithmes.
Remarque : comme le calcul est effectué sur des entiers non signés de 16 bits, tout dépassement (wrap around) est possible lors de l'une des additions ci-dessus. Les implémentations DOIVENT traiter le dépassement des additions, au cours du calcul, par une arithmétique modulo 2^16 sur entiers non signés de 16 bits, comme indiqué dans le pseudo-code.
B.1. Exemple de calcul
À titre de référence, voici un exemple concret de calcul de clé étiquette. Considérons l'enregistrement de ressources DNSKEY suivant (en notation de fichier de zone) :
example.com. 3600 IN DNSKEY 257 3 5 (
AwEAAc…… (matériel de clé complet omis)
) ; key id = 12345
Appliquer l'algorithme ci-dessus au RDATA complet de cet enregistrement (flags=257, protocol=3, algorithm=5 et les octets de clé publique qui suivent) donne une clé étiquette de 12345. Cette valeur devrait correspondre à l'identifiant de clé (key id) signalé par les outils (tels que dnssec-keygen).
Remarque : cet exemple est donné pour illustrer la structure de l'algorithme de clé étiquette. Dans un déploiement réel, les valeurs de clé étiquette doivent être générées et vérifiées à l'aide des outils DNSSEC standard.
Navigation entre sections :
- Précédent : Annexe A. Algorithmes et types de condensé DNSSEC
- Retour : Table des matières