Anhang B. Berechnung des Schlüsselkennzeichens
Dieser Anhang beschreibt, wie das Schlüsselkennzeichen (key tag) berechnet wird. Das Schlüsselkennzeichen wird verwendet, um effizient den passenden Eintrag innerhalb eines DNSKEY-Ressourceneintrags (RRset) auszuwählen, der einen gegebenen DNSKEY-Ressourceneintrag enthält. Das Schlüsselkennzeichenfeld im RDATA eines DNSKEY-Ressourceneintrags ist eine vorzeichenlose 16-Bit-Ganzzahl des RDATA. Der Wert des Schlüsselkennzeichens wird zusammen mit dem Eigentümernamen (owner name) und dem Algorithmus des DNSKEY-Ressourceneintrags zur Auswahl des DNSKEY RR verwendet.
Das Schlüsselkennzeichen MUSS gemäß dem Pseudocode berechnet werden, der dem in Abschnitt 3.2.1 von [RFC2535] angegebenen Algorithmus entspricht. Jeder gleichwertige Algorithmus, der denselben Schlüsselkennzeichenwert erzeugt, darf verwendet werden.
;;
;; Es wird angenommen, dass „key" den RDATA-Teil des DNSKEY-
;; Ressourceneintrags enthält, in der Reihenfolge: Flags, Protocol,
;; Algorithm, Public Key.
;;
;; Es wird angenommen, dass „keytag" eine vorzeichenlose Ganzzahl ist.
;;
;; Der Algorithmus zur Berechnung des Schlüsselkennzeichens lautet:
;;
Keytag = 0
IF (DNSKEY-Algorithmus ist RSASHA1 oder RSASHA1-NSEC3-SHA1) THEN
Keytag = die höchstwertigen 8 Bits (most significant 8 bits)
des höchstwertigen Bytes von Key
ELSE
Für jedes Oktett „i" von Key (beginnend bei 0,
in Network-Byte-Order):
wenn i ungerade, Keytag = Keytag + Produkt von i und Key[i]
(als vorzeichenlose 16-Bit-Berechnung)
wenn i gerade, Keytag = Keytag + Key[i]
Wenn die Länge von Key ungerade ist, Keytag wie oben
beschrieben um das 0. Oktett (d. h. Key[0]) erhöhen
Keytag = (Keytag AND 0xFFFF) + (Keytag >> 16)
Keytag = (Keytag AND 0xFFFF) + (Keytag >> 16)
Keytag = Keytag AND 0xFFFF
END IF
Im obigen Pseudocode ist die Ausnahme nur dann anwendbar, wenn der DNSKEY-Algorithmus RSASHA1 oder RSASHA1-NSEC3-SHA1 ist; für diese Algorithmen MUSS das Schlüsselkennzeichen auf den Wert des höchstwertigen Oktetts des Schlüsselmaterials (öffentlicher Schlüssel) gesetzt werden. Diese Ausnahme verbessert die Verteilungsqualität der Schlüsselkennzeichen für diese Algorithmen.
Hinweis: Da die Berechnung auf vorzeichenlosen 16-Bit-Ganzzahlen erfolgt, kann es bei einer der obigen Additionen zu einem Überlauf (wrap around) kommen. Implementierungen MÜSSEN den Überlauf der Additionen während der Berechnung mit einer Modulo-2^16-Arithmetik auf vorzeichenlosen 16-Bit-Ganzzahlen behandeln, wie im Pseudocode gezeigt.
B.1. Berechnungsbeispiel
Als Referenz folgt ein konkretes Beispiel für die Berechnung eines Schlüsselkennzeichens. Betrachten Sie den folgenden DNSKEY-Ressourceneintrag (in Zonendatei-Notation):
example.com. 3600 IN DNSKEY 257 3 5 (
AwEAAc…… (vollständiges Schlüsselmaterial entfällt)
) ; key id = 12345
Die Anwendung des obigen Algorithmus auf das vollständige RDATA dieses Eintrags (Flags=257, Protocol=3, Algorithm=5 und die folgenden öffentlichen Oktette) ergibt das Schlüsselkennzeichen 12345. Dieser Wert sollte mit der von den Werkzeugen (z. B. dnssec-keygen) gemeldeten Schlüssel-ID (key id) übereinstimmen.
Hinweis: Dieses Beispiel dient der Veranschaulichung der Struktur des Schlüsselkennzeichen-Algorithmus. In einem realen Einsatz sollten Schlüsselkennzeichenwerte mit den Standard-DNSSEC-Werkzeugen erzeugt und geprüft werden.
Abschnittsnavigation:
- Vorheriger: Anhang A. DNSSEC-Algorithmen und Digest-Typen
- Zurück: Inhaltsverzeichnis