3. Il record di risorsa RRSIG (The RRSIG Resource Record)
DNSSEC utilizza la crittografia a chiave pubblica per firmare e autenticare i set di record di risorse DNS (RRsets). Le firme digitali (digital signatures) sono memorizzate nei record di risorse RRSIG e sono utilizzate nel processo di autenticazione DNSSEC descritto in [RFC4035]. Un validatore (validator) può utilizzare questi RR RRSIG per autenticare i RRsets dalla zona. Il RR RRSIG DEVE essere utilizzato solo per trasportare materiale di verifica (firme digitali) utilizzato per proteggere le operazioni DNS.
Un record RRSIG contiene la firma per un RRset con un nome, una classe e un tipo particolari. Il RR RRSIG specifica un intervallo di validità (validity interval) per la firma e utilizza Algorithm, Signer's Name e Key Tag per identificare il RR DNSKEY contenente la chiave pubblica che un validatore può utilizzare per verificare la firma.
Poiché ogni RRset autorevole in una zona deve essere protetto da una firma digitale, i RR RRSIG devono essere presenti per i nomi contenenti un RR CNAME. Questo è un cambiamento rispetto alla specifica DNS tradizionale [RFC1034], che affermava che se un CNAME è presente per un nome, è l'unico tipo consentito per quel nome. In una zona firmata, RRSIG e NSEC (vedere Sezione 4) DEVONO esistere per lo stesso nome di un record di risorsa CNAME.
Il valore Type per il tipo RR RRSIG è 46.
Il RR RRSIG è indipendente dalla classe.
Un RR RRSIG DEVE avere la stessa classe del RRset che copre.
Il valore TTL di un RR RRSIG DEVE corrispondere al valore TTL del RRset che copre. Questa è un'eccezione alle regole [RFC2181] per i valori TTL dei RR individuali all'interno di un RRset: i RR RRSIG individuali con lo stesso nome del proprietario avranno valori TTL diversi se i RRsets che coprono hanno valori TTL diversi.
3.1. Formato wire RDATA RRSIG (RRSIG RDATA Wire Format)
Il RDATA per un RR RRSIG consiste in un campo Type Covered di 2 ottetti, un campo Algorithm di 1 ottetto, un campo Labels di 1 ottetto, un campo Original TTL di 4 ottetti, un campo Signature Expiration di 4 ottetti, un campo Signature Inception di 4 ottetti, un Key Tag di 2 ottetti, il campo Signer's Name e il campo Signature.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type Covered | Algorithm | Labels |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Original TTL |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Signature Expiration |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Signature Inception |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Key Tag | /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Signer's Name /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
/ Signature /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3.1.1. Il campo Type Covered (The Type Covered Field)
Il campo Type Covered identifica il tipo del RRset coperto da questo record RRSIG.
3.1.2. Il campo Algorithm Number (The Algorithm Number Field)
Il campo Algorithm Number identifica l'algoritmo crittografico utilizzato per creare la firma. Un elenco dei tipi di algoritmo DNSSEC può essere trovato nell'Appendice A.1.
3.1.3. Il campo Labels (The Labels Field)
Il campo Labels specifica il numero di etichette nel nome del proprietario del RR RRSIG originale. Il significato di questo campo è che un validatore lo utilizza per determinare se la risposta è stata sintetizzata da un wildcard. In tal caso, può essere utilizzato per determinare quale nome del proprietario è stato utilizzato nella generazione della firma.
Per validare una firma, il validatore necessita del nome del proprietario originale utilizzato per creare la firma. Se il nome del proprietario originale contiene un'etichetta wildcard ("*"), il nome del proprietario potrebbe essere stato espanso dal server durante il processo di risposta, nel qual caso il validatore dovrà ricostruire il nome del proprietario originale per validare la firma. [RFC4035] descrive come utilizzare il campo Labels per ricostruire il nome del proprietario originale.
Il valore del campo Labels NON DEVE contare né l'etichetta null (root) che termina il nome del proprietario né l'etichetta wildcard (se presente). Il valore del campo Labels DEVE essere minore o uguale al numero di etichette nel nome del proprietario RRSIG. Ad esempio, "www.example.com." ha un valore del campo Labels di 3, e "*.example.com." ha un valore del campo Labels di 2. Root (".") ha un valore del campo Labels di 0.
Sebbene l'etichetta wildcard non sia inclusa nel conteggio memorizzato nel campo Labels del RR RRSIG, l'etichetta wildcard fa parte del nome del proprietario del RRset quando la firma viene generata o verificata.
3.1.4. Campo Original TTL (Original TTL Field)
Il campo Original TTL specifica il TTL del RRset coperto come appare nella zona autorevole.
Il campo Original TTL è necessario perché un resolver di caching decrementa il valore TTL di un RRset memorizzato nella cache. Per validare una firma, un validatore richiede il TTL originale. [RFC4035] descrive come utilizzare il valore del campo Original TTL per ricostruire il TTL originale.
3.1.5. Campi Signature Expiration e Inception (Signature Expiration and Inception Fields)
I campi Signature Expiration e Inception specificano un periodo di validità per la firma. Il record RRSIG NON DEVE essere utilizzato per l'autenticazione prima della data di inception e NON DEVE essere utilizzato per l'autenticazione dopo la data di expiration.
I valori dei campi Signature Expiration e Inception specificano una data e un'ora sotto forma di numero senza segno a 32 bit di secondi trascorsi dal 1° gennaio 1970 00:00:00 UTC, ignorando i secondi intercalari, in ordine di byte di rete. L'intervallo più lungo che può essere espresso da questo formato senza avvolgimento è di circa 136 anni. Un RR RRSIG può avere un valore del campo Expiration numericamente più piccolo del valore del campo Inception se il valore del campo expiration è vicino al punto di avvolgimento a 32 bit o se la firma è di lunga durata. Per questo motivo, tutti i confronti che coinvolgono questi campi DEVONO utilizzare "l'aritmetica dei numeri di serie" (Serial number arithmetic), come definito in [RFC1982]. Come conseguenza diretta, i valori contenuti in questi campi non possono riferirsi a date più di 68 anni nel passato o nel futuro.
3.1.6. Il campo Key Tag (The Key Tag Field)
Il campo Key Tag contiene il valore del key tag del RR DNSKEY che valida questa firma, in ordine di byte di rete. L'Appendice B spiega come calcolare i valori Key Tag.
3.1.7. Il campo Signer's Name (The Signer's Name Field)
Il valore del campo Signer's Name identifica il nome del proprietario del RR DNSKEY che un validatore dovrebbe utilizzare per validare questa firma. Il campo Signer's Name DEVE contenere il nome della zona del RRset coperto. Un mittente NON DEVE utilizzare la compressione del nome DNS sul campo Signer's Name quando trasmette un RR RRSIG.
3.1.8. Il campo Signature (The Signature Field)
Il campo Signature contiene la firma crittografica che copre il RDATA RRSIG (escluso il campo Signature) e il RRset specificato dal nome del proprietario RRSIG, dalla classe RRSIG e dal campo RRSIG Type Covered. Il formato di questo campo dipende dall'algoritmo in uso e questi formati sono descritti in documenti compagni separati.
3.2. Formato di presentazione RR RRSIG (The RRSIG RR Presentation Format)
Il formato di presentazione della porzione RDATA è il seguente:
Il campo Type Covered è rappresentato come mnemonico del tipo RR. Quando il mnemonico non è noto, DEVE essere utilizzata la rappresentazione TYPE come descritto in [RFC3597], Sezione 5.
Il valore del campo Algorithm DEVE essere rappresentato come numero intero decimale senza segno o come mnemonico di algoritmo, come specificato nell'Appendice A.1.
Il valore del campo Labels DEVE essere rappresentato come numero intero decimale senza segno.
Il valore del campo Original TTL DEVE essere rappresentato come numero intero decimale senza segno.
I valori dei campi Signature Expiration e Inception DEVONO essere rappresentati come numero intero decimale senza segno che indica i secondi dal 1° gennaio 1970 00:00:00 UTC, o nel formato YYYYMMDDHHmmSS in UTC, dove:
- YYYY è l'anno (0001-9999)
- MM è il numero del mese (01-12)
- DD è il giorno del mese (01-31)
- HH è l'ora, in notazione 24 ore (00-23)
- mm è il minuto (00-59)
- SS è il secondo (00-59)
Le implementazioni che presentano questi campi agli esseri umani DOVREBBERO utilizzare il formato YYYYMMDDHHmmSS.
Il campo Key Tag DEVE essere rappresentato come numero intero decimale senza segno.
Il valore del campo Signer's Name DEVE essere rappresentato come nome di dominio.
Il campo Signature DEVE essere rappresentato come codifica Base64 della firma. Gli spazi sono consentiti all'interno del testo Base64. Per una definizione della codifica Base64, vedere [RFC3548].
3.3. Esempio di RR RRSIG (RRSIG RR Example)
Il seguente RR RRSIG memorizza la firma per il RRset A di host.example.com.
host.example.com. 86400 IN RRSIG A 5 3 86400 20050322173103 (
20050220173103 2642 example.com.
oJB1W6WNGv+ldvQ3WDG0MQkg5IEhjRip8WTr
PYGv07h108dUKGMeDPKijVCHX3DDKdfb+v6o
B9wfuh3DTJXUAfI/M0zmO/zz8bW0Rznl8O3t
GNazPwQKkRN20XPXV6nwwfoXmJQbsLNrLfkG
J5D6fwFm8nN+6pBzeDQfsS3Ap3o= )
I primi quattro campi specificano il nome del proprietario, TTL, classe e tipo RR (RRSIG). L'"A" rappresenta il campo Type Covered. Il valore 5 è il campo Algorithm. Il valore 3 è il campo Labels. Il valore 86400 è il campo Original TTL, che era il valore TTL utilizzato per il RRset A. I valori temporali 20050322173103 e 20050220173103 sono rispettivamente le date Signature Expiration e Inception. Il valore 2642 è il Key Tag ed example.com. è il Signer's Name. Il testo rimanente è una codifica Base64 del campo Signature.
Navigazione dei capitoli correlati: