DNSSECとは「Domain Name System Security Extensions」の略で、公開鍵暗号と電子署名の仕組みを活用することで、DNSサーバが提供する情報の正当性を保証するための拡張仕様です。
DNSはホスト名(ドメイン名)からIPアドレスを見つけ出す「名前解決」を行うシステムですが、設計されたのが1983年ということもあり、セキュリティ上の問題があると指摘されています。その1つとして挙げられるのが、DNSキャッシュ ポイズニングに対する脆弱性です。
DNSサーバには、実際のドメインの情報管理を行う「DNSコンテンツ サーバ(権威サーバ)」と、DNSコンテンツ サーバに問い合わせを行いクライアントからのリクエストに応える「DNSキャッシュ サーバ(ネームサーバ)」があります。DNSキャッシュ サーバはDNSコンテンツ サーバから受け取った情報を一定時間の間保持し、この間に同様のリクエストを受けた場合には、キャッシュの情報を渡します。この時、キャッシュ内に誤った情報が格納されていると、クライアントにも誤ったIPアドレスが渡されてしまいます。
このような状況を故意に引き起こし、不正サイトに誘導する攻撃を、DNSキャッシュ ポイズニングと呼びます。DNSはDNSサーバ間の通信をUDPで行っており、送信元を確認していません。そのためDNSキャッシュ サーバへのリクエスト パケットと、DNSコンテンツ サーバに偽装したレスポンス パケットを、適切な時間差をつけて送信することで、DNSキャッシュ ポイズニングを実行できます。
DNSSECでは、DNSコンテンツ サーバが事前に秘密鍵と公開鍵のペアを作成し、公開鍵を公開します。DNSキャッシュ サーバからの問い合わせを受けた時には、秘密鍵で電子署名を行った情報を渡します。DNSキャッシュ サーバは、この電子署名を公開鍵で復号し、正当な応答であることを確認します。これによってDNSキャッシュ ポイズニングを防止できるようになります。