6. Forma canonica e ordinamento dei resource record
Il presente documento definisce la forma canonica (canonical form) e l'ordine canonico (canonical order) dei resource record utilizzati per firmare e verificare gli insiemi di resource record (RRset). L'uso di una forma canonica garantisce che la firma rimanga valida anche quando cambia la forma di presentazione (presentation) della zona (ad esempio quando, in un trasferimento di zona tra server dei nomi, i nomi di dominio vengono compressi o ne viene modificata la distinzione tra maiuscole e minuscole).
6.1. Forma canonica
Quando si firma o si verifica un resource record, i resource record che costituiscono l'input della firma (signature input) DEVONO essere rappresentati in forma canonica. La forma canonica di un resource record è la seguente:
- il nome del proprietario (OWNER NAME) DEVE essere rappresentato come nome di dominio canonico (vedi sezione 6.2);
- qualsiasi parte dell'RDATA avente la forma di un nome di dominio DEVE essere rappresentata come nome di dominio canonico (vedi sezione 6.2);
- se il tipo di resource record definisce campi RDATA aventi la forma di un nome di dominio (ad esempio i record NS, MX, CNAME, SOA, PTR, ecc.), tali nomi di dominio DEVONO essere rappresentati in forma canonica (non compressi, in minuscolo);
- tutti i nomi di dominio DEVONO essere non compressi;
- qualsiasi parte di nome di dominio che appaia sotto forma di stringa di caratteri (
) DEVE essere rappresentata in forma canonica e NON DEVE essere compressa; - per i tipi DNSSEC definiti in questo documento (DNSKEY, RRSIG, DS, NSEC), l'RDATA DEVE essere scritto campo per campo in forma binaria, secondo il formato e l'ordine prescritti nelle sezioni 2, 3, 4 e 5.
Le regole dettagliate sono le seguenti:
- per il resource record DNSKEY: la forma canonica dell'RDATA è la concatenazione, in ordine, di flags (16 bit), protocol (8 bit), algorithm (8 bit) e public key (stringa di ottetti in formato di linea);
- per il resource record RRSIG: la forma canonica dell'RDATA è la concatenazione, in ordine, di type covered, algorithm, labels, original TTL, signature expiration, signature inception, key tag, signer's name (nome di dominio canonico) e signature;
- per il resource record DS: la forma canonica dell'RDATA è la concatenazione, in ordine, di key tag, algorithm, digest type e digest;
- per il resource record NSEC: la forma canonica dell'RDATA è la concatenazione, in ordine, di next domain name (forma canonica) e type bit maps (codificate secondo la sezione 5.1).
6.2. Forma canonica di un nome di dominio
La forma canonica (canonical form) di un nome di dominio è definita come segue:
- i caratteri US-ASCII nel nome di dominio DEVONO essere rappresentati in minuscolo (ovvero, quando si sceglie di non distinguere tra maiuscole e minuscole, si devono usare le minuscole). Ad esempio, i caratteri "A"–"Z" DEVONO essere mappati su "a"–"z";
- il nome di dominio DEVE essere non compresso (ovvero non deve utilizzare puntatori di compressione delle label);
- il nome di dominio DEVE essere rappresentato in forma di linea (wire format) completa e non compressa, terminante con una label vuota (label di lunghezza nulla).
6.3. Ordine canonico
L'ordine canonico dei resource record (canonical RR order) serve a determinare l'ordine relativo dei resource record all'interno di un RRset nonché l'ordine dei nomi e dei tipi in una zona (utilizzato, ad esempio, dai record NSEC). L'ordine canonico è definito come segue:
-
ordinare innanzitutto per il nome del proprietario in forma canonica, senza distinzione tra maiuscole e minuscole, utilizzando l'ordine canonico dei nomi di dominio (vedi sotto). Se il nome del proprietario non consente di discriminare (ovvero i nomi sono uguali), passare al passo successivo;
-
ordinare quindi per la classe (CLASS) del resource record in ordine numerico crescente (per DNSSEC la classe è in genere IN). Se la classe è uguale, passare al passo successivo;
-
ordinare quindi per il tipo (TYPE) del resource record in ordine numerico crescente;
-
ordinare infine, per i record all'interno di un RRset aventi lo stesso nome del proprietario, la stessa classe e lo stesso tipo, secondo l'ordine binario dell'RDATA canonico (canonical RDATA order) crescente:
- per i tipi il cui RDATA contiene nomi di dominio, confrontare i nomi di dominio in forma canonica (senza distinzione tra maiuscole e minuscole);
- per i record SOA, confrontare nell'ordine dei campi MNAME, RNAME, SERIAL, REFRESH, RETRY, EXPIRE, MINIMUM, ciascun campo confrontato nella sua forma canonica;
- per i tipi contenenti più nomi di dominio (ad esempio un record MX in cui a una priorità segue il nome di dominio di destinazione), confrontare prima i campi diversi dai nomi di dominio, poi i nomi di dominio in forma canonica;
- per i tipi DNSSEC definiti in questo documento, confrontare byte per byte secondo l'ordine binario dell'RDATA prescritto nella sezione 6.1.
Ordine canonico dei nomi di dominio (canonical DNS name order): due nomi di dominio sono confrontati label per label, dalla fine (label più a destra) verso l'inizio, ciascuna label confrontata secondo l'ordine dei byte senza distinzione tra maiuscole e minuscole. Ad esempio, il nome "a.example." viene prima di "b.example." e "example." viene prima di "a.example.".
6.4. Gestione della firma e della verifica
Quando si firma un RRset, il firmatario DEVE scrivere ciascun resource record del RRset nell'input della firma secondo le forme e l'ordine canonici delle sezioni 6.1–6.3, quindi applicare l'algoritmo di firma (vedi [RFC4035]). Il validatore DEVE ricostruire l'input della firma nello stesso modo e verificare la firma.
Navigazione tra sezioni:
- Precedente: 5. Resource record NSEC
- Successivo: 7. Considerazioni IANA