メインコンテンツまでスキップ

6. リソースレコードの正規形式と順序

本書は、リソースレコード集合(RRset)の署名および検証に使用されるリソースレコードの正規形式(canonical form)および正規順(canonical order)を定義する。正規形式を使用することで、ゾーンの表現形式(presentation)が変化した場合(たとえば、ゾーンのネームサーバ間でゾーン転送が行われ、ドメイン名が圧縮されたり大文字小文字が変更されたりした場合)でも、署名が有効であり続けることを保証する。

6.1. 正規形式​

リソースレコードに署名または検証を行うとき、署名入力(signature input)を構成するリソースレコードは正規形式で表現 MUST である。リソースレコードの正規形式は以下のとおりである。

  • 所有者名(OWNER NAME)は正規形式のドメイン名で表現 MUST である(第 6.2 節参照)。
  • RDATA のドメイン名形式をとるいかなる部分も、正規形式のドメイン名で表現 MUST である(第 6.2 節参照)。
  • リソースレコードの型がドメイン名形式の RDATA フィールド(たとえば NS、MX、CNAME、SOA、PTR レコードなど)を定義している場合、これらのドメイン名も正規形式(非圧縮、すべて小文字)で表現 MUST である。
  • すべてのドメイン名は圧縮してはならない(MUST NOT)。
  • テキスト文字列()の形をとるドメイン名の部分は、正規形式で表現し、かつ圧縮してはならない(MUST NOT)。
  • 本書で定義される DNSSEC 型(DNSKEY、RRSIG、DS、NSEC)については、その RDATA は第 2、3、4、5 節で規定されたフォーマットおよび順序で、フィールドごとにバイナリ形式で書き出されなければならない(MUST)。

具体的な規則は以下のとおりである。

  1. DNSKEY リソースレコードについて:RDATA の正規形式は、フラグ(16 ビット)、プロトコル(8 ビット)、アルゴリズム(8 ビット)、および公開鍵(線上形式のバイト列)を順に連結したものである。
  2. RRSIG リソースレコードについて:RDATA の正規形式は、タイプカバー、アルゴリズム、ラベル数、元の TTL、署名有効期限、署名開始日時、キータグ、署名者名(正規ドメイン名)、および署名を順に連結したものである。
  3. DS リソースレコードについて:RDATA の正規形式は、キータグ、アルゴリズム、ダイジェスト型、およびダイジェストを順に連結したものである。
  4. NSEC リソースレコードについて:RDATA の正規形式は、次のドメイン名(正規形式)およびタイプビットマップ(第 5.1 節の符号化による)を順に連結したものである。

6.2. ドメイン名の正規形式​

ドメイン名の正規形式(canonical form)は以下のように定義される。

  • ドメイン名内の US-ASCII 文字は小文字で表現 MUST である(すなわち、大文字小文字を区別しない選択を行う場合は小文字を使用する)。たとえば、文字 "A" から "Z" は "a" から "z" にマップ MUST である。
  • ドメイン名は圧縮してはならない(MUST NOT。すなわち、ラベル圧縮ポインタを使用してはならない)。
  • ドメイン名は、空ラベル(長さ 0 のラベル)で終端される、完全かつ非圧縮の線上形式(wire format)で表現 MUST である。

6.3. 正規順​

正規のリソースレコード順(canonical RR order)は、RRset 内のリソースレコードの相対順序、およびゾーン内の名前と型の順序(たとえば NSEC レコードによって使用される)を決定するために使用される。正規順は以下のように定義される。

  1. まず、所有者名の正規形式を大文字小文字を区別せずにソートする。ドメイン名の正規順(後述)を使用する。所有者名で区別できない場合(すなわち名前が等しい場合)は次へ進む。

  2. 次に、リソースレコードのクラス(CLASS)を数値昇順にソートする(DNSSEC では通常 IN)。クラスが等しい場合は次へ進む。

  3. 次に、リソースレコードの型(TYPE)を数値昇順にソートする。

  4. 次に、同じ所有者名、クラス、および型を持つ RRset 内のレコードについては、RDATA の正規形式のバイナリ順(canonical RDATA order)で昇順にソートする:

    • RDATA にドメイン名を含む型については、ドメイン名を正規形式で比較する(大文字小文字を区別しない)。
    • SOA レコードについては、フィールドを MNAME、RNAME、SERIAL、REFRESH、RETRY、EXPIRE、MINIMUM の順に、各フィールドをその正規形式で比較する。
    • 複数のドメイン名を持つ型(たとえば MX レコードの優先度の後にターゲットドメイン名が続く)については、まずドメイン名でないフィールドを比較し、その後ドメイン名を正規形式で比較する。
    • 本書で定義される DNSSEC 型については、第 6.1 節で規定されたバイナリ RDATA 順に従いバイトごとに比較する。

ドメイン名の正規順(canonical DNS name order):2 つのドメイン名は、末尾(最も右のラベル)から先頭に向かってラベルごとに比較され、各ラベル内では大文字小文字を区別しないバイト順で比較される。たとえば、名前 "a.example." は "b.example." の前にあり、"example." は "a.example." の前にある。

6.4. 署名および検証の処理​

RRset に署名するとき、署名者は第 6.1 節から第 6.3 節の正規形式および正規順に従って RRset 内の各リソースレコードを署名入力に書き出し、その後署名アルゴリズム([RFC4035] 参照)を適用 MUST である。検証者は同じ方法で署名入力を再構成し、署名を検証 MUST である。


関連章ナビゲーション: