Zum Hauptinhalt springen

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: