Episode 2
新しいレコード
DNSのデータが正しいかどうかを検証するために、DNSSECでは新しい種類のDNSレコードがちょっとだけ追加されてるんだ
DNSSECをドメインに設定すると、まずDNSプロバイダが行うのは、全部のレコードをRRsetにまとめることなんだ。
RRsetの「RR」ってのは、リソースレコードのことだよ。つまり、「同じタイプで同じ名前のレコード」をまとめた、ちょっとかっこいい言い方なんだ。
RRsetっていうのは、「同じ種類・同じ名前のレコード」をまとめて、そこにデジタル署名をつけたグループなんだよ。
現実の世界では、誰が書いたのか・ホントに本人なのかを確かめるために、署名って使うよね。
DNSSECの世界でも、同じ感じで考えられるんだよ。
RRsetには、それぞれ権威サーバがゾーン署名鍵で署名してるんだよ。
このあと他の鍵も出てくるけど、とりあえず、この鍵はゾーンの情報に署名をつけたり、その署名を確かめるために使うことを覚えておいてね。
ゾーン署名鍵は、秘密鍵と公開鍵のペアになってるんだよ。これが公開鍵暗号の基本なんだ。
秘密鍵と公開鍵はセットで動くよ。秘密鍵で暗号化したデータは、公開鍵で読み取ったり本物かどうかを確かめたりできるよ
公開鍵はみんなに配ってOKなんだよ。その名の通り「公開」で誰でも見られるんだ。
秘密鍵は — その名の通り「秘密」で誰にも渡したらダメなんだ。
カニ君に渡しちゃダメだよ!
二つの鍵がそろうと、大事なことが2つできるようになるんだ!
その1:その情報が正しい送り主から来てるってことを確かめられるよ。
その2:送信されてから中身が書きかえられてないことを検証できるんだ。
これらの鍵は、レコードの中身ぜんぶを暗号化するためのものじゃないんだ。RRSetの一部を取り出して、ハッシュ化して、それを暗号化することでデジタル署名を作ってるんだよ。
ハッシュ化は、検証のためだけに使われるわけじゃないんだよ。
ハッシュ化すると送るデータがコンパクトになって、署名の長さもいつも同じになるんだよ。
こうすることは大事だよ。DNSプロトコルは、できるだけシンプルで軽いままにしておきたいからね。
署名は、RRSIG(Resource Record Signature)というレコードに保存されてるよ。
そして、そのRRSIGを読み取るための公開鍵は、DNSKEYという新しいレコードに入ってます。
それがどう起きるのかというと…
RRsetの一部の内容を、ハッシュ化という計算方法で変換するんだよ。
ハッシュ化の結果をゾーン署名鍵の秘密鍵で暗号化して、RRSIGレコードができあがるよ。
そして、RRsetとRRSIGをリゾルバに送るんだ。
リゾルバはRRSetを使って、権威サーバと同じ方法でハッシュ化をもう一度するよ。
リゾルバは署名レコードを、ゾーン署名鍵の公開鍵で復号して、ハッシュを取り出すんだ。
2つのハッシュが同じ場合に、リゾルバは、この応答は正しい送信元から来たもので、書きかえられてないことがわかるんだ。
リゾルバがDNSSECに対応してなかったり、ハッシュに必要なアルゴリズムを持ってないと、レコードについてくる署名をスルーしちゃうよ。
DNSリゾルバが www.dnsimple.com のAレコードを取りにいくときの流れは、次の通り。
Aレコードを、RRsetとRRSIGの両方のレコードに含めて、権威サーバから返すよ。
それからリゾルバは、このレコードが信頼できるところから来たのかを確かめるために、DNSKEYレコードを取りにいくんだ。
リゾルバは、RRsetとRRSIGとDNSKEYを使って、応答が本物かどうかを検証するんだ。
でも、もしDNSKEYが乗っ取られてたらどうする?