RRSIG レコード
概要
RRSIG レコード は、DNSSEC(DNS Security Extensions)で使用されるリソースレコードで、同一名・同一タイプのレコード群(RRset)に対するデジタル署名を格納します。RFC 4034(2005年)で定義されており、DNS 応答の完全性と出自を検証する基盤です。
権威ネームサーバーは、ゾーン内の各 RRset に対して ZSK(Zone Signing Key)の秘密鍵で署名を生成し、その結果を RRSIG レコードとして配置します。再帰リゾルバーは応答を受け取ると、対応する DNSKEY レコード(ZSK の公開鍵)を使って RRSIG の署名を検証します。署名が一致しなければ、応答は改ざんされたと判断して破棄し、クライアントに SERVFAIL を返します。
RRSIG レコードには署名の有効期間(開始日と終了日)が設定されています。期限切れの署名は検証に失敗するため、権威サーバーは定期的に署名を更新する必要があります。署名の自動更新が停止すると、ドメイン全体の名前解決が停止するリスクがあります。
仕組み
RRSIG レコードは署名対象の RRset、署名アルゴリズム、有効期間などのフィールドで構成され、ZSK の秘密鍵で生成されます。
RRSIG のフィールド構造
RRSIG レコードは次のフィールドで構成されます。
| フィールド | 内容 |
|---|---|
| Type Covered | 署名対象のレコードタイプ(A、MX、TXT 等) |
| Algorithm | 署名アルゴリズム(13 = ECDSAP256SHA256 等) |
| Labels | 署名対象の名前のラベル数 |
| Original TTL | 署名対象 RRset の元の TTL |
| Signature Expiration | 署名の有効期限(UTC) |
| Signature Inception | 署名の有効開始日(UTC) |
| Key Tag | 署名に使用した DNSKEY の識別子 |
| Signer’s Name | 署名者のドメイン名(ゾーンオーナー) |
| Signature | デジタル署名のデータ |
署名の生成と検証
署名の生成は権威ネームサーバー(またはゾーン署名システム)が行います。
- ゾーン内の各 RRset を正規化する(DNSSEC の正規順序に並べる)
- RRSIG の各フィールド(Type Covered、Algorithm、Expiration 等)と RRset のデータを結合する
- ZSK の秘密鍵で結合データに署名する
- 署名結果を RRSIG レコードの Signature フィールドに格納する
検証は再帰リゾルバーが行います。
- 応答に含まれる RRSIG レコードの Key Tag から、対応する DNSKEY(ZSK)を特定する
- DNSKEY の公開鍵を使って署名を検証する
- 署名が有効かつ有効期間内であれば検証成功とし、応答ヘッダーの
adフラグを立てる
署名アルゴリズム
RFC 8624(2019年)で各アルゴリズムの推奨状況が整理されています。
| アルゴリズム番号 | 名称 | 状態 |
|---|---|---|
| 8 | RSA/SHA-256 | 推奨 |
| 10 | RSA/SHA-512 | 使用可 |
| 13 | ECDSAP256SHA256 | 推奨 |
| 14 | ECDSAP384SHA384 | 推奨 |
| 15 | Ed25519 | 推奨 |
アルゴリズム 13(ECDSA P-256)は鍵長が短く、RRSIG レコードのサイズを抑えられるため、広く採用されています。Cloudflare の DNSSEC はアルゴリズム 13 を使用しています。
署名の有効期間
RRSIG の署名には有効期間が設定されます。一般的な設定は次の通りです。
- 署名有効期間: 14〜30 日間
- 署名更新間隔: 有効期限の 3〜7 日前に再署名
BIND の inline-signing や PowerDNS の pdnsutil は、署名の有効期限が近づくと自動的に再署名を行います。Cloudflare や Route 53 のマネージド DNSSEC ではこの処理が自動化されています。
具体例
dig +dnssec で A レコードとその RRSIG を取得した例です。
dig A example.com +dnssec
;; ANSWER SECTION:
example.com. 3600 IN A 93.184.216.34
example.com. 3600 IN RRSIG A 13 2 3600 (
20260501000000 20260401000000 12345
example.com.
dGhpcyBpcyBhIHNhbXBsZSBzaWduYXR1cmU= )
RRSIG の各フィールドの読み方です。
A— 署名対象のレコードタイプ13— アルゴリズム(ECDSAP256SHA256)2— ラベル数(exampleとcomで 2)3600— 元の TTL20260501000000— 署名の有効期限(2026 年 5 月 1 日 UTC)20260401000000— 署名の開始日(2026 年 4 月 1 日 UTC)12345— 署名に使用した DNSKEY の Key Tagexample.com.— 署名者のゾーン名
確認方法
DNSSEC 署名の状態を確認するには dig +dnssec を使います。
# A レコードの RRSIG を確認
dig A example.com +dnssec
# RRSIG レコードのみを問い合わせる
dig RRSIG example.com
# DNSKEY レコードで署名鍵を確認
dig DNSKEY example.com
応答ヘッダーの flags: に ad(Authenticated Data)が含まれていれば、リゾルバーが RRSIG の検証に成功しています。
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2
署名の有効期限を確認するには、RRSIG の Expiration フィールドを見ます。日付形式は YYYYMMDDHHmmss(UTC)です。
外部の視点からも確認したい場合は、Labee Dev Toolbox の DNS API を使うと、外部の視点から見た結果を取得できます。DNSSEC 検証はリゾルバー側で行われます。
curl "https://labee.dev/api/dns?domain=example.com&type=A"
{
"success": true,
"data": {
"domain": "example.com",
"records": {
"A": [
{ "address": "93.184.216.34", "ttl": 3600 }
]
}
},
"error": null,
"meta": { "responseTime": 45 }
}
API が正常にレコードを返せば、リゾルバーが DNSSEC 検証に成功していることを意味します。DNSSEC 検証に失敗した場合、API はエラーを返すか、レコードが空になります。
よくある問題
RRSIG レコードの運用では、署名期限切れ、鍵ロールオーバー時の不整合、レスポンスサイズの増大が代表的なトラブルです。
RRSIG の署名期限切れ
署名の自動更新が停止すると、RRSIG の有効期限が過ぎた時点で DNSSEC 対応リゾルバーが検証に失敗し、SERVFAIL を返します。Google Public DNS や Cloudflare DNS などの主要リゾルバーは DNSSEC 検証を有効にしているため、署名期限切れはドメインの名前解決が完全に停止する深刻な障害になります。
BIND では inline-signing が停止する原因として、ディスク容量不足、rndc freeze が実行されたまま、鍵ファイルのパーミッションエラーが挙げられます。dig RRSIG example.com で有効期限を定期的に監視し、更新が行われているかを確認してください。
Key Tag の不一致
RRSIG の Key Tag と DNSKEY の Key Tag が一致しない場合、リゾルバーは署名を検証できません。ZSK のロールオーバー中に古い RRSIG が残っていたり、新しい ZSK に対応する RRSIG がまだ生成されていないタイミングで発生します。
ZSK のロールオーバーは、新旧両方の ZSK と RRSIG がゾーンに存在する「プレパブリッシュ」期間を設けて行います。RFC 6781(2012年)でロールオーバーの手順が詳しく記載されています。
レスポンスサイズの増大
RRSIG レコードの追加により DNS レスポンスのサイズが増大します。RSA/SHA-256(アルゴリズム 8)の署名は 256 バイト以上になるため、レコード数が多いゾーンでは UDP パケットの推奨上限(1232 バイト、DNS Flag Day 2020 推奨値)を超えることがあります。ECDSA(アルゴリズム 13)は署名が 64 バイトと短く、レスポンスサイズの問題を軽減します。