3. The NSEC3 Resource Record (NSEC3 リソースレコード)
3. The NSEC3 Resource Record (NSEC3 リソースレコード)
NSEC3 リソースレコード (RR) は, DNS リソースレコードセットの認証済み否定応答 (authenticated denial of existence) を提供します。
NSEC3 RR は, NSEC3 RR の元のオーナー名に存在する RR タイプをリストします。ゾーンのハッシュ順序における次のハッシュ化されたオーナー名を含みます。ゾーン内の NSEC3 RR の完全なセットは, RR の元のオーナー名に存在する RRSet を示し, ゾーン内のハッシュ化されたオーナー名のチェーンを形成します。この情報は, DNS データの認証済み否定応答を提供するために使用されます。ゾーン列挙に対する保護を提供するために, NSEC3 RR で使用されるオーナー名は, 元のオーナー名の暗号化ハッシュで, ゾーンの名前に単一のラベルとして前置されます。NSEC3 RR は, ハッシュを構築するために使用されるハッシュ関数, 使用される salt, および元のオーナー名に対してハッシュ関数が実行される回数を示します。ハッシュ技術については, セクション 5 で完全に説明されています。
未署名委任のハッシュ化されたオーナー名は, チェーンから除外される場合があります。スパンが未署名委任のオーナー名または "次近接" 名のハッシュをカバーする NSEC3 RR は, Opt-Out NSEC3 RR と呼ばれ, フラグの存在によって示されます。
NSEC3 RR のオーナー名は, ハッシュ化されたオーナー名の base32 エンコーディングで, ゾーンの名前に単一のラベルとして前置されます。
NSEC3 RR のタイプ値は50です。
NSEC3 RR RDATA 形式はクラスに依存せず, 以下に説明されています。
クラスは元のオーナー名のクラスと同じでなければなりません (MUST)。
NSEC3 RR は, SOA minimum TTL フィールドと同じ TTL 値を持つべきです (SHOULD)。これは否定的キャッシング [RFC2308] の精神に基づいています。
3.1 RDATA Fields (RDATA フィールド)
3.1.1 Hash Algorithm (ハッシュアルゴリズム)
Hash Algorithm フィールドは, ハッシュ値を構築するために使用される暗号化ハッシュアルゴリズムを識別します。
このフィールドの値は, セクション 11 で定義されている NSEC3 ハッシュアルゴリズムレジストリで定義されています。
3.1.2 Flags (フラグ)
Flags フィールドには, 異なる処理を示すために使用できる8つの1ビットフラグが含まれています。すべての未定義フラグはゼロでなければなりません。この仕様で定義されている唯一のフラグは Opt-Out フラグです。
3.1.2.1 Opt-Out Flag (Opt-Out フラグ)
Opt-Out フラグが設定されている場合, NSEC3 レコードは0個以上の未署名委任をカバーします。
Opt-Out フラグがクリアされている場合, NSEC3 レコードは0個の未署名委任をカバーします。
Opt-Out Flag は, この NSEC3 RR が未署名委任をカバーする可能性があるかどうかを示します。これは Flags フィールドの最下位ビットです。このフラグの使用の詳細については, セクション 6 を参照してください。
3.1.3 Iterations (反復回数)
Iterations フィールドは, ハッシュ関数が実行された追加の回数を定義します。より多くの反復は, 辞書攻撃に対するハッシュ値の回復力を高めますが, サーバーとリゾルバーの両方にとって計算コストが高くなります。このフィールドの使用の詳細については, セクション 5 を, 値の制限については, セクション 10.3 を参照してください。
3.1.4 Salt Length (Salt 長)
Salt Length フィールドは, Salt フィールドの長さをオクテット単位で定義し, 0から255の範囲の値を取ります。
3.1.5 Salt
Salt フィールドは, 事前計算された辞書攻撃を防御するために, ハッシュ化の前に元のオーナー名に追加されます。salt の使用方法の詳細については, セクション 5 を参照してください。
3.1.6 Hash Length (ハッシュ長)
Hash Length フィールドは, Next Hashed Owner Name フィールドの長さを定義し, 1から255オクテットの範囲の値を取ります。
3.1.7 Next Hashed Owner Name (次のハッシュ化されたオーナー名)
Next Hashed Owner Name フィールドには, ハッシュ順序における次のハッシュ化されたオーナー名が含まれています。この値はバイナリ形式です。すべてのハッシュ化されたオーナー名の順序付けられたセットを考えると, Next Hashed Owner Name フィールドには, 与えられた NSEC3 RR のオーナー名の直後に続くオーナー名のハッシュが含まれています。ゾーン内の最後の NSEC3 RR の Next Hashed Owner Name フィールドの値は, ハッシュ順序におけるゾーン内の最初の NSEC3 RR のハッシュ化されたオーナー名と同じです。NSEC3 RR のオーナー名とは異なり, このフィールドの値には追加されたゾーン名が含まれていないことに注意してください。
3.1.8 Type Bit Maps (タイプビットマップ)
Type Bit Maps フィールドは, NSEC3 RR の元のオーナー名に存在する RRSet タイプを識別します。
3.2 NSEC3 RDATA Wire Format (NSEC3 RDATA ワイヤ形式)
NSEC3 RR の RDATA は以下のように示されます:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hash Alg. | Flags | Iterations |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Salt Length | Salt /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hash Length | Next Hashed Owner Name /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ Type Bit Maps /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Hash Algorithm は単一のオクテットです。
Flags フィールドは単一のオクテットで, Opt-Out フラグは最下位ビットです。以下のように示されます:
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| |O|
+-+-+-+-+-+-+-+-+
Iterations は16ビット符号なし整数として表され, 最上位ビットが最初です。
Salt Length は符号なしオクテットとして表されます。Salt Length は Salt フィールドの長さをオクテット単位で表します。値がゼロの場合, 後続の Salt フィールドは省略されます。
Salt は, 存在する場合, バイナリオクテットのシーケンスとしてエンコードされます。このフィールドの長さは, 前の Salt Length フィールドによって決定されます。
Hash Length は符号なしオクテットとして表されます。Hash Length は Next Hashed Owner Name フィールドの長さをオクテット単位で表します。
次のハッシュ化されたオーナー名は, NSEC3 RR のオーナー名とは異なり, base32 エンコードされていません。これは変更されていないバイナリハッシュ値です。含まれるゾーンの名前は含まれていません。このフィールドの長さは, 前の Hash Length フィールドによって決定されます。
3.2.1 Type Bit Maps Encoding (タイプビットマップエンコーディング)
Type Bit Maps フィールドのエンコーディングは, [RFC4034] で説明されている NSEC RR で使用されるものと同じです。明確にするために, ここで説明および明確化されています。
RR タイプスペースは256個のウィンドウブロックに分割され, それぞれが16ビット RR タイプスペースの下位8ビットを表します。少なくとも1つのアクティブな RR タイプを持つ各ブロックは, 単一のオクテットウィンドウ番号 (0から255), 単一のオクテットビットマップ長 (1から32) を使用してエンコードされ, ウィンドウブロックのビットマップに使用されるオクテット数を示し, 最大32オクテット (256ビット) のビットマップが続きます。
ブロックは, NSEC3 RR RDATA 内で数値の昇順で存在します。
Type Bit Maps Field = ( Window Block # | Bitmap Length | Bitmap )+
ここで "|" は連結を示します。
各ビットマップは, ウィンドウブロック内の RR タイプの下位8ビットを, ネットワークビット順序でエンコードします。最初のビットはビット0です。ウィンドウブロック0の場合, ビット1は RR タイプ1 (A) に対応し, ビット2は RR タイプ2 (NS) に対応します, 以下同様です。ウィンドウブロック1の場合, ビット1は RR タイプ257に対応し, ビット2は RR タイプ258に対応します。ビットが1に設定されている場合, そのタイプの RRSet が NSEC3 RR の元のオーナー名に存在することを示します。ビットが0に設定されている場合, そのタイプの RRSet が NSEC3 RR の元のオーナー名に存在しないことを示します。
ウィンドウブロック0のビット0は存在しない RR タイプ0を参照しているため, 0に設定されなければなりません (MUST)。検証後, バリデーターはウィンドウブロック0のビット0の値を無視しなければなりません (MUST)。
[RFC2929] のセクション 3.1 で指定されている Meta-TYPE または QTYPE を表すビット, または QTYPE および Meta-TYPE への割り当てのためにのみ予約された範囲内のビットは, ゾーンデータに表示されないため, 0に設定されなければなりません (MUST)。読み取り時に遭遇した場合, それらは無視されなければなりません。
タイプが存在しないブロックは含めてはなりません (MUST NOT)。ビットマップの末尾のゼロオクテットは省略されなければなりません (MUST)。各ブロックのビットマップの長さは, NSEC3 RR の元のオーナー名に存在する RR タイプのセットの中で, そのブロック内で最大の数値を持つタイプコードによって決定されます。指定されていない末尾のオクテットは, ゼロオクテットとして解釈されなければなりません (MUST)。
3.3 Presentation Format (表示形式)
RDATA 部分の表示形式は以下のとおりです:
-
Hash Algorithm フィールドは, 符号なし10進整数として表されます。値は最大255です。
-
Flags フィールドは, 符号なし10進整数として表されます。値は最大255です。
-
Iterations フィールドは, 符号なし10進整数として表されます。値は0から65535の範囲です (両端を含む)。
-
Salt Length フィールドは表されません。
-
Salt フィールドは, 大文字小文字を区別しない16進数のシーケンスとして表されます。シーケンス内に空白は許可されません。Salt Length フィールドの値が0の場合, Salt フィールドは "-" (引用符なし) として表されます。
-
Hash Length フィールドは表されません。
-
Next Hashed Owner Name フィールドは, 空白のない, パディングされていない, 大文字小文字を区別しない base32 数字のシーケンスとして表されます。
-
Type Bit Maps フィールドは, RR タイプニーモニックのシーケンスとして表されます。ニーモニックが不明な場合, [RFC3597] のセクション 5 で説明されている TYPE 表現を使用しなければなりません (MUST)。