階層的に構成された名前空間を管理する名前管理システムであるDNS(Domain Name System)における応答の正当性を保証するための拡張仕様としてDNSSEC(DNSSecurity Extensions)が知られている。DNSSECにおいては、正当性を保証するために電子署名が利用される。
DNSSECが有効化されている場合におけるDNSの構成について図18を参照しながら説明する。図18には、クライアント装置10と、DNSキャッシュサーバ20と、DNSサーバ30と、DNSサーバ40と、DNSサーバ50とが図示されている。クライアント装置10は、名前解決によってドメイン名からIPアドレスを獲得してネットワーク上の各種のサービスを利用する。
DNSキャッシュサーバ20は、クライアント装置10とDNSサーバ30〜50の間で名前解決に関するやりとりを中継するとともに、クライアント装置10からの問い合わせに対するDNSサーバ30〜50からの応答を問い合わせ結果のキャッシュ21として記憶する。そして、クライアント装置10からの問い合わせに対する応答が問い合わせ結果のキャッシュ21に含まれる場合、DNSキャッシュサーバ20は、問い合わせをDNSサーバ30〜50へ転送する代わりに、問い合わせに対する応答が問い合わせ結果のキャッシュ21から取得して代理応答する。
このようにDNSキャッシュサーバ20がクライアント装置10からの問い合わせに対するDNSサーバ30〜50からの応答を問い合わせ結果のキャッシュ21として記憶し、それを用いて代理応答を行うことにより、DNSサーバ30〜50とネットワークの負荷を軽減させるとともに、問い合わせへの応答時間を短縮させることができる。
DNSサーバ30は、ルートを管理するDNSサーバであり、DNS40は、ルートの配下のjpゾーンを管理するDNSサーバであり、DNS50は、jpゾーンの配下のexample.jpゾーンを管理するDNSサーバである。DNSサーバ30〜50は、名前解決のための従来のリソースレコードに加えて、各リソースレコードの正当性を保証するための署名を保持するリソースレコードと、署名に用いられた秘密鍵に対応する公開鍵を保持するリソースレコードと、配下のゾーンの公開鍵の正当性を保証するための情報を保持するリソースレコードとを記憶する。
DNSSECにおいては、公開鍵を保持するリソースレコードの署名に用いられる秘密鍵に対応する公開鍵であるKSK(Key Signing Key)と、それ以外のリソースレコードの署名に用いられる秘密鍵に対応する公開鍵であるZSK(Zone Signing Key)という2種類の公開鍵がゾーン毎に用意される。以下では、各ゾーンのKSKをそのゾーンの名称の末尾にKSKを付加して表し、各ゾーンのZSKをそのゾーンの名称の末尾にZSKを付加して表す。
DNS50は、”www.example.jp”というドメイン名に対応するIPアドレスを保持するAリソースレコード51aと、Aリソースレコード51aの署名を保持するRRSIGリソースレコード51bと、Aリソースレコード51aの署名の検証に用いられる公開鍵であるexample.jp.ZSKを保持するDNSKEYリソースレコード52aと、DNSKEYリソースレコード52aの署名を保持するRRSIGリソースレコード52bと、DNSKEYリソースレコード52aの署名の検証に用いられる公開鍵であるexample.jp.KSKを保持するDNSKEYリソースレコード53aと、DNSKEYリソースレコード53aの署名を保持するRRSIGリソースレコード53bとを記憶する。
DNS40は、example.jp.KSKのハッシュを保持するDSリソースレコード41aと、DSリソースレコード41aの署名を保持するRRSIGリソースレコード41bと、DSリソースレコード41aの署名の検証に用いられる公開鍵であるjp.ZSKを保持するDNSKEYリソースレコード42aと、DNSKEYリソースレコード42aの署名を保持するRRSIGリソースレコード42bと、DNSKEYリソースレコード42aの署名の検証に用いられる公開鍵であるjp.KSKを保持するDNSKEYリソースレコード43aと、DNSKEYリソースレコード53aの署名を保持するRRSIGリソースレコード43bとを記憶する。
DNSサーバ30は、jp.KSKのハッシュを保持するDSリソースレコード31aと、DSリソースレコード31aの署名を保持するRRSIGリソースレコード31bと、DSリソースレコード31aの署名の検証に用いられる公開鍵であるルートZSKを保持するDNSKEYリソースレコード32aと、DNSKEYリソースレコード32aの署名を保持するRRSIGリソースレコード32bと、DNSKEYリソースレコード32aの署名の検証に用いられる公開鍵であるルートKSKを保持するDNSKEYリソースレコード33aと、DNSKEYリソースレコード33aの署名を保持するRRSIGリソースレコード33bとを記憶する。
このように、リソースレコードの署名と、それを検証するための公開鍵とをリソースレコードとして保持しておくことにより、各リソースレコードの正当性を保証することができる。例えば、Aリソースレコード51aの正当性は、RRSIGリソースレコード51bに保持されている署名とDNSKEYリソースレコード52aに保持されている公開鍵によって保証される。DNSKEYリソースレコード52aの正当性は、RRSIGリソースレコード52bに保持されている署名とDNSKEYリソースレコード53aに保持されている公開鍵によって保証される。
そして、DNSKEYリソースレコード53aの正当性は、DNSKEYリソースレコード53b保持されている署名に加えて、DNSサーバ40のDSリソースレコード41aによって保証される。DSリソースレコード41aの正当性は、RRSIGリソースレコード41bに保持されている署名とDNSKEYリソースレコード42aに保持されている公開鍵によって保証される。DNSKEYリソースレコード42aの正当性は、RRSIGリソースレコード42bに保持されている署名とDNSKEYリソースレコード43aに保持されている公開鍵によって保証される。
そして、DNSKEYリソースレコード43aの正当性は、DNSKEYリソースレコード43b保持されている署名に加えて、DNSサーバ30のDSリソースレコード31aによって保証される。DSリソースレコード31aの正当性は、RRSIGリソースレコード31bに保持されている署名とDNSKEYリソースレコード32aに保持されている公開鍵によって保証される。DNSKEYリソースレコード32aの正当性は、RRSIGリソースレコード32bに保持されている署名とDNSKEYリソースレコード33aに保持されている公開鍵によって保証される。
さらに、DNSKEYリソースレコード33aの正当性は、DNSKEYリソースレコード33b保持されている署名に加えて、DNSキャッシュサーバ20に予め配布されているルートKSKのハッシュ22によって保証される。このようにDNSSECにおいては、各ゾーン内のリソースレコードの正当性が同一ゾーン内のDNSKEYリソースレコードに格納された公開鍵によって保証されるとともに、下位のゾーンのDNSKEYリソースレコードの正当性を上位のゾーンのDSリソースレコードが保証する信頼の連鎖が構築される(非特許文献1〜3参照)。
続いて、図18に示した構成において、”www.example.jp”というドメイン名からIPアドレスを得る場合の処理手順について図19を参照しながら説明する。なお、DNSキャッシュサーバ20が保持する問い合わせ結果のキャッシュ21は、空であるものとする。
クライアント装置10は、”www.example.jp”というドメイン名に対応するIPアドレスを得るため、予め知っているDNSキャッシュサーバ20に対して、”www.example.jp”に対応するAリソースレコードを問い合わせる(ステップS10)。
問い合わせを受けたDNSキャッシュサーバ20は、まず、予め知っているDNSサーバ30に対して、”www.example.jp”に対応するAリソースレコードを問い合わせる(ステップS11)。DNSサーバ30は、図示しないNSリソースレコードを参照して、jpゾーンの権威をもつDNSサーバ40に問い合わせるべき旨を応答する(ステップS12)。
続いて、DNSキャッシュサーバ20は、応答で示されたDNSサーバ40に対して、”www.example.jp”に対応するAリソースレコードを問い合わせる(ステップS13)。DNSサーバ40は、図示しないNSリソースレコードを参照して、example.jpゾーンの権威をもつDNSサーバ50に問い合わせるべき旨を応答する(ステップS14)。
続いて、DNSキャッシュサーバ20は、応答で示されたDNSサーバ50に対して、”www.example.jp”に対応するAリソースレコードを問い合わせる(ステップS15)。DNSサーバ50は、”www.example.jp”に対応するAリソースレコード51aの内容(”192.168.100.1”)と、Aリソースレコード51aの署名を保持するRRSIGリソースレコード51bの内容(”ZZZ”)を応答する(ステップS16)。
応答を受けたDNSキャッシュサーバ20は、応答内容を検証するため、DNSサーバ50に対して、example.jpゾーンのDNSKEYを問い合せる(ステップS17)。DNSサーバ50は、DNSKEYリソースレコード52aの内容(example.jp.ZSK)と、DNSKEYリソースレコード53aの内容(example.jp.KSK)と、それらのリソースレコードの署名を保持するRRSIGリソースレコードの内容を応答する(ステップS18)。
DNSキャッシュサーバ20は、応答されたKSKの正当性を検証するため、DNSサーバ30に対して、example.jpゾーンのDSリソースレコードを問い合わせる(ステップS19)。DNSサーバ30は、図示しないNSリソースレコードを参照して、jpゾーンの権威をもつDNSサーバ40に問い合わせるべき旨を応答する(ステップS20)。
続いて、DNSキャッシュサーバ20は、DNSサーバ40に対して、example.jpゾーンのDSリソースレコードを問い合わせる(ステップS21)。DNSサーバ40は、DSリソースレコード41aの内容(”aaa”)と、DSリソースレコード41aの署名を保持するRRSIGリソースレコード41bの内容(”XXX”)を応答する(ステップS22)。
応答を受けたDNSキャッシュサーバ20は、応答内容を検証するため、DNSサーバ40に対して、jpゾーンのDNSKEYを問い合せる(ステップS23)。DNSサーバ40は、DNSKEYリソースレコード42aの内容(jp.ZSK)と、DNSKEYリソースレコード43aの内容(jp.KSK)と、それらのリソースレコードの署名を保持するRRSIGリソースレコードの内容を応答する(ステップS24)。
DNSキャッシュサーバ20は、応答されたKSKの正当性を検証するため、DNSサーバ30に対して、jpゾーンのDSリソースレコードを問い合わせる(ステップS25)。DNSサーバ30は、DSリソースレコード31aの内容(”bbb”)と、DSリソースレコード31aの署名を保持するRRSIGリソースレコード31bの内容(”VVV”)を応答する(ステップS26)。
応答を受けたDNSキャッシュサーバ20は、応答内容を検証するため、DNSサーバ30に対して、ルートゾーンのDNSKEYを問い合せる(ステップS27)。DNSサーバ30は、DNSKEYリソースレコード32aの内容(ルートZSK)と、DNSKEYリソースレコード33aの内容(ルートKSK)と、それらのリソースレコードの署名を保持するRRSIGリソースレコードの内容を応答する(ステップS28)。
DNSキャッシュサーバ20は、Aリソースレコード51aの正当性をDNSKEYリソースレコード52aに含まれるexample.jp.ZSKを用いて検証するとともに、DNSKEYリソースレコード52aの正当性をDNSKEYリソースレコード53aに含まれるexample.jp.KSKを用いて検証する。さらに、DNSキャッシュサーバ20は、DNSKEYリソースレコード53aの正当性を、ルートゾーンのDNSサーバ30から、Aリソースレコード51aを取得したDNSサーバ50の上位のDNSサーバ40まで、再帰的に問い合わせを行って取得したリソースレコードの内容に基づいて検証する。
そして全ての検証が成功すると、DNSキャッシュサーバ20は、Aリソースレコード51aの内容をクライアント装置10に応答する(ステップS29)。
以下に、本発明に係る名前解決装置、名前解決方法および名前解決プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の例では、階層的に構成された名前空間を管理する名前管理システムの例としてDNSを示すが、LDAP(Lightweight Directory Access Protocol)のような階層的に構成された名前空間を管理する他の名前管理システムにも本発明を適用することができる。
本実施例に係る名前解決装置100は、DNS90に対して問い合わせを行って名前を解決する装置であり、名前解決のための従来のリソースレコードに加えて、DNSSECにおいて追加されたリソースレコードのうち、検証済みのDNSKEYリソースレコードのみをキャッシュする。そして、名前解決装置100は、DNSKEYリソースレコードができるだけ長くキャッシュに残るようにキャッシュ制御を行う。
このように検証済みのDNSKEYリソースレコードを優先的にキャッシュすることにより、DNSSECが有効化されている場合でも、名前解決の完了までの時間をDNSSECが有効化されていない場合とほぼ同等にすることができる。
例えば、Aリソースレコードがキャッシュされていない場合でも、そのAリソースレコードが属するゾーンの検証済みのDNSKEYリソースレコードがキャッシュされていれば、図20に示すように、DNSKEYを検証するためのDSリソースレコード等を上位のゾーンのDNSサーバに再帰的に問い合わせる処理(図19のステップS19〜ステップS27)が不要となるため、名前解決の完了までの時間とやりとりされる情報の量は、DNSSECが有効化されていない場合とほぼ同等となる。
また、ゾーン内のネットワークインターフェース毎に存在するAリソースレコード等と異なり、DNSKEYリソースレコードは、ゾーン毎に比較的少数(例えば、2つ程度)しか存在しないため、優先的にキャッシュしたとしてもDNSKEYリソースレコードがキャッシュ領域に占める割合は比較的小さく、キャッシュミスが多くなることはない。
なお、名前解決装置100は、図18に示したDNSキャッシュサーバ20のようにDNSへの問い合わせを中継する装置であってもよいし、DNSキャッシュサーバ20のような装置を介さずに、権威をもつDNSサーバへ直接に問い合わせを行うクライアント装置であってもよい。また、以下の説明では、説明を簡単にするため、TTL(Time To Live)等の有効期間については考慮しないこととする。
次に、図1を参照しながら、本実施例に係る名前解決装置100の構成について説明する。図1に示すように、名前解決装置100は、名前解決部101と、問合せ部102と、キャッシュ部103と、キャッシュ制御部104と、検証部105とを有する。名前解決部101は、名前解決のための問い合わせの生成と、問い合わせに対する応答の解析を行う。
問合せ部102は、名前解決部101によって生成された問い合わせをDNS90へ送信し、DNS90から返信された応答を名前解決部101に引き渡すとともにキャッシュ部103に記憶させる。そして、名前解決部101によって新たに生成された問い合わせに対応する応答がキャッシュ部103に記憶されている場合、問合せ部102は、その問い合わせをDNS90へ送信せずに、その問い合わせに対応する応答をキャッシュ部103から取得して名前解決部101に引き渡す。
問い合わせ先のゾーンでDNSSECが有効化されている場合、問合せ部102は、名前解決部101によって生成された問い合わせに対応する応答の正当性を検証部105に検証させ、正当性の検証が成功した場合にのみ応答を名前解決部101に引き渡すとともにキャッシュ部103に記憶させる。正当性が確認された応答をキャッシュ部103に記憶させることにより、キャッシュ部103から取得した応答を利用するたびに正当性を確認することが不要となる。なお、問い合わせ先のゾーンでDNSSECが有効化されているか否かは、応答に含まれる所定のビットの値やRRSIGリソースレコードの有無等から判断することができる。
キャッシュ部103は、名前解決のための問い合わせに対する応答と、検証部105によって正当性が検証されたDNSKEYリソースレコードとを記憶する。キャッシュ制御部104は、問合せ部102および検証部105の要求に応じて、キャッシュ部103に記憶されている情報の検索と、キャッシュ部103への情報の格納を行う。また、キャッシュ制御部104は、キャッシュ部103へ新たな情報を格納するにあたって、キャッシュ部103の使用量を確認し、使用量が閾値を超過している場合には、新たな情報を格納する領域を確保するために、キャッシュ部103に記憶されている情報を削除する。なお、削除される情報は、新たな情報を格納する領域が確保されることを条件として、なるべく少ないことが好ましい。
キャッシュ制御部104は、キャッシュ部103に記憶されている情報を削除する場合に、記憶されているDNSKEYリソースレコードを優先的に残して、他の種類のリソースレコードを削除する。なお、キャッシュ部103へ新たな情報を格納するタイミングだけでなく、定期的にキャッシュ部103の使用量を確認して使用量が閾値を超過している場合にはキャッシュ部103に記憶されている情報を削除するようにキャッシュ制御部104を構成してもよい。
また、使用量に関する閾値とキャッシュ部103に記憶されている情報を削除する量については、適宜決定することができ、キャッシュ部103へ新たな情報を格納する場合と定期的にキャッシュ部103の使用量を確認する場合とで値が異なっていてもよい。例えば、キャッシュ部103へ新たな情報を格納する場合における使用量に関する閾値は、解放によって失われる情報量を最小にするために、キャッシュがフルに使用されていることを示す値に設定し、定期的にキャッシュ部103の使用量を確認する場合における使用量に関する閾値は、新たな情報を格納するたびに空き領域を作成することによる負荷の増大を防止するために、ある程度まとまった空き領域を用意できるようにキャッシュ容量の9割程度の値に設定することとしてもよい。
検証部105は、DNSSECが有効化されているゾーンに対して行われた名前解決のための問い合わせに対する応答の正当性を確認する。具体的には、検証部105は、問い合わせが行われたゾーンのDNSKEYリソースレコードを問合せ部102に取得させ、取得されたDNSKEYリソースレコードに含まれる公開鍵(ZSK)を用いて、応答されたリソースレコードの署名を検証する。さらに、検証部105は、取得されたDNSKEYリソースレコードに含まれる公開鍵(KSK)を用いて、DNSKEYリソースレコードの署名を検証するとともに、最上位のゾーンから、問い合わせが行われたゾーンの上位のゾーンまで、問合せ部102に再帰的に問い合わせを行わせ、取得されたDSリソースレコード等を用いて、DNSKEYリソースレコードに含まれる公開鍵(KSK)を含む信頼の連鎖を検証する。
DNSKEYリソースレコードの正当性が検証されると、検証部105は、正当性が確認されたDNSKEYリソースレコードをキャッシュ部103に記憶させる。そして、SSECが有効化されているゾーンに対して行われた名前解決のための問い合わせに対する応答の正当性を新たに検証する場合、問い合わせが行われたゾーンのDNSKEYリソースレコードがキャッシュ部103に記憶されていれば、検証部105は、キャッシュ部103に記憶されているDNSKEYリソースレコードに含まれる公開鍵(ZSK)を用いて、応答されたリソースレコードの署名を検証し、DSリソースレコード等を取得するための再帰的な問い合わせを問合せ部102に行わせない。
このように、正当性が検証されたDNSKEYリソースレコードをキャッシュ部103に記憶させ、優先的にキャッシュ部103に残すことにより、図19のステップS19〜ステップS28のような上位のゾーンへの再帰的な問い合わせの発生を抑止し、名前解決の完了までの時間を短縮するとともにやりとりされる情報の量を削減することができる。
次に、図2を参照しながら名前解決装置100による名前解決処理の処理手順について説明する。図2に示すように、名前解決部101が、名前解決のための問い合わせを生成し、問合せ部102に送信を依頼すると(ステップS101)、キャッシュ制御部104が、その問い合わせに対応する応答であるリソースレコードをキャッシュ部103から検索する(ステップS102)。ここで、該当するリソースレコードが存在した場合(ステップS103肯定)、問合せ部102は、検索されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS113)。
一方、該当するリソースレコードがキャッシュ部103に存在しない場合(ステップS103否定)、問合せ部102がDNS90に対して問い合わせを送信し、応答を受信する(ステップS104)。ここで、DNSSECが有効でない場合(ステップS105否定)、キャッシュ制御部104が、応答されたリソースレコードをキャッシュ部103に記憶させる(ステップS112)。そして、問合せ部102は、応答されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS113)。
DNSSECが有効な場合(ステップS105肯定)、キャッシュ制御部104が、問い合わせが行われたゾーンのDNSKEYリソースレコードをキャッシュ部103から検索する(ステップS106)。ここで、該当するDNSKEYリソースレコードが存在した場合(ステップS107肯定)、検証部105が、そのDNSKEYリソースレコードを用いて、ステップS104で得られたリソースレコードの正当性を検証する(ステップS111)。
そして、正当性の検証が成功したならば、キャッシュ制御部104が、ステップS104で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS112)。そして、問合せ部102は、ステップS104で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS113)。
一方、該当するDNSKEYリソースレコードがキャッシュ部103に存在しない場合(ステップS107否定)、問合せ部102は、ステップS104で問い合わせが行われたゾーンのDNSKEYリソースレコードを取得する(ステップS108)。さらに、問合せ部102は、最上位のゾーンから、ステップS104で問い合わせが行われたゾーンの上位のゾーンまで、再帰的に問い合わせを行ってDSリソースレコードとDNSKEYリソースレコードを取得し、取得されたDSリソースレコード等を用いて、検証部105が、ステップS108で取得されたDNSKEYリソースレコードの正当性を検証する(ステップS109)。この再帰的な問い合わせにおいて、取得すべきDNSKEYリソースレコードがキャッシュ部103に存在する場合、問合せ部102は、そのDNSKEYリソースレコードをDNS90から取得する代わりに、キャッシュ部103から取得する。
そして、正当性の検証が成功したならば、キャッシュ制御部104が、ステップS108で得られたDNSKEYリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS110)。続いて、検証部105が、正当性が検証されたDNSKEYリソースレコードを用いて、ステップS104で得られたリソースレコードの正当性を検証する(ステップS111)。
そして、正当性の検証が成功したならば、キャッシュ制御部104が、ステップS104で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS112)。そして、問合せ部102は、ステップS104で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS113)。
次に、図3を参照しながら、キャッシュ制御部104が、新たな情報をキャッシュ部103に格納するタイミング、あるいは、定期的なタイミングで実行するキャッシュ解放処理の処理手順について説明する。キャッシュ制御部104は、キャッシュ部103の使用量を確認し(ステップS201)、使用量が閾値を超過していなければ(ステップS202否定)、特に処理を行うことなくキャッシュ解放処理を終了する。
一方、使用量が閾値を超過していれば(ステップS202肯定)、キャッシュ制御部104は、DNSKEYリソースレコードを優先的に残しつつ、キャッシュ部103に記憶されているリソースレコードを削除して領域を解放する(ステップS203)。
上述してきたように、本実施例では、検証済みのDNSKEYリソースレコードを優先的にキャッシュすることとしたので、DNSSECが有効化されている場合でも、DNSSECが有効化されていない場合とほぼ同等の効率で名前解決を実行することができる。
本実施例では、キャッシュ容量等の問題からキャッシュされているDNSKEYリソースレコードの一部を削除する例について説明する。なお、以下の説明では、既に説明した部分と同様の部分には、既に説明した部分と同一の符号を付すこととし、重複する説明を省略することとする。
まず、図4を参照しながら、本実施例に係る名前解決装置200の構成について説明する。図4に示すように、名前解決装置200は、名前解決部101と、問合せ部102と、キャッシュ部103と、キャッシュ制御部204と、検証部105と、深度情報記憶部208とを有する。
深度情報記憶部208は、キャッシュ部103に記憶されている各DNSKEYリソースレコードに対応するゾーンの階層の深さを深度情報として保持する。深度情報の一例を図5に示す。図5の例が示すように、深度情報は、ゾーンや深度といった項目を有する。ゾーンの項目は、DNSKEYリソースレコードに対応するゾーンの名称が格納される項目である。深度の項目は、DNSKEYリソースレコードに対応するゾーンが、ルートからみて何番目の階層にあたるかを示す値が格納される項目である。
図5に示す深度情報の1行目には、ゾーンの項目に”tokyo.kanto.example.jp.”が設定され、深度の項目に”4”が設定されている。これは、”tokyo.kanto.example.jp.”という名称のゾーンのDNSKEYリソースレコードがキャッシュ部103に記憶されており、そのゾーンは、ルートからみて4番目の階層にあたることを示している。
なお、深度情報は、キャッシュ部103におけるDNSKEYリソースレコードの格納位置等の他の属性情報を含んでもよい。また、深度情報は、同じ深度のゾーンを連結させたリスト(図6参照)のような他の形式で構成されていてもよい。
キャッシュ制御部204は、問合せ部102および検証部105の要求に応じて、キャッシュ部103に記憶されている情報の検索と、キャッシュ部103への情報の格納を行う。キャッシュ制御部204は、キャッシュ部103へ新たなDNSKEYリソースレコードを格納する場合、そのDNSKEYリソースレコードに対応するゾーンの深度を取得して、求めた深度をゾーンの名称と対応付けて深度情報記憶部208に記録する。
ゾーンの深度は、ゾーンの名称に含まれるラベルの数から取得することができる。例えば、”tokyo.kanto.example.jp.”というゾーンの名称には、”tokyo”、”kanto”、”example”、”jp”という4つのラベルが含まれるため、このゾーンの深度は”4”となる。なお、ゾーンの深度は、DNSKEYリソースレコードの正当性を検証するために再帰的に問い合わせを行った階層の深さから取得してもよい。
また、キャッシュ制御部204は、キャッシュ部103へ新たな情報を格納するにあたって、キャッシュ部103の使用量を確認し、使用量が閾値を超過している場合には、新たな情報を格納する領域を確保するために、キャッシュ部103に記憶されている情報を削除する。なお、削除される情報は、新たな情報を格納する領域が確保されることを条件として、なるべく少ないことが好ましい。
キャッシュ制御部204は、キャッシュ部103に記憶されている情報を削除する場合に、記憶されているDNSKEYリソースレコードを優先的に残して、他の種類のリソースレコードを削除する。そして、他の種類のリソースレコードを削除してもキャッシュ部103の使用量が閾値を超過している場合には、キャッシュ制御部204は、深度情報記憶部208を参照して、深度の値が小さいゾーンのDNSKEYリソースレコードをキャッシュ部103から削除するとともに、削除したDNSKEYリソースレコードに対応するゾーンの情報を深度情報記憶部208から削除する。
ここで、「深度の値が小さいゾーンのDNSKEYリソースレコードを削除する」とは、例えば、深度の値が最も小さいゾーンのDNSKEYリソースレコードを削除することでもよいし、深度の値が最も大きいゾーンのDNSKEYリソースレコードを残して他のDNSKEYリソースレコードを削除することでもよいし、深度の値が所定値よりも小さいゾーンのDNSKEYリソースレコードを削除することでもよいし、キャッシュ部103の使用量が所定値を下回るまで深度の値が小さい順にDNSKEYリソースレコードを削除することでもよい。
深度の値が小さいゾーンのDNSKEYリソースレコードは、キャッシュ部103から削除されても、ルートからの階層が少ないので、少ないコストで正当性を検証することができる。例えば、”tokyo.kanto.example.jp.”という名称をもつ深度4のゾーンのDNSKEYリソースレコードの正当性を検証するには、ルート、”jp.”、”example.jp.”、”kanto.example.jp.”という4つの階層からDSリソースレコード等を取得する必要があるが、”jp.”という名称をもつ深度1のゾーンのDNSKEYリソースレコードの正当性を検証するには、ルートという1つの階層からDSリソースレコード等を取得すればよい。
このため、階層が深いゾーンのDNSKEYリソースレコードを優先的に残すことにより、DNSKEYリソースレコードの正当性の検証に必要な問い合わせを最小限に抑えて、名前解決の完了までの時間を短くすることができる。
なお、キャッシュ部103へ新たな情報を格納するタイミングだけでなく、定期的にキャッシュ部103の使用量を確認して使用量が閾値を超過している場合にはキャッシュ部103に記憶されている情報を削除するようにキャッシュ制御部204を構成してもよい。また、使用量に関する閾値とキャッシュ部103に記憶されている情報を削除する量については、適宜決定することができ、キャッシュ部103へ新たな情報を格納する場合と定期的にキャッシュ部103の使用量を確認する場合とで値が異なっていてもよい。また、どの階層までのDNSKEYリソースレコードをキャッシュ部103から削除するかについては、予め決めておいてもよいし、削除されるDNSKEYリソースレコードが最少で済むように動的に決定してもよい。
次に、図7を参照しながら名前解決装置200による名前解決処理の処理手順について説明する。図7に示すように、名前解決部101が、名前解決のための問い合わせを生成し、問合せ部102に送信を依頼すると(ステップS301)、キャッシュ制御部204が、その問い合わせに対応する応答であるリソースレコードをキャッシュ部103から検索する(ステップS302)。ここで、該当するリソースレコードが存在した場合(ステップS303肯定)、問合せ部102は、検索されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS314)。
一方、該当するリソースレコードがキャッシュ部103に存在しない場合(ステップS303否定)、問合せ部102がDNS90に対して問い合わせを送信し、応答を受信する(ステップS304)。ここで、DNSSECが有効でない場合(ステップS305否定)、キャッシュ制御部204が、応答されたリソースレコードをキャッシュ部103に記憶させる(ステップS313)。そして、問合せ部102は、応答されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS314)。
DNSSECが有効な場合(ステップS305肯定)、キャッシュ制御部204が、問い合わせが行われたゾーンのDNSKEYリソースレコードをキャッシュ部103から検索する(ステップS306)。ここで、該当するDNSKEYリソースレコードが存在した場合(ステップS307肯定)、検証部105が、そのDNSKEYリソースレコードを用いて、ステップS304で得られたリソースレコードの正当性を検証する(ステップS312)。
そして、正当性の検証が成功したならば、キャッシュ制御部204が、ステップS304で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS313)。そして、問合せ部102は、ステップS304で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS314)。
一方、該当するDNSKEYリソースレコードがキャッシュ部103に存在しない場合(ステップS307否定)、問合せ部102は、ステップS304で問い合わせが行われたゾーンのDNSKEYリソースレコードを取得する(ステップS308)。さらに、問合せ部102は、最上位のゾーンから、ステップS304で問い合わせが行われたゾーンの上位のゾーンまで、再帰的に問い合わせを行ってDSリソースレコードとDNSKEYリソースレコードを取得し、取得されたDSリソースレコード等を用いて、検証部105が、ステップS308で取得されたDNSKEYリソースレコードの正当性を検証する(ステップS309)。この再帰的な問い合わせにおいて、取得すべきDNSKEYリソースレコードがキャッシュ部103に存在する場合、問合せ部102は、そのDNSKEYリソースレコードをDNS90から取得する代わりに、キャッシュ部103から取得する。
そして、正当性の検証が成功したならば、キャッシュ制御部204が、ステップS308で得られたDNSKEYリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させるとともに(ステップS310)、そのDNSKEYリソースレコードを取得したゾーンの深度を深度情報記憶部208に記録する(ステップS311)。続いて、検証部105が、正当性が検証されたDNSKEYリソースレコードを用いて、ステップS304で得られたリソースレコードの正当性を検証する(ステップS312)。
そして、正当性の検証が成功したならば、キャッシュ制御部204が、ステップS304で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS313)。そして、問合せ部102は、ステップS304で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS314)。
次に、図8を参照しながら、キャッシュ制御部204が、新たな情報をキャッシュ部103に格納するタイミング、あるいは、定期的なタイミングで実行するキャッシュ解放処理の処理手順について説明する。キャッシュ制御部204は、キャッシュ部103の使用量を確認し(ステップS401)、使用量が閾値を超過していなければ(ステップS402否定)、特に処理を行うことなくキャッシュ解放処理を終了する。
一方、使用量が閾値を超過していれば(ステップS402肯定)、キャッシュ制御部204は、DNSKEYリソースレコードを優先的に残しつつ、キャッシュ部103に記憶されている他の種類のリソースレコードを削除して領域を解放する(ステップS403)。そして、解放によって、キャッシュ部103の使用量が閾値以下となれば(ステップS204否定)、キャッシュ制御部204は、キャッシュ解放処理を終了する。
解放後もキャッシュ部103の使用量が閾値を超過している場合(ステップS204肯定)、キャッシュ制御部204は、深度情報記憶部208を参照して、上述したように、深度の値が小さいゾーンのDNSKEYリソースレコードをキャッシュ部103から削除して領域を解放するとともに、削除したDNSKEYリソースレコードに対応するゾーンの情報を深度情報記憶部208から削除する(ステップS405)。
上述してきたように、本実施例では、階層が深いゾーンのDNSKEYリソースレコードをキャッシュ部103に優先的に残すこととしたので、DNSKEYリソースレコードをキャッシュ部103から削除することの影響を小さく抑えることができる。
本実施例では、キャッシュ容量等の問題からキャッシュされているDNSKEYリソースレコードの一部を削除する他の例について説明する。
まず、図9を参照しながら、本実施例に係る名前解決装置300の構成について説明する。図9に示すように、名前解決装置300は、名前解決部101と、問合せ部102と、キャッシュ部103と、キャッシュ制御部304と、検証部105と、頻度情報記憶部309とを有する。
頻度情報記憶部309は、キャッシュ部103に記憶されている各DNSKEYリソースレコードに対応する問い合わせの頻度を頻度情報として保持する。頻度情報の一例を図10に示す。図10の例が示すように、頻度情報は、ゾーンや問い合わせ回数といった項目を有する。ゾーンの項目は、DNSKEYリソースレコードに対応するゾーンの名称が格納される項目である。問い合わせ回数の項目は、DNSKEYリソースレコードに対応するゾーンに対して問い合わせが行われた回数が格納される項目であり、定期的に0にリセットされる。
図10に示す頻度情報の1行目には、ゾーンの項目に”tokyo.kanto.example.jp.”が設定され、問い合わせ回数の項目に”1”が設定されている。これは、”tokyo.kanto.example.jp.”という名称のゾーンのDNSKEYリソースレコードがキャッシュ部103に記憶されており、そのゾーンに対して問い合わせが4回行われたことを示している。
なお、頻度情報は、キャッシュ部103におけるDNSKEYリソースレコードの格納位置等の他の属性情報を含んでもよい。また、頻度情報は、他の形式で構成されていてもよい。
キャッシュ制御部304は、問合せ部102および検証部105の要求に応じて、キャッシュ部103に記憶されている情報の検索と、キャッシュ部103への情報の格納を行う。キャッシュ制御部304は、問合せ部102からキャッシュ部103に記憶されている情報の検索を要求されると、要求された情報に対応するゾーンに頻度情報の問い合わせ回数を1を加算する。なお、問い合わせ回数の加算は、名前解決部101や問合せ部102が行ってもよい。
また、キャッシュ制御部304は、キャッシュ部103へ新たな情報を格納するにあたって、キャッシュ部103の使用量を確認し、使用量が閾値を超過している場合には、新たな情報を格納する領域を確保するために、キャッシュ部103に記憶されている情報を削除する。なお、削除される情報は、新たな情報を格納する領域が確保されることを条件として、なるべく少ないことが好ましい。
キャッシュ制御部304は、キャッシュ部103に記憶されている情報を削除する場合に、記憶されているDNSKEYリソースレコードを優先的に残して、他の種類のリソースレコードを削除する。そして、他の種類のリソースレコードを削除してもキャッシュ部103の使用量が閾値を超過している場合には、キャッシュ制御部304は、頻度情報記憶部309を参照して、問い合わせ回数の値が小さいゾーンのDNSKEYリソースレコードをキャッシュ部103から削除するとともに、削除したDNSKEYリソースレコードに対応するゾーンの情報を頻度情報記憶部309から削除する。
ここで、「問い合わせ回数の値が小さいゾーンのDNSKEYリソースレコードを削除する」とは、例えば、問い合わせ回数の値が最も小さいゾーンのDNSKEYリソースレコードを削除することでもよいし、問い合わせ回数の値が最も大きいゾーンのDNSKEYリソースレコードを残して他のDNSKEYリソースレコードを削除することでもよいし、問い合わせ回数の値が所定値よりも小さいゾーンのDNSKEYリソースレコードを削除することでもよいし、キャッシュ部103の使用量が所定値を下回るまで問い合わせ回数の値が小さい順にDNSKEYリソースレコードを削除することでもよい。
問い合わせの頻度が高いゾーンのDNSKEYリソースレコードをキャッシュ部103から頻繁に削除すると、DNSKEYリソースレコードの正当性を確認するために再帰的な問い合わせを行ってDSリソースレコード等を取得する処理を頻繁に行うことが必要となり、名前解決の完了までに要する時間が長くなるおそれがある。問い合わせの頻度が低いゾーンのDNSKEYリソースレコードをキャッシュ部103から削除しても、そのような状況が発生する機会は少なくて済む。
このため、問い合わせの頻度が高いゾーンのDNSKEYリソースレコードを優先的に残すことにより、DNSKEYリソースレコードの正当性の検証に必要な問い合わせを最小限に抑えて、名前解決の完了までの時間を短くすることができる。
なお、キャッシュ部103へ新たな情報を格納するタイミングだけでなく、定期的にキャッシュ部103の使用量を確認して使用量が閾値を超過している場合にはキャッシュ部103に記憶されている情報を削除するようにキャッシュ制御部304を構成してもよい。また、使用量に関する閾値とキャッシュ部103に記憶されている情報を削除する量については、適宜決定することができ、キャッシュ部103へ新たな情報を格納する場合と定期的にキャッシュ部103の使用量を確認する場合とで値が異なっていてもよい。また、どの問い合わせ回数までのDNSKEYリソースレコードをキャッシュ部103から削除するかについては、予め決めておいてもよいし、削除されるDNSKEYリソースレコードが最少で済むように動的に決定してもよい。
次に、図11を参照しながら名前解決装置300による名前解決処理の処理手順について説明する。図11に示すように、名前解決部101が、名前解決のための問い合わせを生成し、問合せ部102に送信を依頼すると(ステップS501)、キャッシュ制御部304が、その問い合わせに対応するゾーンの頻度情報の問い合わせ回数の値に1を加算するとともに(ステップS502)、その問い合わせに対応する応答であるリソースレコードをキャッシュ部103から検索する(ステップS503)。なお、問い合わせに対応するゾーンが頻度情報に存在しない場合、キャッシュ制御部304は、そのゾーンを頻度情報に追加し、問い合わせ回数として1を設定する。
ここで、該当するリソースレコードが存在した場合(ステップS504肯定)、問合せ部102は、検索されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS514)。
一方、該当するリソースレコードがキャッシュ部103に存在しない場合(ステップS504否定)、問合せ部102がDNS90に対して問い合わせを送信し、応答を受信する(ステップS505)。ここで、DNSSECが有効でない場合(ステップS506否定)、キャッシュ制御部304が、応答されたリソースレコードをキャッシュ部103に記憶させる(ステップS513)。そして、問合せ部102は、応答されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS514)。
DNSSECが有効な場合(ステップS506肯定)、キャッシュ制御部304が、問い合わせが行われたゾーンのDNSKEYリソースレコードをキャッシュ部103から検索する(ステップS507)。ここで、該当するDNSKEYリソースレコードが存在した場合(ステップS508肯定)、検証部105が、そのDNSKEYリソースレコードを用いて、ステップS505で得られたリソースレコードの正当性を検証する(ステップS512)。
そして、正当性の検証が成功したならば、キャッシュ制御部304が、ステップS505で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS513)。そして、問合せ部102は、ステップS505で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS514)。
一方、該当するDNSKEYリソースレコードがキャッシュ部103に存在しない場合(ステップS508否定)、問合せ部102は、ステップS505で問い合わせが行われたゾーンのDNSKEYリソースレコードを取得する(ステップS509)。さらに、問合せ部102は、最上位のゾーンから、ステップS304で問い合わせが行われたゾーンの上位のゾーンまで、再帰的に問い合わせを行ってDSリソースレコードとDNSKEYリソースレコードを取得し、取得されたDSリソースレコード等を用いて、検証部105が、ステップS509で取得されたDNSKEYリソースレコードの正当性を検証する(ステップS510)。この再帰的な問い合わせにおいて、取得すべきDNSKEYリソースレコードがキャッシュ部103に存在する場合、問合せ部102は、そのDNSKEYリソースレコードをDNS90から取得する代わりに、キャッシュ部103から取得する。
そして、正当性の検証が成功したならば、キャッシュ制御部304が、ステップS509で得られたDNSKEYリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS511)続いて、検証部105が、正当性が検証されたDNSKEYリソースレコードを用いて、ステップS505で得られたリソースレコードの正当性を検証する(ステップS512)。
そして、正当性の検証が成功したならば、キャッシュ制御部304が、ステップS505で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS513)。そして、問合せ部102は、ステップS505で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS514)。
次に、図12を参照しながら、キャッシュ制御部304が、新たな情報をキャッシュ部103に格納するタイミング、あるいは、定期的なタイミングで実行するキャッシュ解放処理の処理手順について説明する。キャッシュ制御部304は、キャッシュ部103の使用量を確認し(ステップS601)、使用量が閾値を超過していなければ(ステップS602否定)、特に処理を行うことなくキャッシュ解放処理を終了する。
一方、使用量が閾値を超過していれば(ステップS602肯定)、キャッシュ制御部304は、DNSKEYリソースレコードを優先的に残しつつ、キャッシュ部103に記憶されている他の種類のリソースレコードを削除して領域を解放する(ステップS603)。そして、解放によって、キャッシュ部103の使用量が閾値以下となれば(ステップS604否定)、キャッシュ制御部304は、キャッシュ解放処理を終了する。
解放後もキャッシュ部103の使用量が閾値を超過している場合(ステップS604肯定)、キャッシュ制御部304は、頻度情報記憶部309を参照して、上述したように、問い合わせ回数が少ないゾーンのDNSKEYリソースレコードをキャッシュ部103から削除して領域を解放するとともに、削除したDNSKEYリソースレコードに対応するゾーンの情報を頻度情報記憶部309から削除する(ステップS605)。
上述してきたように、本実施例では、問い合わせの頻度が高いゾーンのDNSKEYリソースレコードをキャッシュ部103に優先的に残すこととしたので、DNSKEYリソースレコードをキャッシュ部103から削除することの影響を小さく抑えることができる。
なお、本実施例では、問い合わせの頻度が高いゾーンのDNSKEYリソースレコードをキャッシュ部103に優先的に残すこととしたが、DNSKEYリソースレコードがキャッシュ部103に格納されている各ゾーンのうち、最近問い合わせを行った日時が現在日時と近いゾーンのDNSKEYリソースレコードをキャッシュ部103に優先的に残すこととしても同様の効果を得ることができる。
本実施例では、キャッシュ容量等の問題からキャッシュされているDNSKEYリソースレコードの一部を削除するさらに他の例について説明する。
まず、図13を参照しながら、本実施例に係る名前解決装置400の構成について説明する。図13に示すように、名前解決装置400は、名前解決部101と、問合せ部102と、キャッシュ部103と、キャッシュ制御部404と、検証部105と、下位ゾーン数算出部410と、下位ゾーン数記憶部411とを有する。
下位ゾーン数記憶部411は、キャッシュ部103に記憶されている各DNSKEYリソースレコードに対応するゾーンよりも下の階層に存在するゾーンの数を下位ゾーン数情報として保持する。下位ゾーン数情報の一例を図14に示す。図14の例が示すように、下位ゾーン数情報は、ゾーンや下位ゾーン数といった項目を有する。ゾーンの項目は、DNSKEYリソースレコードに対応するゾーンの名称が格納される項目である。下位ゾーン数の項目は、DNSKEYリソースレコードに対応するゾーンよりも下の階層に存在するゾーンの数が格納される項目である。
図14に示す下位ゾーン数情報の4行目には、ゾーンの項目に”kanto.example.jp.”が設定され、下位ゾーン数の項目に”2”が設定されている。これは、”kanto.example.jp.”という名称のゾーンよりも下に、”tokyo.kanto.example.jp.”という名称のゾーンと、”kanagawa.kanto.example.jp.”という名称のゾーンが存在するためである。
また、図14に示す下位ゾーン数情報の3行目には、ゾーンの項目に”example.jp.”が設定され、下位ゾーン数の項目に”5”が設定されている。これは、”example.jp.”という名称のゾーンよりも下に、”kanto.example.jp.”という名称のゾーンと、”tokyo.kanto.example.jp.”という名称のゾーンと、”kanagawa.kanto.example.jp.”という名称のゾーンと、”kansai.example.jp.”という名称のゾーンと、”kyoto.kansai.example.jp.”という名称のゾーンが存在するためである。
なお、下位ゾーン数情報は、キャッシュ部103におけるDNSKEYリソースレコードの格納位置等の他の属性情報を含んでもよい。また、下位ゾーン数情報は、他の形式で構成されていてもよい。
下位ゾーン数算出部410は、指定されたゾーンよりも下の階層に存在するゾーンの数を算出し、下位ゾーン数記憶部411に登録する。下位ゾーン数算出部410は、キャッシュ部103に格納されているDNSKEYリソースレコードの名称に基づいて各ゾーンの階層関係を判断し、指定されたゾーンよりも下の階層に存在するゾーンの数を算出する。
例えば、”jp.”という名称のゾーンと、”example.jp.”という名称のゾーンと、”kanto.example.jp.”という名称のゾーンと、”tokyo.kanto.example.jp.”という名称のゾーンと、”kanagawa.kanto.example.jp.”という名称のゾーンと、”kansai.example.jp.”という名称のゾーンと、”kyoto.kansai.example.jp.”という名称のゾーンのDNSKEYリソースレコードがキャッシュ部103に格納されている場合、下位ゾーン数算出部410は、図14の例に示したように各ゾーンの下位ゾーン数を算出する。
この方式では、各ゾーンの下位ゾーン数を厳密に取得することはできないものの、名前解決装置400は、DNSKEYリソースレコードを優先的にキャッシュ部103に残すように構成されているため、各ゾーンよりも下の階層に存在するゾーンのうち、DNSSECが有効化されており、問い合わせを行う可能性があるゾーンの数をほぼ漏れなく取得することができる。
キャッシュ制御部404は、問合せ部102および検証部105の要求に応じて、キャッシュ部103に記憶されている情報の検索と、キャッシュ部103への情報の格納を行う。キャッシュ制御部404は、キャッシュ部103へ新たなDNSKEYリソースレコードを格納する場合、そのDNSKEYリソースレコードに対応するゾーンの下位ゾーン数を算出し下位ゾーン数記憶部411に格納する処理を下位ゾーン数算出部410に実行させる。また、キャッシュ制御部404は、キャッシュ部103からDNSKEYリソースレコードが削除された場合、キャッシュ部103に記憶されているDNSKEYリソースレコードに対応する各ゾーンの下位ゾーン数を算出し直して下位ゾーン数記憶部411を更新する処理を下位ゾーン数算出部410に実行させる。
また、キャッシュ制御部404は、キャッシュ部103へ新たな情報を格納するにあたって、キャッシュ部103の使用量を確認し、使用量が閾値を超過している場合には、新たな情報を格納する領域を確保するために、キャッシュ部103に記憶されている情報を削除する。なお、削除される情報は、新たな情報を格納する領域が確保されることを条件として、なるべく少ないことが好ましい。
キャッシュ制御部404は、キャッシュ部103に記憶されている情報を削除する場合に、記憶されているDNSKEYリソースレコードを優先的に残して、他の種類のリソースレコードを削除する。そして、他の種類のリソースレコードを削除してもキャッシュ部103の使用量が閾値を超過している場合には、キャッシュ制御部404は、下位ゾーン数記憶部411を参照して、下位ゾーン数の値が小さいゾーンのDNSKEYリソースレコードをキャッシュ部103から削除するとともに、削除したDNSKEYリソースレコードに対応するゾーンの情報を下位ゾーン数記憶部411から削除する。
ここで、「下位ゾーン数の値が小さいゾーンのDNSKEYリソースレコードを削除する」とは、例えば、下位ゾーン数の値が最も小さいゾーンのDNSKEYリソースレコードを削除することでもよいし、下位ゾーン数の値が最も大きいゾーンのDNSKEYリソースレコードを残して他のDNSKEYリソースレコードを削除することでもよいし、下位ゾーン数の値が所定値よりも小さいゾーンのDNSKEYリソースレコードを削除することでもよいし、キャッシュ部103の使用量が所定値を下回るまで下位ゾーン数の値が小さい順にDNSKEYリソースレコードを削除することでもよい。
下位ゾーン数が多いゾーンのDNSKEYリソースレコードは、いずれかの下位ゾーンのDNSKEYリソースレコードの正当性を検証する場合に必要になる。このため、下位ゾーン数が多いゾーンのDNSKEYリソースレコードを優先的に残すことにより、DNSKEYリソースレコードを問い合わせる頻度を最小限に抑えて、名前解決の完了までの時間を短くすることができる。
なお、キャッシュ部103へ新たな情報を格納するタイミングだけでなく、定期的にキャッシュ部103の使用量を確認して使用量が閾値を超過している場合にはキャッシュ部103に記憶されている情報を削除するようにキャッシュ制御部404を構成してもよい。また、使用量に関する閾値とキャッシュ部103に記憶されている情報を削除する量については、適宜決定することができ、キャッシュ部103へ新たな情報を格納する場合と定期的にキャッシュ部103の使用量を確認する場合とで値が異なっていてもよい。また、どの下位ゾーン数までのDNSKEYリソースレコードをキャッシュ部103から削除するかについては、予め決めておいてもよいし、削除されるDNSKEYリソースレコードが最少で済むように動的に決定してもよい。
次に、図15を参照しながら名前解決装置400による名前解決処理の処理手順について説明する。図15に示すように、名前解決部101が、名前解決のための問い合わせを生成し、問合せ部102に送信を依頼すると(ステップS701)、キャッシュ制御部404が、その問い合わせに対応する応答であるリソースレコードをキャッシュ部103から検索する(ステップS702)。ここで、該当するリソースレコードが存在した場合(ステップS703肯定)、問合せ部102は、検索されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS714)。
一方、該当するリソースレコードがキャッシュ部103に存在しない場合(ステップS703否定)、問合せ部102がDNS90に対して問い合わせを送信し、応答を受信する(ステップS704)。ここで、DNSSECが有効でない場合(ステップS705否定)、キャッシュ制御部404が、応答されたリソースレコードをキャッシュ部103に記憶させる(ステップS713)。そして、問合せ部102は、応答されたリソースレコードを名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS714)。
DNSSECが有効な場合(ステップS705肯定)、キャッシュ制御部404が、問い合わせが行われたゾーンのDNSKEYリソースレコードをキャッシュ部103から検索する(ステップS706)。ここで、該当するDNSKEYリソースレコードが存在した場合(ステップS707肯定)、検証部105が、そのDNSKEYリソースレコードを用いて、ステップS704で得られたリソースレコードの正当性を検証する(ステップS712)。
そして、正当性の検証が成功したならば、キャッシュ制御部404が、ステップS704で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS713)。そして、問合せ部102は、ステップS704で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS714)。
一方、該当するDNSKEYリソースレコードがキャッシュ部103に存在しない場合(ステップS707否定)、問合せ部102は、ステップS704で問い合わせが行われたゾーンのDNSKEYリソースレコードを取得する(ステップS708)。さらに、問合せ部102は、最上位のゾーンから、ステップS704で問い合わせが行われたゾーンの上位のゾーンまで、再帰的に問い合わせを行ってDSリソースレコードとDNSKEYリソースレコードを取得し、取得されたDSリソースレコード等を用いて、検証部105が、ステップS308で取得されたDNSKEYリソースレコードの正当性を検証する(ステップS709)。この再帰的な問い合わせにおいて、取得すべきDNSKEYリソースレコードがキャッシュ部103に存在する場合、問合せ部102は、そのDNSKEYリソースレコードをDNS90から取得する代わりに、キャッシュ部103から取得する。
そして、正当性の検証が成功したならば、キャッシュ制御部404が、ステップS708で得られたDNSKEYリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させるとともに(ステップS710)、そのDNSKEYリソースレコードを取得したゾーンの下位ゾーン数を下位ゾーン数記憶部101に記録する(ステップS711)。続いて、検証部105が、正当性が検証されたDNSKEYリソースレコードを用いて、ステップS704で得られたリソースレコードの正当性を検証する(ステップS712)。
そして、正当性の検証が成功したならば、キャッシュ制御部404が、ステップS704で得られたリソースレコード(ただし、RRSIGを除く)をキャッシュ部103に記憶させる(ステップS713)。そして、問合せ部102は、ステップS704で得られたリソースレコード(ただし、RRSIGを除く)を名前解決部101に引き渡し、名前解決部101は、引き渡されたリソースレコードの内容を解析する(ステップS714)。
次に、図16を参照しながら、キャッシュ制御部404が、新たな情報をキャッシュ部103に格納するタイミング、あるいは、定期的なタイミングで実行するキャッシュ解放処理の処理手順について説明する。キャッシュ制御部404は、キャッシュ部103の使用量を確認し(ステップS801)、使用量が閾値を超過していなければ(ステップS802否定)、特に処理を行うことなくキャッシュ解放処理を終了する。
一方、使用量が閾値を超過していれば(ステップS802肯定)、キャッシュ制御部404は、DNSKEYリソースレコードを優先的に残しつつ、キャッシュ部103に記憶されている他の種類のリソースレコードを削除して領域を解放する(ステップS803)。そして、解放によって、キャッシュ部103の使用量が閾値以下となれば(ステップS804否定)、キャッシュ制御部404は、キャッシュ解放処理を終了する。
解放後もキャッシュ部103の使用量が閾値を超過している場合(ステップS804肯定)、キャッシュ制御部404は、下位ゾーン数記憶部411を参照して、上述したように、下位ゾーン数が少ないゾーンのDNSKEYリソースレコードをキャッシュ部103から削除して領域を解放するとともに、削除したDNSKEYリソースレコードに対応するゾーンの情報を下位ゾーン数記憶部411から削除し、下位ゾーン数を更新させる(ステップS805)。
上述してきたように、本実施例では、下位のゾーン数が多いゾーンのDNSKEYリソースレコードをキャッシュ部103に優先的に残すこととしたので、DNSKEYリソースレコードをキャッシュ部103から削除することの影響を小さく抑えることができる。
上述した各実施例における名前解決装置の構成は、要旨を逸脱しない範囲で種々に変更することができる。例えば、一部のDNSKEYリソースレコードをキャッシュ部103から削除することについて実施例2〜4で示した各方式を何らかの優先順位を付けて組み合わせて用いることができる。
優先順位を付けて各方式を組み合わせる例を示す。キャッシュ部103にDNSKEYリソースレコードが格納されているゾーンごとに、深度と、問い合わせ回数および下位ゾーン数を保持し、キャッシュ部103の使用量が閾値を超えていれば、まず、下位ゾーン数の値が最も小さいDNSKEYリソースレコードを削除する。そして、キャッシュ部103の使用量が依然として閾値を超えていれば、深度の値が最も小さいDNSKEYリソースレコードを削除する。そして、キャッシュ部103の使用量が依然として閾値を超えていれば、問い合わせ回数の値が所定値よりも小さいDNSKEYリソースレコードを削除する。
また、上述した各実施例における名前解決装置の機能をソフトウェアとして実装し、これをコンピュータで実行することにより、上述した各実施例における名前解決装置と同等の機能を実現することもできる。以下に、名前解決装置100の機能をソフトウェアとして実装した名前解決プログラム1071を実行するコンピュータの一例を示す。
図17は、名前解決プログラム1071を実行するコンピュータ1000を示す機能ブロック図である。このコンピュータ1000は、各種演算処理を実行するCPU(Central Processing Unit)1010と、ユーザからのデータの入力を受け付ける入力装置1020と、各種情報を表示するモニタ1030と、記録媒体からプログラム等を読み取る媒体読取り装置1040と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置1050と、各種情報を一時記憶するRAM(Random Access Memory)1060と、ハードディスク装置1070とをバス1080で接続して構成される。
そして、ハードディスク装置1070には、図1に示した名前解決装置100各機能部と同様の機能を有する名前解決プログラム1071と、図1に示したキャッシュ部103に記憶される各種情報に対応するキャッシュデータ1072とが記憶される。
そして、CPU1010が名前解決プログラム1071をハードディスク装置1070から読み出してRAM1060に展開することにより、名前解決プログラム1071は、名前解決プロセス1061として機能するようになる。そして、名前解決プロセス1061は、キャッシュデータ1072から読み出した情報等を適宜RAM1060上の自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種データ処理を実行する。
なお、上記の名前解決プログラム1071は、必ずしもハードディスク装置1070に格納されている必要はなく、CD−ROM等の記憶媒体に記憶されたこのプログラムを、コンピュータ1000が読み出して実行するようにしてもよい。また、公衆回線、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)等を介してコンピュータ1000に接続される他のコンピュータ(またはサーバ)等にこのプログラムを記憶させておき、コンピュータ1000がこれらからプログラムを読み出して実行するようにしてもよい。