DNS のセキュリティ機構に関するメモ DNS のセキュリティ機構には現在以下のようなものがある。 :DNSSEC(RFC2535) :TSIG(RFC2845) :TKEY(RFC2930) :SIG(0)(RFC2931) それぞれがやることはざっと以下の通り。 DNSSEC はデータ起源の認証、公開鍵の配布、公開鍵を利用した 認証と暗号化を行なう。 TSIG は DNSSEC では行なえない DNS 要求と応答の認証、 およびトランザクションの保証を共有秘密鍵を使用して 行なう。 TKEY は鍵の自動交換を行なう。 SIG(0) は 公開鍵/秘密鍵を用いて DNS 要求と応答の認証、 およびトランザクションの保証を行なう。 [DNSSEC] DNSSEC はデータ起源の認証(data origin authentication)、 公開鍵の配布、公開鍵を用いた認証と暗号化を行なう。 RFC2535 で定義されていて、後述する SIG(0) も同じ ドキュメント内でで定義されている。SIG(0) に関しては RFC2931 でいくつかの追加がなされている。 データ起源の認証は、公開鍵とゾーンに対する署名によって 行なう。そのためにはもちろん公開鍵の正当性をまず保証 しなければならないので、鍵そのものが他の信頼できる鍵に よって署名されてなければならない。よって、ある信頼できる 鍵をなんらかの方法(例えばオフラインで)手にいれて、 その鍵によって署名された鍵をたどって目的のゾーンの保証を 行なう。基本的に DNS ツリーをたどる形で(つまり、親の鍵に よって子の鍵を署名するという形で)それは行なわれる。 [TSIG] DNSSEC では実現されなかった本来の意味での DNS トランザクション 保証をする機構。ゾーンや RR に署名を行なうのではなく、 DNS のトランザクションそのものに署名を行なう。これによって、 サーバがクライアントを認証することも可能になった。 ゾーン転送の保護、サーバおよびクライアントの認証、 forwarder の認証、またグルーレコードの保証などに利用できる。 署名は共有秘密鍵を用いた一方向ハッシュで行なう。秘密鍵は手動で 設定しなければならない。よって、閉じた世界(つまり同じ組織など) でしか使えない。 共有秘密鍵は2つ以上のホストで共有してはならない。 よって、たくさんのクライアントとのトランザクションを認証 するためにはそのクライアントの数だけの秘密鍵が必要になる。 [TKEY] TSIG で用いられる共有秘密鍵を resolver と server との間で 安全に交換する方法について扱っている。 TKEY は鍵の交換を行なう際はかならず TSIG もしくは SIG(0) で トランザクションの保証をしていないといけない。 [SIG(0)] 公開鍵を使う TSIG。公開鍵の処理のため TSIG に比べて重い。