DS レコード(Delegation Signer)
概要
DS レコード(Delegation Signer) は、DNSSEC における信頼の連鎖(Chain of Trust)を親ゾーンと子ゾーンの間で接続するための DNS レコードです。RFC 4034(2005年)で定義されており、レコードタイプ番号は 43 です。
DS レコードは親ゾーンに配置され、子ゾーンの KSK(Key Signing Key)の暗号学的ハッシュを格納します。リゾルバーは親ゾーンの DS レコードと子ゾーンの DNSKEY レコードを照合することで、子ゾーンの鍵が正当なものであることを検証します。ルートゾーンから末端のドメインまで、DS レコードが連なって DNSSEC の信頼の連鎖を形成します。
仕組み
DS レコードは Key Tag・Algorithm・Digest Type・Digest の 4 フィールドで構成され、子ゾーン KSK のハッシュとして親ゾーンに配置されます。
レコードの構造
DS レコードは 4 つのフィールドで構成されます。
example.com. IN DS 12345 13 2 49FD46E6C4B45C55D4AC69CBD3CD34AC1AFE51DE...
| フィールド | 説明 |
|---|---|
| Key Tag | 対応する DNSKEY レコードを識別するための 16 ビット整数。DNSKEY の RDATA から計算される |
| Algorithm | DNSKEY で使われている暗号アルゴリズム番号(DNSKEY の Algorithm フィールドと同じ値) |
| Digest Type | ハッシュアルゴリズムの種類。1(SHA-1)、2(SHA-256)、4(SHA-384) |
| Digest | DNSKEY レコードの所有者名と RDATA をハッシュした値(16 進数表記) |
信頼の連鎖における役割
DNSSEC の検証フローで DS レコードは次のように機能します。
- リゾルバーが
.comゾーンにexample.comの DS レコードを問い合わせる - DS レコードの Digest を取得する
example.comゾーンの DNSKEY レコード(KSK)を取得する- KSK の所有者名と RDATA からハッシュを計算し、DS レコードの Digest と照合する
- 一致すれば KSK が正当であると確認でき、その KSK で検証された ZSK を信頼できる
- ZSK でゾーン内の各レコードの RRSIG を検証する
DS レコードが親ゾーンに存在しない場合、リゾルバーはその子ゾーンに DNSSEC が有効でないと判断し、署名の検証を行いません。
ダイジェストアルゴリズム
RFC 8624(2019年)でダイジェストアルゴリズムの推奨ステータスが整理されています。
| Digest Type | アルゴリズム | ステータス |
|---|---|---|
| 1 | SHA-1 | 実装必須だが非推奨 |
| 2 | SHA-256 | 実装推奨 |
| 4 | SHA-384 | 実装任意 |
SHA-1(Digest Type 1)は衝突攻撃の現実的なリスクがあるため、RFC 8624 では新規の DS レコードに SHA-256(Digest Type 2)の使用を推奨しています。Cloudflare、Route 53、Gandi などの主要レジストラは DS レコード登録時に SHA-256 をデフォルトで使用します。
CDS / CDNSKEY による自動更新
従来、DS レコードの登録や更新はレジストラの管理画面から手動で行う必要がありました。RFC 7344(2014年)と RFC 8078(2017年)では、子ゾーンから親ゾーンへ DS レコードの登録を要求する仕組みが標準化されています。
CDS レコード は子ゾーンに配置し、親ゾーンに登録してほしい DS レコードの内容を格納します。CDNSKEY レコード は同様に、親ゾーンに登録してほしい DNSKEY レコードの内容を格納します。対応するレジストラや DNS ホスティングは、CDS / CDNSKEY を定期的にスキャンして DS レコードを自動更新します。
Cloudflare は CDS / CDNSKEY に対応しており、一部のレジストラ(Gandi など)との間で DS レコードの自動登録が動作します。
設定例
SHA-256 ダイジェストの DS レコード、複数ダイジェストの併用、CDS レコードによる自動登録要求の記述例を示します。
SHA-256 ダイジェストの DS レコード
example.com. IN DS 12345 13 2 49FD46E6C4B45C55D4AC69CBD3CD34AC1AFE51DE4862BCBA590E83F03D19FD64
Key Tag 12345、アルゴリズム 13(ECDSAP256SHA256)、Digest Type 2(SHA-256)の構成です。
複数のダイジェストアルゴリズムを併用
移行期間中は SHA-1 と SHA-256 の DS レコードを両方登録することがあります。
example.com. IN DS 12345 13 1 7A19A5B3C0E2D7F8B4A1E6C9D3F5A8B2C7E4D1F6
example.com. IN DS 12345 13 2 49FD46E6C4B45C55D4AC69CBD3CD34AC1AFE51DE4862BCBA590E83F03D19FD64
CDS レコードによる自動登録要求
子ゾーンに CDS レコードを配置して、親ゾーンへの DS レコード登録を要求します。
example.com. IN CDS 12345 13 2 49FD46E6C4B45C55D4AC69CBD3CD34AC1AFE51DE4862BCBA590E83F03D19FD64
DNSSEC 無効化の CDS シグナル
CDS レコードに Algorithm 0、Digest Type 0、空の Digest を設定すると、DS レコードの削除を親ゾーンに要求します(RFC 8078)。
example.com. IN CDS 0 0 0 0
確認方法
dig で DS レコードを確認するには次のコマンドを使います。
dig DS example.com
出力の ANSWER SECTION に Key Tag、Algorithm、Digest Type、Digest が表示されます。
;; ANSWER SECTION:
example.com. 86400 IN DS 12345 13 2 49FD46E6C4B45C55D4AC69CBD3CD34AC...
DS レコードは親ゾーン(.com の権威サーバー)に問い合わせるのが正確です。
dig DS example.com @a.gtld-servers.net
DNSKEY レコードと DS レコードの整合性を確認するには、両方を取得して比較します。
dig DNSKEY example.com +dnssec
信頼の連鎖全体を検証するには +sigchase(一部の dig バージョンで利用可能)や delv コマンドを使います。
delv example.com
delv は DNSSEC の検証結果を ; fully validated または ; unsigned answer のように表示します。
Labee Dev Toolbox の DNS API は現在 DS レコードタイプに対応していないため、dig コマンドで確認します。
よくある問題
DS レコードのトラブルは DNSKEY との不一致、レジストラの対応状況、登録順序の誤りに起因し、いずれもドメインの解決停止を招きます。
DS レコードと DNSKEY の不一致
DS レコードの Digest が子ゾーンの DNSKEY と一致しない場合、DNSSEC の検証が失敗して SERVFAIL が返ります。KSK をローテーションした後に親ゾーンの DS レコードを更新し忘れるのが最も一般的な原因です。dig DNSKEY で取得した KSK から DS のハッシュを計算し、親ゾーンの DS レコードと照合して確認します。
レジストラで DS レコードを登録できない
一部のレジストラは DNSSEC の DS レコード登録に対応していません。対応していても、入力フォームの形式がレジストラごとに異なります(Key Tag / Algorithm / Digest Type / Digest を個別入力する形式、または DNSKEY レコードを貼り付けて自動計算する形式)。レジストラのドキュメントで対応する DS レコードの登録方法を確認します。
DS レコードだけ登録して DNSKEY が存在しない
DS レコードを親ゾーンに登録したが、子ゾーンで DNSSEC を有効化していない場合、リゾルバーは DNSSEC 検証を試みて失敗します。結果として、ドメインの全レコードが SERVFAIL になります。DNSSEC を有効化してゾーンの署名が完了した後に DS レコードを登録する順序を守ります。
SHA-1 のみの DS レコードが拒否される
一部のリゾルバーは SHA-1(Digest Type 1)の DS レコードを信頼しない設定で運用されています。SHA-256(Digest Type 2)の DS レコードを登録するか、SHA-1 と SHA-256 の両方を登録します。新規の DNSSEC 導入では SHA-256 のみで十分です。