DNSCurve

DNSCurve とは、Domain Name System (DNS) をセキュアにした新しいプロトコルである。ダニエル・バーンスタインにより設計された。楕円曲線暗号を利用したサーバー認証と通信路暗号化により、DNS スプーフィングを防止する。 DNSCurve は、Salsa20 が使う鍵の構築に Curve25519 楕円曲線暗号を使い、リゾルバと権威サーバーとの間の 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 サービスに比べて以下のような利点があるとされる。 秘匿性—通常の DNS 要求と応答は暗号化されておらず、攻撃者にもブロードキャストされてしまう。 整合性—通常の DNS にも保護はあるが、忍耐強くスニッフィングを続ける攻撃者は DNS レコードを偽造することができる。これを DNSCurve の暗号学的認証により防ぐことができる。 可用性—通常の DNS はスニッフィング攻撃者が偽造パケットを秒間数個送ることによる DoS 攻撃 に対する保護を全くもたない。SMTP, HTTP, HTTPS も DoS に脆弱なのに対して、DNSCurve は偽造された DNS パケットを検知して破棄するため、若干の保護効果がある。 DNSCurve の利用する256 ビット楕円曲線暗号は NIST の推算によれば3072ビット RSA とおおよそ同等とされる。ECRYPT も同様の同等性を報告している。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." という。 Adam Langley の Curve25519 を紹介する個人的ウェブサイトへの投稿によると、DNSCurve の利用する楕円曲線暗号が試されたものの中で最も高速であったという。アメリカ国家安全保障局 (NSA) によれば、楕円曲線暗号は RSA 暗号やディフィー・ヘルマン鍵共有が幾何的に鍵サイズを増加させるのに対して、大きく性能を向上させている。 DNSCurve は dnscache への Matthew Dempsky によるパッチにより初めてサポートされた。Dempsky の GitHub リポジトリには、Python DNS ルックアップツールと C で書かれたフォワーダーが含まれている。Adam Langley も GitHub リポジトリを持っている。 CurveDNS と呼ばれる DNS 管理者が既存のインストール環境をパッチをあてることなく保護することのできる、権威フォワーダーも実装されている。OpenDNS は OpenDNS のユーザーとその再帰リゾルバがチャンネルを保護できる、DNSCrypt をリリースしている。Jan Mojžíš は DNSCurve と、DNS, SSH, HTTP, SMTP など一般のサービスへの CurveCP 保護を実装したソフトウェアスイート、curveprotect をリリースしている。 5千万のユーザーを抱える OpenDNS は、再帰リゾルバに対して DNSCurve をサポートすることを2010年2月23日にアナウンスした。その後、2011年12月6日に OpenDNS は DNSCrypt と呼ばれる新ツールをアナウンスした。DNSCrypt は OpenDNS とユーザーとの間のチャンネルを保護する。同規模の DNS 権威プロバイダで DNSCurve をデプロイしているものはまだない。 DNSSEC 楕円曲線暗号 OpenDNS ^ D. J. Bernstein. “Curve25519: high-speed elliptic-curve cryptography”. 30 January 2013閲覧。 ^ “Introduction to DNSCurve” (22 June 2009). 16 March 2016閲覧。 ^ "NIST Recommendations (2011)". 2020年8月14日閲覧。 ^ "ECRYPT II Yearly Report on Algorithms and Keysizes (2010-2011)" (PDF). 2020年8月14日閲覧。 ^ "Adam Langley on curve25519 security". 2020年8月14日閲覧。 ^ "Adam Langley: What a difference a prime makes". 2020年8月14日閲覧。 ^ “The Case for Elliptic Curve Cryptography”. NSA. January 17, 2009時点のオリジナルよりアーカイブ。January 17, 2009閲覧。 ^ "DNSCurve patch for dnscache". 2020年8月14日閲覧。 ^ "Matthew Dempsky's DNSCurve repo on GitHub". 2020年8月14日閲覧。 ^ "Adam Langley's DNSCurve repo". 2020年8月14日閲覧。 ^ "CurveDNS: A DNSCurve Forwarding Name Server". 2020年8月14日閲覧。 ^ "DNSCrypt: Securing a critical piece of Internet infrastructure". 2020年8月14日閲覧。 ^ "curveprotect, a complex collection of tools for protecting wide range of internet services". 2020年8月14日閲覧。 ^ "OpenDNS adopts DNSCurve". 2020年8月14日閲覧。 ^ "OpenDNS unveils DNSCrypt". 2020年8月14日閲覧。 ^ “net/dnscrypt-proxy: dnscrypt-proxy-1.4.3 – secure communications between a DNS client and resolver”. OpenBSD ports (2015年1月6日). 2015年2月9日閲覧。 公式ウェブサイト DNSCurve.io: a community for DNSCurve users High-speed cryptography and DNSCurve: 著者による2009年9月に行われたプレゼンテーション DNSCurve: Usable security for DNS: 著者による2008年8月に行われたプレゼンテーション draft-dempsky-dnscurve-01 "DNSCurve: Link-Level Security for the Domain Name System" : M. Dempsky (OpenDNS) が IETF に送った提案標準（2010年2月に更新) OpenDNS adopts DNSCurve: OpenDNS 公式ブログエントリー CurveDNS: DNSCurve 転送ネームサーバー NaCl: Networking and Cryptography library