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]。

セキュリティ

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] をリリースしている。

デプロイ

5千万のユーザーを抱える OpenDNS は、再帰リゾルバに対して DNSCurve をサポートすることを2010年2月23日にアナウンスした[14]。その後、2011年12月6日に OpenDNS は DNSCrypt と呼ばれる新ツールをアナウンスした[15]。DNSCrypt は OpenDNS とユーザーとの間のチャンネルを保護する[16]。同規模の DNS 権威プロバイダで DNSCurve をデプロイしているものはまだない。

関連項目

脚注

  1. ↑ D. J. Bernstein. “Curve25519: high-speed elliptic-curve cryptography”. 30 January 2013閲覧。
  2. ↑ “Introduction to DNSCurve” (22 June 2009). 16 March 2016閲覧。
  3. ↑ "NIST Recommendations (2011)". 2020年8月14日閲覧。
  4. ↑ "ECRYPT II Yearly Report on Algorithms and Keysizes (2010-2011)" (PDF). 2020年8月14日閲覧。
  5. ↑ "Adam Langley on curve25519 security". 2020年8月14日閲覧。
  6. ↑ "Adam Langley: What a difference a prime makes". 2020年8月14日閲覧。
  7. ↑ “The Case for Elliptic Curve Cryptography”. NSA. January 17, 2009時点のオリジナルよりアーカイブ。January 17, 2009閲覧。
  8. ↑ "DNSCurve patch for dnscache". 2020年8月14日閲覧。
  9. ↑ "Matthew Dempsky's DNSCurve repo on GitHub". 2020年8月14日閲覧。
  10. ↑ "Adam Langley's DNSCurve repo". 2020年8月14日閲覧。
  11. ↑ "CurveDNS: A DNSCurve Forwarding Name Server". 2020年8月14日閲覧。
  12. ↑ "DNSCrypt: Securing a critical piece of Internet infrastructure". 2020年8月14日閲覧。
  13. ↑ "curveprotect, a complex collection of tools for protecting wide range of internet services". 2020年8月14日閲覧。
  14. ↑ "OpenDNS adopts DNSCurve". 2020年8月14日閲覧。
  15. ↑ "OpenDNS unveils DNSCrypt". 2020年8月14日閲覧。
  16. ↑ “net/dnscrypt-proxy: dnscrypt-proxy-1.4.3 – secure communications between a DNS client and resolver”. OpenBSD ports (2015年1月6日). 2015年2月9日閲覧。

外部リンク

⌬ Phoenix Mesh CID: 未登録 IPFS未登録 📡 0ピア N=1 CRITICAL PQS C54