3. RRSIG リソースレコード (The RRSIG Resource Record)
DNSSEC は公開鍵暗号を使用して、DNS リソースレコードセット (RRsets) に署名し、認証します。デジタル署名 (digital signatures) は RRSIG リソースレコードに格納され、[RFC4035] に記述されている DNSSEC 認証プロセスで使用されます。検証者 (validator) はこれらの RRSIG RR を使用して、ゾーンからの RRset を認証することができます。RRSIG RR は、DNS 操作を保護するために使用される検証材料 (デジタル署名) を運ぶためにのみ使用されなければなりません (MUST)。
RRSIG レコードには、特定の名前、クラス、およびタイプを持つ RRset の署名が含まれます。RRSIG RR は署名の有効期間 (validity interval) を指定し、アルゴリズム (Algorithm)、署名者名 (Signer's Name)、および Key Tag を使用して、検証者が署名を検証するために使用できる公開鍵を含む DNSKEY RR を識別します。
ゾーン内のすべての権威 RRset はデジタル署名によって保護されなければならないため、CNAME RR を含む名前には RRSIG RR が存在しなければなりません (MUST)。これは、名前に CNAME が存在する場合、その名前で許可される唯一のタイプであると述べていた従来の DNS 仕様 [RFC1034] に対する変更です。署名されたゾーンでは、RRSIG と NSEC (セクション4を参照) は、CNAME リソースレコードと同じ名前に存在しなければなりません (MUST)。
RRSIG RR タイプの Type 値は 46 です。
RRSIG RR はクラス独立です。
RRSIG RR は、それがカバーする RRset と同じクラスを持たなければなりません (MUST)。
RRSIG RR の TTL 値は、それがカバーする RRset の TTL 値と一致しなければなりません (MUST)。これは、RRset 内の個々の RR の TTL 値に関する [RFC2181] の規則の例外です。同じ所有者名を持つ個々の RRSIG RR は、それらがカバーする RRset が異なる TTL 値を持つ場合、異なる TTL 値を持ちます。
3.1. RRSIG RDATA ワイヤ形式 (RRSIG RDATA Wire Format)
RRSIG RR の RDATA は、2オクテットの Type Covered フィールド、1オクテットの Algorithm フィールド、1オクテットの Labels フィールド、4オクテットの Original TTL フィールド、4オクテットの Signature Expiration フィールド、4オクテットの Signature Inception フィールド、2オクテットの Key Tag、署名者名フィールド (Signer's Name field)、および署名フィールド (Signature field) で構成されます。
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. Type Covered フィールド (The Type Covered Field)
Type Covered フィールドは、この RRSIG レコードによってカバーされる RRset のタイプを識別します。
3.1.2. Algorithm Number フィールド (The Algorithm Number Field)
Algorithm Number フィールドは、署名を作成するために使用される暗号アルゴリズムを識別します。DNSSEC アルゴリズムタイプのリストは付録 A.1 にあります。
3.1.3. Labels フィールド (The Labels Field)
Labels フィールドは、元の RRSIG RR 所有者名のラベル数を指定します。このフィールドの重要性は、検証者がこれを使用して、応答がワイルドカードから合成されたかどうかを判断することです。その場合、署名の生成に使用された所有者名を決定するために使用できます。
署名を検証するために、検証者は署名の作成に使用された元の所有者名を必要とします。元の所有者名にワイルドカードラベル ("*") が含まれている場合、応答処理中にサーバーによって所有者名が展開されている可能性があり、その場合、検証者は署名を検証するために元の所有者名を再構築する必要があります。[RFC4035] は、Labels フィールドを使用して元の所有者名を再構築する方法を説明しています。
Labels フィールドの値は、所有者名を終端する null (ルート) ラベルまたはワイルドカードラベル (存在する場合) のいずれもカウントしてはなりません (MUST NOT)。Labels フィールドの値は、RRSIG 所有者名のラベル数以下でなければなりません (MUST)。例えば、"www.example.com." の Labels フィールド値は 3 であり、"*.example.com." の Labels フィールド値は 2 です。ルート (".") の Labels フィールド値は 0 です。
ワイルドカードラベルは RRSIG RR の Labels フィールドに格納されるカウントには含まれませんが、署名が生成または検証されるとき、ワイルドカードラベルは RRset の所有者名の一部です。
3.1.4. Original TTL フィールド (Original TTL Field)
Original TTL フィールドは、権威ゾーンに現れるカバーされた RRset の TTL を指定します。
Original TTL フィールドは、キャッシュリゾルバがキャッシュされた RRset の TTL 値を減少させるため、必要です。署名を検証するために、検証者は元の TTL を必要とします。[RFC4035] は、Original TTL フィールド値を使用して元の TTL を再構築する方法を説明しています。
3.1.5. 署名有効期限と開始時刻フィールド (Signature Expiration and Inception Fields)
Signature Expiration と Inception フィールドは、署名の有効期間を指定します。RRSIG レコードは、開始日時より前の認証に使用してはならず (MUST NOT)、有効期限日時より後の認証に使用してはなりません (MUST NOT)。
Signature Expiration と Inception フィールドの値は、1970年1月1日 00:00:00 UTC からの経過秒数を表す32ビット符号なし数値の形式で、閏秒を無視し、ネットワークバイト順序で日時を指定します。この形式でラップアラウンドなしに表現できる最長間隔は約136年です。RRSIG RR は、有効期限フィールド値が32ビットラップアラウンドポイントに近い場合、または署名が長期間有効である場合、Expiration フィールド値が数値的に Inception フィールド値よりも小さくなる可能性があります。このため、これらのフィールドに関するすべての比較は、[RFC1982] で定義されている「シリアル番号演算 (Serial number arithmetic)」を使用しなければなりません (MUST)。直接の結果として、これらのフィールドに含まれる値は、過去または未来の68年以上の日付を参照することはできません。
3.1.6. Key Tag フィールド (The Key Tag Field)
Key Tag フィールドには、この署名を検証する DNSKEY RR の key tag 値が、ネットワークバイト順序で含まれます。付録 B は Key Tag 値の計算方法を説明しています。
3.1.7. 署名者名フィールド (The Signer's Name Field)
署名者名フィールドの値は、検証者がこの署名を検証するために使用すべき DNSKEY RR の所有者名を識別します。署名者名フィールドは、カバーされた RRset のゾーンの名前を含まなければなりません (MUST)。送信者は、RRSIG RR を送信するときに署名者名フィールドで DNS 名前圧縮を使用してはなりません (MUST NOT)。
3.1.8. 署名フィールド (The Signature Field)
署名フィールドには、RRSIG RDATA (署名フィールドを除く) と、RRSIG 所有者名、RRSIG クラス、および RRSIG Type Covered フィールドによって指定された RRset をカバーする暗号署名が含まれます。このフィールドの形式は使用中のアルゴリズムに依存し、これらの形式は別の関連文書で説明されています。
3.2. RRSIG RR 表示形式 (The RRSIG RR Presentation Format)
RDATA 部分の表示形式は以下の通りです。
Type Covered フィールドは RR タイプニーモニックとして表現されます。ニーモニックが不明な場合、[RFC3597] のセクション5で説明されている TYPE 表現を使用しなければなりません (MUST)。
Algorithm フィールド値は、符号なし10進整数として、または付録 A.1 で指定されているアルゴリズムニーモニックとして表現されなければなりません (MUST)。
Labels フィールド値は符号なし10進整数として表現されなければなりません (MUST)。
Original TTL フィールド値は符号なし10進整数として表現されなければなりません (MUST)。
Signature Expiration と Inception フィールドの値は、1970年1月1日 00:00:00 UTC からの秒数を示す符号なし10進整数として、または UTC の YYYYMMDDHHmmSS 形式で表現されなければなりません (MUST)。ここで:
- YYYY は年 (0001-9999)
- MM は月番号 (01-12)
- DD は月の日 (01-31)
- HH は24時間表記の時間 (00-23)
- mm は分 (00-59)
- SS は秒 (00-59)
これらのフィールドを人間に提示する実装は、YYYYMMDDHHmmSS 形式を使用すべきです (SHOULD)。
Key Tag フィールドは符号なし10進整数として表現されなければなりません (MUST)。
署名者名フィールド値はドメイン名として表現されなければなりません (MUST)。
署名フィールドは署名の Base64 エンコーディングとして表現されなければなりません (MUST)。Base64 テキスト内に空白を含めることができます。Base64 エンコーディングの定義については、[RFC3548] を参照してください。
3.3. RRSIG RR の例 (RRSIG RR Example)
以下の RRSIG RR は、host.example.com の A RRset の署名を格納しています。
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= )
最初の4つのフィールドは、所有者名、TTL、クラス、および RR タイプ (RRSIG) を指定します。"A" は Type Covered フィールドを表します。値 5 は Algorithm フィールドです。値 3 は Labels フィールドです。値 86400 は Original TTL フィールドで、これは A RRset に使用された TTL 値でした。時刻値 20050322173103 と 20050220173103 は、それぞれ Signature Expiration と Inception の日時です。値 2642 は Key Tag で、example.com. は署名者名です。残りのテキストは署名フィールドの Base64 エンコーディングです。
関連章へのナビゲーション: