InfraLab

DNSSEC 仕様

35 / 35 items

InfraLab Reference Series

Category: DNSSEC

Updated: 2026-05-14

infralab.jp

dnssec

35 items

DNSSEC 仕様

Abstract

DNSSEC の DNSKEY/RRSIG/DS/NSEC/NSEC3、KSK/ZSK、ロールオーバー、Chain of Trust、AD/CD/DO bit、検証失敗時の切り分けを整理。

Table of Contents

  1. 1. 概要 (RFC)3
  2. 2. レコード種別7
  3. 3. 鍵・署名8
  4. 4. Authenticated Denial (NSEC / NSEC3)4
  5. 5. 委任・トラストアンカー6
  6. 6. 運用・トラブルシュート7
  7. 7. References25

1. 概要 (RFC)

1.1. DNSSEC とは

DNS 応答に公開鍵署名を付け、改ざんと存在否定を検証できるようにする DNS 拡張。機密性は提供しない。

DNSSEC core: RFC 4033 / RFC 4034 / RFC 4035。検証結果は AD/CD/DO bit と RRSIG/NSEC 系で確認

1.2. 主要 RFC

コア仕様、NSEC3、運用、アルゴリズム要件、検証済みキャッシュの積極利用、NSEC3 推奨を合わせて参照する。

RFC 4033/4034/4035, RFC 5155, RFC 6781, RFC 8198, RFC 8624, RFC 9276

1.3. AD / CD / DO bit

AD は検証済み応答、CD は検証無効要求、DO は DNSSEC レコード要求を表す。

AD: Authenticated Data。CD: Checking Disabled。DO: EDNS OPT flags の DNSSEC OK bit

2. レコード種別

2.1. DNSKEY

ゾーンの公開鍵を保持する RR。KSK/ZSK の公開鍵とアルゴリズム、フラグを含む。

Type=48。Flags 16bit / Protocol=3 / Algorithm 8bit / Public Key。SEP(KSK) flag=257、ZSK は 256 が典型

RFC 4034 DNSKEY RDATA ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |             Flags             |   Protocol    |   Algorithm   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Public Key ...                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.2. RRSIG

RRset に対する署名。署名対象タイプ、有効期限、署名者名、Key Tag などを持つ。

Type=46。Type Covered / Algorithm / Labels / Original TTL / Signature Expiration / Inception / Key Tag / Signer Name / Signature

RFC 4034 RRSIG RDATA ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |         Type Covered          |   Algorithm   |    Labels     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Original TTL                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     Signature Expiration                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      Signature Inception                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |            Key Tag            |        Signer Name ...        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                  Signer Name / Signature ...                  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.3. DS

親ゾーンに置く子ゾーン KSK のダイジェスト。親子間の chain of trust をつなぐ。

Type=43。Key Tag / Algorithm / Digest Type / Digest。Digest Type 2=SHA-256, 4=SHA-384

RFC 4034 DS RDATA ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |            Key Tag            |   Algorithm   |  Digest Type  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          Digest ...                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.4. NSEC

存在しない名前やタイプを、次の所有者名と存在タイプ bitmap で証明する。ゾーン列挙が可能になる。

Type=47。Next Domain Name + Type Bit Maps。RFC 4034/4035

RFC 4034 NSEC RDATA ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     Next Domain Name ...                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Type Bit Maps ...                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.5. NSEC3

ハッシュ化した名前の順序で存在否定を証明する。ゾーン列挙耐性を持つが辞書攻撃は完全には防げない。

Type=50。Hash Alg / Flags / Iterations / Salt / Next Hashed Owner Name / Type Bit Maps。RFC 5155

RFC 5155 NSEC3 RDATA ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Hash Alg    |     Flags     |          Iterations           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Salt Len    |                   Salt ...                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |   Hash Len    |             Next Hashed Owner ...             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Type Bit Maps ...                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.6. NSEC3PARAM

権威サーバが NSEC3 チェーン生成パラメータを示すための RR。応答の検証自体には NSEC3 を使う。

Type=51。Hash Algorithm / Flags / Iterations / Salt

2.7. CDS / CDNSKEY

子ゾーンから親ゾーンへ DS 更新希望を伝える自動委任更新用 RR。

CDS Type=59、CDNSKEY Type=60。RFC 7344 / RFC 8078 系の自動化で利用

3. 鍵・署名

3.1. KSK / ZSK 分離

KSK は DNSKEY RRset と DS 連携、ZSK は通常 RRset 署名に使う。ロールオーバー頻度と親連携を分離できる。

KSK: flags 257, DS 登録対象。ZSK: flags 256, zone RRset 署名対象。単一 CSK 運用もあり

3.2. Double-Signature ロールオーバー

新旧鍵の署名を一定期間並行させ、キャッシュ TTL と親 DS 更新をまたいで安全に切り替える方式。

手順: publish new DNSKEY -> sign with old+new -> wait TTL -> switch DS if KSK -> remove old after TTL

3.3. Double-DS ロールオーバー

親ゾーンに新旧 DS を同時登録してから子ゾーン鍵を切り替える KSK ロールオーバー方式。

Parent DS: old+new を保持。子 DNSKEY と RRSIG の TTL を考慮して撤去

3.4. RSA/SHA-256

広く使われてきた DNSSEC アルゴリズム。鍵長により応答サイズが増えやすく、EDNS/fragmentation に注意する。

Algorithm 8 = RSASHA256。RFC 8624 では検証側必須、署名側推奨度は運用判断

3.5. RSA/SHA-512

RSA/SHA-512 を使うアルゴリズム。RSA 鍵のサイズによる応答肥大化に注意する。

Algorithm 10 = RSASHA512

3.6. ECDSA

RSA より短い署名で済むため DNS 応答サイズを抑えやすい。現代的な DNSSEC でよく使われる。

Algorithm 13 = ECDSAP256SHA256、14 = ECDSAP384SHA384

3.7. EdDSA

Ed25519/Ed448 は短い鍵と署名で扱いやすいが、古い検証リゾルバの対応状況を確認する。

Algorithm 15 = ED25519、16 = ED448。RFC 8080 / RFC 8624

3.8. DS ハッシュアルゴリズム

親ゾーンに登録する DS digest の方式。SHA-1 は古く、SHA-256 または SHA-384 を使う。

Digest Type 1=SHA-1 (非推奨), 2=SHA-256, 4=SHA-384

4. Authenticated Denial (NSEC / NSEC3)

4.1. NSEC による存在否定

問い合わせ名が存在しないことを、辞書順で前後の名前を示す NSEC RRset と RRSIG で証明する。

NXDOMAIN/NODATA 応答に NSEC + RRSIG。Type Bit Maps で NODATA を証明

4.2. NSEC3 Opt-Out

大量の未署名委任があるゾーンで NSEC3 チェーンを小さくできるが、検証意味が複雑になる。

NSEC3 Flags Opt-Out bit=1。TLD など委任中心ゾーンで利用例

4.3. NSEC3 iterations

反復回数を増やすと検証コストが増える。現在の推奨は反復 0 に寄っている。

RFC 9276: NSEC3 iterations は 0 を推奨。salt も不要または空に近い運用が推奨方向

4.4. Aggressive Use of Cache

検証済み NSEC/NSEC3 を使って、存在しない名前の応答をキャッシュから合成し問い合わせを減らす。

RFC 8198。DNSSEC-validated cache の積極利用

5. 委任・トラストアンカー

5.1. Chain of Trust

Root trust anchor から TLD、親ゾーン DS、子ゾーン DNSKEY へ署名検証をつなぐ。

Root DNSKEY -> RRSIG DNSKEY -> DS(parent) -> DNSKEY(child) -> RRSIG RRset

5.2. Root KSK

DNSSEC 検証の起点となるルートゾーン KSK。IANA が trust anchor として公開する。

IANA Root Trust Anchor。2018 Root KSK rollover で KSK-2017 へ移行

5.3. 2018 Root KSK Rollover

ルート KSK は 2018 年に初めてロールオーバーされた。古い trust anchor 固定環境では障害要因になった。

Root KSK rollover: 2018-10-11 に KSK-2017 で署名開始。将来 rollover も trust anchor 更新監視が必要

5.4. 親 DS 不整合

子ゾーンの DNSKEY と親ゾーン DS が一致しないと SERVFAIL になり、権威応答自体は返っても検証で落ちる。

症状: validating resolver returns SERVFAIL。確認: dig DS child @parent / dig DNSKEY child +dnssec

5.5. Island of Security

親 DS がなくてもローカル trust anchor を設定すれば検証可能なゾーン。通常の公開 DNS では限定用途。

ローカル trust anchor を resolver に登録。Chain of trust は公開 DNS ルートからはつながらない

5.6. CDS / CDNSKEY 自動委任更新

レジストリ/レジストラが対応すれば、子ゾーンが公開する CDS/CDNSKEY に基づき DS を自動更新できる。

運用: publish CDS/CDNSKEY -> parent polling/validation -> DS update -> remove old after TTL

6. 運用・トラブルシュート

6.1. dig での基本確認

DO bit を立てて DNSSEC 関連 RR を受け取り、AD bit や RRSIG の有無を確認する。

dig +dnssec example.jp A / dig +multi DNSKEY example.jp / dig DS example.jp

6.2. CD bit での切り分け

検証失敗時に CD bit を使うと、検証を無効化した生応答に近い情報を確認できる。

dig +dnssec +cd example.jp A。CD=1 で resolver 側検証を抑止要求

6.3. delv での検証

BIND の delv は DNSSEC 検証過程を確認するのに便利。trust anchor と署名連鎖を追える。

delv example.jp A / delv +root=trust-anchor-file example.jp

6.4. DNSSEC failure 時の挙動

検証リゾルバは署名期限切れ、DS 不一致、アルゴリズム非対応、NSEC/NSEC3 不整合で SERVFAIL を返すことが多い。

典型: SERVFAIL。切り分け: authoritative 直引き、+cd、DNSViz、RRSIG expiration/inception、時刻同期

6.5. 署名期限切れ

RRSIG Expiration を過ぎると検証不能になる。ゾーン署名ジョブや HSM、時刻同期の監視が必要。

RRSIG fields: Signature Inception / Signature Expiration。NTP 不整合でも検証失敗

6.6. 応答サイズとフラグメント

DNSSEC は DNSKEY/RRSIG により応答が大きくなりやすい。UDP fragmentation や TCP fallback を考慮する。

EDNS UDP payload size 1232 付近の運用例。TCP/53 許可、最小応答サイズ設計、ECDSA/EdDSA で軽量化

6.7. 運用ベストプラクティス

鍵保護、署名自動更新、ロールオーバー手順、親 DS 監視、検証リゾルバからの外形監視をセットで運用する。

RFC 6781。監視: DNSKEY/DS/RRSIG/NSEC、SOA serial、resolver AD bit、SERVFAIL rate

7. References

  1. DNSSEC
  2. RFC 4033
  3. RFC 4034
  4. RFC 4035
  5. RFC 5155
  6. RFC 6781
  7. RFC 8198
  8. RFC 8624
  9. RFC 9276
  10. DNSKEY
  11. RRSIG
  12. DS
  13. NSEC
  14. NSEC3
  15. KSK
  16. ZSK
  17. Root KSK
  18. AD bit
  19. CD bit
  20. DO bit
  21. Chain of Trust
  22. delv
  23. dig +dnssec
  24. 署名
Related