Passa al contenuto principale

Appendice B. Calcolo del key tag

La presente appendice descrive come calcolare il key tag (tag della chiave). Il key tag viene utilizzato per selezionare in modo efficiente il record appropriato all'interno di un DNSKEY RRset che contiene un determinato resource record DNSKEY. Il campo key tag nel RDATA di un resource record DNSKEY è un intero senza segno a 16 bit del RDATA. Il valore del key tag viene utilizzato, unitamente al nome del proprietario (owner name) e all'algoritmo del resource record DNSKEY, per selezionare il DNSKEY RR.

Il key tag DEVE essere calcolato conformemente al pseudo-codice equivalente all'algoritmo riportato nella sezione 3.2.1 di [RFC2535]. Può essere utilizzato qualsiasi algoritmo equivalente che produca lo stesso valore di key tag.

     ;;
;; Si suppone che "key" contenga la parte RDATA del resource record
;; DNSKEY, nell'ordine: Flags, Protocol, Algorithm, Public Key.
;;
;; Si suppone che "keytag" sia un intero senza segno.
;;
;; L'algoritmo per calcolare il key tag è il seguente:
;;

Keytag = 0

IF (l'algoritmo DNSKEY è RSASHA1 o RSASHA1-NSEC3-SHA1) THEN
Keytag = gli 8 bit più significativi (most significant 8 bits)
dell'ottetto più significativo di Key

ELSE
Per ogni ottetto "i" di Key (contato a partire da 0,
in ordine di byte di rete Network Byte Order):
se i è dispari, Keytag = Keytag + il prodotto di i e Key[i]
(calcolo su 16 bit senza segno)
se i è pari, Keytag = Keytag + Key[i]

Se la lunghezza di Key è dispari, aggiungere il 0° ottetto
(ovvero Key[0]) a Keytag come descritto sopra

Keytag = (Keytag AND 0xFFFF) + (Keytag >> 16)
Keytag = (Keytag AND 0xFFFF) + (Keytag >> 16)
Keytag = Keytag AND 0xFFFF

END IF

Nel pseudo-codice sopra, l'eccezione si applica solo quando l'algoritmo DNSKEY è RSASHA1 o RSASHA1-NSEC3-SHA1; per tali algoritmi, il key tag DEVE essere impostato sul valore dell'ottetto più significativo del materiale della chiave (chiave pubblica). Tale eccezione migliora la qualità della distribuzione dei key tag per questi algoritmi.

Nota: poiché il calcolo viene effettuato su interi senza segno a 16 bit, ciascuna delle addizioni sopra può andare in overflow (wrap around). Le implementazioni DEVONO gestire l'overflow delle addizioni, durante il calcolo, con un'aritmetica modulo 2^16 su interi senza segno a 16 bit, come mostrato nel pseudo-codice.

B.1. Esempio di calcolo​

A titolo di riferimento, di seguito è riportato un esempio concreto di calcolo di un key tag. Si consideri il seguente resource record DNSKEY (in notazione di file di zona):

example.com. 3600 IN DNSKEY 257 3 5 (
AwEAAc…… (materiale della chiave completo omesso)
) ; key id = 12345

Applicando l'algoritmo sopra all'RDATA completo di questo record (flags=257, protocol=3, algorithm=5 e gli ottetti della chiave pubblica che seguono) si ottiene un key tag di 12345. Tale valore dovrebbe corrispondere all'identificatore di chiave (key id) riportato dagli strumenti (quali dnssec-keygen).

Nota: questo esempio è fornito per illustrare la struttura dell'algoritmo di calcolo del key tag. In un ambiente reale, i valori del key tag devono essere generati e verificati utilizzando gli strumenti DNSSEC standard.


Navigazione tra sezioni: