DNSSEC の仕組みを理解する

# 概要
以下のサイトがわかりやすく、参考になりました。

- [DNSSECの仕組み | Cloudflare](https://www.cloudflare.com/ja-jp/dns/dnssec/how-dnssec-works/)
- [DNSSECの仕組みとKSKロールオーバへの対応](https://www.e-ontap.com/dns/DNSSEC-seminar2017.pdf)

まとめると以下の図のようになります。

- ゾーン内のリソースレコードは、ゾーン署名鍵（ZSK）を使って検証
- ゾーン署名鍵（ZSK）のリソースレコードは、鍵署名鍵（KSK）を使って検証
- 鍵署名鍵（KSK）のリソースレコードは、親の鍵署名鍵（KSK）を使って検証
- ルートゾーンの鍵署名鍵（KSK）は、トラステッドアンカーとして[DNSSECルート署名セレモニー](https://www.cloudflare.com/ja-jp/dns/dnssec/root-signing-ceremony/)にて厳格なプロトコルを守った上で管理・信頼
- ルートゾーンの鍵署名鍵（KSK）は、信頼できる方法で配布

```mermaid:
---
title: How DNSSEC Works
---
flowchart TB
People[Trusted People]-->|Trust|RootPublicKSK
subgraph RootZone["Root Zone (.)"]
RootPublicKSK["[[Trusted Anchor]]<br>DNSKEY<br>Public KSK"]
RDS[DS Record]
RootPublicKSK-->|Parent Zone's<br>Public KSK<br>Verification|RDS
end
RDS -.-|"↑register<br>hash"|ParentPublicKSK
RootPublicKSK -.-> a[Trusted Distribution]

subgraph ParentZone["Parent Zone (com)"]
ParentPublicKSK[DNSKEY<br>Public KSK]
DS[DS Record]
ParentPublicKSK-->|Child Zone's<br>Public KSK<br>Verification|DS
end
DS -.-|"↑register<br>hash"|PublicKSK

subgraph ChildZone["Child Zone (example.com)"]
PrivateKSK[Private KSK]
subgraph DNSKEY[DNSKEY RRset]
PublicKSK[DNSKEY<br>Public KSK]
PublicZSK[DNSKEY<br>Public ZSK]
end
PrivateZSK[Private ZSK]

RRsetHash["Sign (key, hash)"]
RRSIG["RRSIG<br>www.example.com A"]

RRset --> |hash|RRsetHash --> |Encryption|RRSIG
PrivateZSK --> |key|RRsetHash

DNSKEYRRsetHash["Sign (key, hash)"]
DNSKEYRRSIG["RRSIG<br>DNSKEY"]

DNSKEY --> |hash|DNSKEYRRsetHash --> |Encryption|DNSKEYRRSIG
PrivateKSK --> |key|DNSKEYRRsetHash

subgraph RRset
direction TB
A1[www.example.com A x.x.x.x]
A2[www.example.com A y.y.y.y]
A3[www.example.com A z.z.z.z]
A1 ~~~ A2 ~~~ A3
end

end

subgraph Resolver
subgraph DNSKEY2[DNSKEY RRset]
PublicKSK2[DNSKEY<br>Public KSK]
PublicZSK2[DNSKEY<br>Public ZSK]
end
DNSKEYRRSIG2["RRSIG<br>DNSKEY"]
RRset2[RRset<br>www.example.com A]
RRSIG2[RRSIG<br>A]
RRset2 --> |hash|RRsetHash2[hash value]
RRSIGHash["Decrypt (key, sign)"]
PublicZSK2 --> |key|RRSIGHash
RRSIG2 --> |sign|RRSIGHash
RRSIGHash <-.-> |RRset<br>Verification|RRsetHash2

DNSKEY2 --> |hash|DNSKEYRRsetHash2[hash value]
DNSSECRRSIGHash["Decrypt (key, sign)"]
PublicKSK2 --> |key|DNSSECRRSIGHash
DNSKEYRRSIG2 --> |sign|DNSSECRRSIGHash
DNSSECRRSIGHash <-.-> |Public ZSK<br>Verification|DNSKEYRRsetHash2
end

RRset --> RRset2
PublicZSK --> PublicZSK2
RRSIG --> RRSIG2

PublicKSK --> PublicKSK2
DNSKEYRRSIG --> DNSKEYRRSIG2
```

# ルートゾーンKSKロールオーバー

DNSSEC の仕組みを理解すると、ルートゾーンにおける鍵署名鍵（KSK）の移行（ロールオーバー）の与える影響がかなり大きいことがわかります。

過去には 2018 年 10 月に実施されており、DNSSEC 実装後の初めてのイベントでした。

- [KSKロールオーバーについて - JPNIC](https://www.nic.ad.jp/ja/dns/ksk-rollover/)
- [今夜25時に迫った「DNSの世界的な運用変更」、ネット史上初の「ルートゾーンKSKロールオーバー」による利用者への影響は？ - INTERNET Watch](https://internet.watch.impress.co.jp/docs/news/1147262.html)

今後も数年ごとに更新されるイベントが発生する予定です。

- [ICANNが将来のルートゾーンKSKロールオーバーに関するパブリックコメントを募集しています – JPNIC Blog](https://blog.nic.ad.jp/2019/3456/)
    - > この提案ではKSKロールオーバーの間隔を3年とする案になっています。
また、KSKのライフサイクルについても提案されており、署名に使用する時期よりもかなり前から鍵を生成する案も挙げられています。提案では、事前公開に2年間、署名に使用する期間を3年間、 失効してから削除までの期間を1年間とする案になっています。

また、ニュースになった際に楽しみしておきたいと思います。

- [[第116回IETF Meeting報告] DNS関連WG・BoF・サイドミーティングの状況 | 2023年 | ドメイン名関連会議報告 | ドメイン名関連情報 | JPRS](https://jprs.jp/related-info/event/2023/IETF116-03.html)
    - > 今後のスケジュールとして、2023年から2025年に実施される次回のルートゾーンKSKロールオーバー