Episode 2

新しいレコード

DNSのデータが正しいかどうかを検証するために、DNSSECでは新しい種類のDNSレコードがちょっとだけ追加されてるんだ

DNSのデータが正しいかどうかを検証するために、DNSSECでは新しい種類のDNSレコードがちょっとだけ追加されてるんだ

DNSSECをドメインに設定すると、まずDNSプロバイダが行うのは、全部のレコードをRRsetにまとめることなんだ。

DNSSECをドメインに設定すると、まずDNSプロバイダが行うのは、全部のレコードを**RRset**にまとめることなんだ。

RRsetの「RR」ってのは、リソースレコードのことだよ。つまり、「同じタイプで同じ名前のレコード」をまとめた、ちょっとかっこいい言い方なんだ。

RRsetの「RR」ってのは、リソースレコードのことだよ。つまり、「同じタイプで同じ名前のレコード」をまとめた、ちょっとかっこいい言い方なんだ。

RRsetっていうのは、「同じ種類・同じ名前のレコード」をまとめて、そこにデジタル署名をつけたグループなんだよ。

RRsetっていうのは、「同じ種類・同じ名前のレコード」をまとめて、そこにデジタル署名をつけたグループなんだよ。

現実の世界では、誰が書いたのか・ホントに本人なのかを確かめるために、署名って使うよね。

現実の世界では、誰が書いたのか・ホントに本人なのかを確かめるために、署名って使うよね。

DNSSECの世界でも、同じ感じで考えられるんだよ。

DNSSECの世界でも、同じ感じで考えられるんだよ。

RRsetには、それぞれ権威サーバがゾーン署名鍵で署名してるんだよ。

RRsetには、それぞれ権威サーバが**ゾーン署名鍵**で署名してるんだよ。

このあと他の鍵も出てくるけど、とりあえず、この鍵はゾーンの情報に署名をつけたり、その署名を確かめるために使うことを覚えておいてね。

このあと他の鍵も出てくるけど、とりあえず、この鍵はゾーンの情報に署名をつけたり、その署名を確かめるために使うことを覚えておいてね。

ゾーン署名鍵は、秘密鍵公開鍵のペアになってるんだよ。これが公開鍵暗号の基本なんだ。

ゾーン署名鍵は、**秘密鍵**と**公開鍵**のペアになってるんだよ。これが公開鍵暗号の基本なんだ。

秘密鍵と公開鍵はセットで動くよ。秘密鍵で暗号化したデータは、公開鍵で読み取ったり本物かどうかを確かめたりできるよ

秘密鍵と公開鍵はセットで動くよ。秘密鍵で暗号化したデータは、公開鍵で読み取ったり本物かどうかを確かめたりできるよ

公開鍵はみんなに配ってOKなんだよ。その名の通り「公開」で誰でも見られるんだ。

公開鍵はみんなに配ってOKなんだよ。その名の通り「公開」で誰でも見られるんだ。

秘密鍵は — その名の通り「秘密」で誰にも渡したらダメなんだ。

カニ君に渡しちゃダメだよ!

秘密鍵は — その名の通り「秘密」で誰にも渡したらダメなんだ。

二つの鍵がそろうと、大事なことが2つできるようになるんだ!

二つの鍵がそろうと、大事なことが2つできるようになるんだ!

その1:その情報が正しい送り主から来てるってことを確かめられるよ。

その2:送信されてから中身が書きかえられてないことを検証できるんだ。

**その1**:その情報が正しい送り主から来てるってことを確かめられるよ。

これらの鍵は、レコードの中身ぜんぶを暗号化するためのものじゃないんだ。RRSetの一部を取り出して、ハッシュ化して、それを暗号化することでデジタル署名を作ってるんだよ。

これらの鍵は、レコードの中身ぜんぶを暗号化するためのものじゃないんだ。RRSetの一部を取り出して、ハッシュ化して、それを暗号化することでデジタル署名を作ってるんだよ。

ハッシュ化は、検証のためだけに使われるわけじゃないんだよ。

ハッシュ化すると送るデータがコンパクトになって、署名の長さもいつも同じになるんだよ。

ハッシュ化は、検証のためだけに使われるわけじゃないんだよ。

こうすることは大事だよ。DNSプロトコルは、できるだけシンプルで軽いままにしておきたいからね。

こうすることは大事だよ。DNSプロトコルは、できるだけシンプルで軽いままにしておきたいからね。

署名は、RRSIG(Resource Record Signature)というレコードに保存されてるよ。

署名は、**RRSIG**(Resource Record Signature)というレコードに保存されてるよ。

そして、そのRRSIGを読み取るための公開鍵は、DNSKEYという新しいレコードに入ってます。

そして、そのRRSIGを読み取るための公開鍵は、**DNSKEY**という新しいレコードに入ってます。

それがどう起きるのかというと…

それがどう起きるのかというと...

RRsetの一部の内容を、ハッシュ化という計算方法で変換するんだよ。

RRsetの一部の内容を、ハッシュ化という計算方法で変換するんだよ。

ハッシュ化の結果をゾーン署名鍵の秘密鍵で暗号化して、RRSIGレコードができあがるよ。

ハッシュ化の結果をゾーン署名鍵の秘密鍵で暗号化して、RRSIGレコードができあがるよ。

そして、RRsetとRRSIGをリゾルバに送るんだ。

そして、RRsetとRRSIGをリゾルバに送るんだ。

リゾルバはRRSetを使って、権威サーバと同じ方法でハッシュ化をもう一度するよ。

リゾルバはRRSetを使って、権威サーバと同じ方法でハッシュ化をもう一度するよ。

リゾルバは署名レコードを、ゾーン署名鍵の公開鍵で復号して、ハッシュを取り出すんだ。

リゾルバは署名レコードを、ゾーン署名鍵の公開鍵で復号して、ハッシュを取り出すんだ。

2つのハッシュが同じ場合に、リゾルバは、この応答は正しい送信元から来たもので、書きかえられてないことがわかるんだ。

2つのハッシュが同じ場合に、リゾルバは、この応答は正しい送信元から来たもので、書きかえられてないことがわかるんだ。

リゾルバがDNSSECに対応してなかったり、ハッシュに必要なアルゴリズムを持ってないと、レコードについてくる署名をスルーしちゃうよ。

リゾルバがDNSSECに対応してなかったり、ハッシュに必要なアルゴリズムを持ってないと、レコードについてくる署名をスルーしちゃうよ。

DNSリゾルバが www.dnsimple.com のAレコードを取りにいくときの流れは、次の通り。

DNSリゾルバが www.dnsimple.com のAレコードを取りにいくときの流れは、次の通り。

Aレコードを、RRsetとRRSIGの両方のレコードに含めて、権威サーバから返すよ。

Aレコードを、RRsetとRRSIGの両方のレコードに含めて、権威サーバから返すよ。

それからリゾルバは、このレコードが信頼できるところから来たのかを確かめるために、DNSKEYレコードを取りにいくんだ。

それからリゾルバは、このレコードが信頼できるところから来たのかを確かめるために、DNSKEYレコードを取りにいくんだ。

リゾルバは、RRsetとRRSIGとDNSKEYを使って、応答が本物かどうかを検証するんだ。

リゾルバは、RRsetとRRSIGとDNSKEYを使って、応答が本物かどうかを検証するんだ。

でも、もしDNSKEYが乗っ取られてたらどうする?

でも、もしDNSKEYが乗っ取られてたらどうする?
つづきを読む →