DNSCurve

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

デプロイ

[編集]

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日閲覧。

外部リンク

[編集]