DNSSECとは
DNSSECは、DNSのレコード集合へデジタル署名を付け、応答の出所と改ざんされていないことを検証できるようにするDNSの拡張機能です。正式名称はDomain Name System Security Extensions(ドメイン・ネーム・システム・セキュリティー・エクステンションズ)です。
権威DNS側が秘密鍵でRRsetへ署名し、検証する再帰DNSサーバーなどが公開鍵と親からの委任情報を使って確かめます。署名は一件の応答パケットではなく、同じ名前・種類・クラスのRRsetを覆います。
DNSSECが提供するのはDNSデータの真正性と完全性です。問い合わせや応答を暗号化して、名前を秘密にする仕組みではありません。

四種類のレコードが、署名と信頼の連鎖を作る
DNSKEYゾーンの公開鍵RRSIGを検証する公開鍵をゾーン頂点で公開する
DS子の鍵への要約親ゾーンに置き、子DNSKEYへ信頼をつなぐ
RRSIGRRsetの署名署名対象種類、期限、署名値などを持つ
NSEC / NSEC3不存在の証明名前または種類がないことを署名付きで示す
署名する側と、検証する側は別の作業をする
ゾーン運用者は鍵を生成・保護し、RRsetへ署名し、有効期限前に署名を更新します。親ゾーンへDSを登録して初めて、通常のルートから子ゾーンまで信頼の連鎖がつながります。子で署名しても親DSがなければ、一般の検証リゾルバーはその鍵を信頼済みの起点へ結べません。
検証リゾルバーは応答と必要なDNSSECレコードを集め、署名時刻、アルゴリズム、鍵、DSとの一致を確認します。端末側は検証済み再帰DNSを信頼する構成が多く、ADビットが検証成功の手掛かりになりますが、端末とリゾルバー間の信頼も別に必要です。
不存在にも、改ざんされていない証明が必要
存在するRRsetにはRRSIGを付けられますが、「その名前は存在しない」という空白そのものへ直接署名はできません。NSECは、並べた名前の間に他の名前がないことと、既存名にどの種類があるかを示して署名します。
NSEC3は名前をハッシュした順序を使い、ゾーン内の名前を容易に列挙されにくくします。ただし完全な機密化ではなく、パラメーターや名前の推測可能性に応じた情報露出は残ります。
secure・insecure・bogusを混同しない
secure(セキュア)は信頼の連鎖と署名を検証できた状態、insecure(インセキュア)は親から正しく未署名として委任された状態です。bogus(ボーガス)は署名期限切れ、DSと鍵の不一致、応答改変などで検証に失敗した状態です。
bogusを通常の答えとして使うと保護の意味がなくなるため、検証リゾルバーは多くの場合SERVFAILを返します。DNS設定変更で鍵やDSの切り替え順を誤ると、データ自体は存在していても利用者から名前解決できなくなります。
暗号化、アクセス制御、DoS防御は提供しない
DNSSEC応答は公開され、第三者も内容を読めます。通信経路上から問い合わせ名を隠すにはDoTやDoHなど、DNS通信を暗号化する別の仕組みが必要です。DNSSECと暗号化DNSは併用できますが、目的が違います。
DNSSECは誰が問い合わせられるかを制限せず、サービス妨害攻撃を防ぐ機能でもありません。また、署名済みの誤ったレコードは「ゾーン管理者が提供したデータ」として検証に成功するため、設定内容そのものの正しさは運用側で確認します。
仕様の確認資料:RFC 4033「DNS Security Introduction and Requirements」、RFC 4034「Resource Records for DNSSEC」、RFC 4035「Protocol Modifications for DNSSEC」