Torの基本を理解する

目次

はじめに

Torとは何か、Torを構成する技術について学んでいく

Tor(The Onion Router)とは

Tor とは 匿名通信技術の一つ。匿名通信技術とは、接続経路を秘匿し、サーバーなどにアクセスする際に匿名化を実現する通信技術のこと。

TCP/IP通信の接続経路を匿名化する。UDPには非対応。

Torの歴史

1990年代、インターネットのセキュリティの欠如と追跡・監視される可能性が明らかとなった。

1995年、米国海軍研究所(NRL)は、ネットワークが監視されていたとしても通信をやりとりしている人が分からないような通信方法を模索し、「オニオンルーティング」の原型となるプロトタイプを作成。

1997年、国防高騰研究計画局(DARPA)が出資。

2000年初頭、マサチューセッツ工科大学(MIT)卒の Roger Dingledine, Paul Syverson, Nick Mathewson が NRL のプロジェクト開発にジョイン。彼らのプロジェクトは他のオニオンルーティングプロジェクトと区別するためにTor(The Onion Routingの略)と名付けられた。

2002年10月、Torのコードはオープンソフトウェアライセンスでリリースされた。これはTorが分散型ネットワークに依存しており、様々な利害関係を持つ団体との信頼を前提としたネットワークが必要であったため。

2004年、電子フロンティア財団(EFF)が出資。

2006年、Torの開発維持のため 501(c)(3)の非営利団体 Tor Project, Inc. が設立。

2007年、政府によるインターネットの検閲やファイアウォールなどを回避するためTorネットワークのブリッジの開発が開始。

2008年、技術に精通していない人々がTorを利用可能とするためにTor Browserの開発が始まった。

名前の由来

  • The Onion Router の名前の由来は通信内容を「あたかも玉ねぎの皮のように、暗号化を積み重ねる」という特徴からきている

The Onion Router

Torの機能

Tor は主に2つの機能が備わっている

インターネットのサービスに匿名で接続するための Tor秘匿通信

インターネットから秘匿されたサービスを利用するための Onion Service

Tor秘匿通信

  • クライアントから目的のサーバーまでの通信の接続経路を秘匿する技術。
  • クライアントがTorの外にある一般のサーバーへ匿名で通信を行う。クライアントのみIPアドレスが秘匿される。

About Tor Traffic

Torクラウド内では3つの役割のサーバーを経由する。入口のエントリーガード、出口のイグジットリレー、中間のミドルリレーがそれぞれランダムに選ばれ、通信経路が構築される。

これらTorサーキットの中継ノード間では通信内容は多重に暗号化され、各中継ノードは通信ログを残さない取り決めとなっている。

通信内容は各中継ノードの暗号鍵を用いて、多重に暗号をかけてTorサーキットに送信する。中継ノードは自身が持つ鍵で復号化を行い、次の中継ノードへ渡す。3つめの中継ノードで復号化されはじめて暗号化前の状態となり、Webサーバーに伝達される。

このため、秘匿通信の機能はクライアントと目的のサーバーまでの通信内容の暗号化は担保しません。HTTPのような平文のプロトコルである場合、イグジットリレー及びサーバーまでの通信経路で傍受が可能です。安全に通信する場合はHTTPSのようなプロトコルであれば問題ありません。

The Onion Routing detail

Onion Service

Torサーキット内に構築された秘匿サーバーで、Tor経由でしかアクセスできない。クライアントと秘匿サーバーの両方のIPアドレスが秘匿される。秘匿サーバーへのアクセスにはTorのランデブーポイントを利用する。

以下にクライアントが秘匿サーバにアクセスするまでの大まかな流れを見ていく。

step 1

秘匿サーバは、Tor cloudからランダムにリレーを選択し、回路の構築と公開鍵を渡し導入ポイントとして機能するよう依頼する。このリレーとの接続は直接回線ではなくTorサーキットで構築され、秘匿サーバーのIPアドレスを知ることを困難にする。

step 2

次に秘匿サーバは、その公開鍵と導入ポイントのセットの概要を含む記述子を作成し、秘密鍵で著名する。その記述子を分散ハッシュテーブルにアップロードする。この記述子は XYZ.onion を要求するクライアントによって発見される。XYZは公開鍵に由来する16文字の英数字となっている。

step 3

秘匿サーバに接続したいクライアントは Onion address (XYZ)を知る必要がある。(ネットか人から教えてもらう)

その後、クライアントは分散ハッシュテーブルから XYZ.onion 記述子をダウンロードすることで秘匿サーバの公開鍵と導入ポイントのセットを知ることができる。

クライアントはランダムに選ばれた別のリレーに回線を作り、ワンタイムシークレットを伝えてランデブーポイントとして機能するよう依頼する。

step 4

次にクライアントはランデブーポイントのアドレスとワンタイムシークレットを含む導入メッセージを作成し、公開鍵で暗号化する。この導入メッセージを 導入ポイントの一つに送り秘匿サーバに届けるよう要求する。

導入メッセージの送信もTorサーキットを通じて行われるのでメッセージの送信元IPの特定を困難にします。

step 5

秘匿サーバはクライアントの導入メッセージを復号化し、ランデブーポイントのアドレスとワンタイムシークレットを取得した後、ランデブーポイントに回線を構築し、ワンタイムシークレットを送信する。

step 6

ランデブーポイントは秘匿サーバとの接続が確立されたことをクライアントに通知する。その後、クライアントと秘匿サーバはランデブーポイントを介してエンドツーエンドで暗号化された通信を行う。

一般的にはクライアントと秘匿サーバの完全な接続には6つのリレーを介する。クライアントが3つのリレー(3つ目はランデブーポイント)を選び、残りの3つが秘匿サーバが選んだものである。

導入ポイントを介して通信しない理由の一つは、1つのリレーが特定の秘匿サーバを担当しているように見せないためだとか。