DNSCurve
From Wikipedia, the free encyclopedia
DNSCurve とは、Domain Name System (DNS) をセキュアにした新しいプロトコルである。ダニエル・バーンスタインにより設計された。楕円曲線暗号を利用したサーバー認証と通信路暗号化により、DNS スプーフィングを防止する。
概要
DNSCurve は、Salsa20 が使う鍵の構築に Curve25519[1] 楕円曲線暗号を使い、リゾルバと権威サーバーとの間の DNS パケットの暗号化と認証に Poly1305 メッセージ認証符号 (MAC) 関数を組み合わせて使う。リモートの権威サーバーの公開鍵は NS レコードに置かれ、したがって再帰リゾルバはサーバーが DNSCurve をサポートしているかどうかを知ることができる。鍵はマジック文字列 uz5 から始まり、サーバーの255ビット公開鍵を51バイトに Base32 エンコードした文字列が続く。たとえば、BIND フォーマットでは以下のように表記される。
example.com. IN NS uz5bcx1nh80x1r17q653jf3guywz7cmyh5jv0qjz0unm56lq7rpj8l.example.com.
リゾルバは自身の DNSCurve 公開鍵、96ビットの nonce、クエリの入った暗号ボックスを含むパケットをサーバーに送る。暗号ボックスはリゾルバの秘密鍵、サーバーの公開鍵、nonce から作られる。サーバーからの応答には別の96ビット nonce と、クエリへの応答を含む暗号ボックスが含まれる。
DNSCurve で利用される暗号ツールは TCP に似ているがデータの暗号化と認証に楕円曲線暗号を利用する UDP ベースのプロトコル、CurveCP の利用するものと同一である。たとえて言えば、DNSSEC がウェブページを Pretty Good Privacy (PGP) で署名するようなものだとすれば、CurveCP および DNSCurve は Transport Layer Security (TLS) を利用してチャンネルを暗号化および認証するようなものだと言える。PGP 署名済みのウェブページが SSL を用いて暗号化されたチャンネルで送信できるのと同様、DNSSEC データを DNSCurve を利用して保護することも可能である。
DNSCurve には既存の DNS サービスに比べて以下のような利点があるとされる[2]。
- 秘匿性—通常の DNS 要求と応答は暗号化されておらず、攻撃者にもブロードキャストされてしまう。
- 整合性—通常の DNS にも保護はあるが、忍耐強くスニッフィングを続ける攻撃者は DNS レコードを偽造することができる。これを DNSCurve の暗号学的認証により防ぐことができる。
- 可用性—通常の DNS はスニッフィング攻撃者が偽造パケットを秒間数個送ることによる DoS 攻撃 に対する保護を全くもたない。SMTP, HTTP, HTTPS も DoS に脆弱なのに対して、DNSCurve は偽造された DNS パケットを検知して破棄するため、若干の保護効果がある。
セキュリティ
DNSCurve の利用する256 ビット楕円曲線暗号は NIST の推算によれば3072ビット RSA とおおよそ同等とされる[3]。ECRYPT も同様の同等性を報告している[4]。SSH や SSL と同様、クエリ毎の公開鍵暗号と96ビット nonce を使って反射攻撃を防いでいる。Google のセキュリティ担当者である Adam Langley によれば、「大規模な量子コンピュータを除き、Curve25519 を単一コンピュータで破ることのできる者は現れない可能性が高いだろう」"With very high probability, no one will ever solve a single instance of Curve25519 without a large, quantum computer." という[5]。
速度
Adam Langley の Curve25519 を紹介する個人的ウェブサイトへの投稿によると、DNSCurve の利用する楕円曲線暗号が試されたものの中で最も高速であったという[6]。アメリカ国家安全保障局 (NSA) によれば、楕円曲線暗号は RSA 暗号やディフィー・ヘルマン鍵共有が幾何的に鍵サイズを増加させるのに対して、大きく性能を向上させている[7]。
実装
DNSCurve は dnscache への Matthew Dempsky によるパッチ[8]により初めてサポートされた。Dempsky の GitHub リポジトリには、Python DNS ルックアップツールと C で書かれたフォワーダーが含まれている[9]。Adam Langley も GitHub リポジトリを持っている[10]。 CurveDNS[11] と呼ばれる DNS 管理者が既存のインストール環境をパッチをあてることなく保護することのできる、権威フォワーダーも実装されている。OpenDNS は OpenDNS のユーザーとその再帰リゾルバがチャンネルを保護できる、DNSCrypt[12] をリリースしている。Jan Mojžíš は DNSCurve と、DNS, SSH, HTTP, SMTP など一般のサービスへの CurveCP 保護を実装したソフトウェアスイート、curveprotect[13] をリリースしている。