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

付録 C. 特別な考慮事項

付録 C. 特別な考慮事項

以下の段落では、特定の動作を明確にし、実装における特別な考慮事項を説明する。

C.1. ソルト

ハッシュ化の前に元のオーナー名へソルトを付加すると、事前生成済みハッシュ値の辞書を作成するコストが増大する。ソルトの各ビットごとに、事前計算された辞書のコストは 2 倍になる。これは、各語と可能な各ソルト値の組合せに対するエントリが必要になるためである。NSEC3 RR は最大 2040 ビット(255 オクテット)のソルトを使用でき、コストは 2^2040 倍になる。したがって実際には、ソルトが変更されるたびに、攻撃者は辞書を再計算しなければならない。

ソルトを含めても、その大きさにかかわらず NSEC3 RR の構築コストには影響しない。ただし NSEC3 RR のサイズは増加する。

ゾーンには、同じソルト値を使用する完全な NSEC3 RR の集合が少なくとも 1 つ存在しなければならない(MUST)。

単一のソルトを用いた事前計算を防ぐため、ソルトは定期的に変更するべきである(SHOULD)。再署名のたびにソルトを変更することが推奨される(RECOMMENDED)。

このため、リゾルバが同じゾーンについて異なるソルト値を持つ RR を見る可能性がある。しかし、各 RR は単独で成立するため、これは無害である。すなわち、その NSEC3 RR のソルトを使用して得られるハッシュが NSEC3 RR 内の 2 つのハッシュの間に位置するオーナー名の集合を、その RR 単独で否定する。あらゆる問い合わせに応答するために同じソルトを持つ完全な NSEC3 RR 集合を必要とするのは、サーバだけである。

同じゾーン内に異なるソルトを持つ NSEC3 RR を置くことは禁止されていない。ただし、権威サーバがカバーする NSEC3 RR を一貫して見つけられるようにするため、権威サーバは NSEC3 RR を選択する際に、単一のパラメータ集合(アルゴリズム、ソルト、および反復回数)を選択しなければならない(MUST)。

C.2. ハッシュ衝突

ハッシュ衝突は、異なるメッセージが同じハッシュ値を持つときに発生する。n ビット長のハッシュで 1 回の衝突が発生する確率を 2 分の 1 にするために必要なドメイン名の期待数は、およそ 2^(n/2) である。たとえば SHA-1 では 2^80 である。この確率は極めて低いが、以下では衝突を回避する方法と、ハッシュ衝突を利用した攻撃が起きた場合の損害評価を扱う。

C.2.1. 生成時のハッシュ衝突の回避

NSEC3 RR の生成時には、ハッシュ値は一意であることが前提となる。学術的には起こり得る衝突が発生した場合、別のソルトを選択し、すべてのハッシュ値を再生成しなければならない(MUST)。

C.2.2. 第二原像要件の分析

暗号学的ハッシュ関数には第二原像耐性という性質がある。第二原像耐性とは、与えられたメッセージと同じハッシュ値を持つ別のメッセージを見つけることが計算量的に実行不可能であることをいう。すなわち、原像 X が与えられたとき、hash(X) = hash(X') となる第二原像 X' != X を見つけることはできない。SHA-1 で第二原像を見つけるための作業係数は 2^160 程度である。既存の NSEC3 RR を利用した攻撃を行うには、攻撃者は第二原像を見つける必要がある。

攻撃者がこのような極端な攻撃を実行できると仮定すると、実際の損害は、ある QNAME、すなわち第二原像が存在すると主張する応答メッセージを生成できる点にある。実際には QNAME は存在しないため、これは偽陽性であり、セキュリティを認識するリゾルバが存在しない名前への問い合わせを再試行するか、最初の問い合わせを失敗させる。攻撃者は既存の名前に対してこの攻撃を行うことはできず、攻撃者が選べず、かつまだ存在しない名前に対してのみ行える。