Tor: 通信経路匿名化の仕組みと応用

# はじめに
はじめまして, _spxnです.

2020年になりましたが、改めてTorとは何かをできるだけ簡潔に書きました.
また、実際にTorを使う上での応用テクニックも書きました.

Twitter: [[at]_spxn](https://twitter.com/_spxn)

## Torとは?
Torは**通信経路の匿名化**を行うソフトウェアです. 

![Tor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/ceeb0d7b-0e1d-751f-5f09-c51c14f14672.png)

TorをインストールしたPCでインターネットを利用するとPCは**接続先から直接見えなくなります**. 

![Tor-hidden.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/9230fa80-b3c1-5a2d-8466-85b5601babf8.png)

## 仕組み
Torで通信経路を匿名化する仕組みは**Torネットワーク**と**暗号化**です.

### Torネットワーク
**Torネットワーク**と呼ばれるプロキシサーバによって構成されるネットワークがあります.
(実体はSOCKSプロキシ経由による多段プロキシになります.)

Torネットワーク内の一つ一つのプロキシはTor projectのボランティアによって構成された**Torのためのプロキシサーバ**(以下, **Torノード**)です. 

![Tor-network.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/1603fba2-c7ad-4338-f547-dd0075a4abf3.png)

PCが最初に接続するTorノードを**entry-node**(entry-guard), 接続先と接続を行うTorノードを**exit-node**といいます. 
(また, entry-nodeとexit-nodeの間の中継するTorノードは**middle-relay**または**middle-node**と呼ばれています.)

![Tor-nodes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/0e90d9f5-7aa9-896e-83ef-77a3094be323.png)

**ワンポイント！**
 - 経由するTorノードのリスト(選択を行う母集団の意)はTorネットワーク上にある[ディレクトリサーバ](https://metrics.torproject.org/rs.html#search/flag:authority)にアクセスして取得している.

### 暗号化

#### 暗号化される区間
PCからexit-nodeまで, データの中継を行う区間はすべてTorによって暗号化されています. 

![Tor-en.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/54af6038-e3c0-de0d-607c-d93ed1768336.png)

#### 暗号アルゴリズム
Torノード間の通信における暗号アルゴリズムは**AES(共通鍵暗号)**です.

各Torノードの持つ鍵を使ってノード間ごとに何重にも暗号化します. (この何重にも暗号を行う様が玉ねぎの皮のように見えることからThe Onion Router, Torの正式名称のもとになっています.)

![Tor-key.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/d4558d1d-dec8-d17d-2078-3017d7c2c908.png)

また, PC内のTorはTorサーキット(回線)の構築時に, create cellをentry-nodeに送り, DH(Diffie-Hellman鍵交換方式)によってセッション鍵を共有. 次に, relay extend cellをentry-nodeに送り, 次の経由Torノードのセッション鍵を共有...を繰り返して行います. 

![Tor-build.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/e729ff18-3a72-2a18-67d1-2dd5c1391d22.png)

## ダークウェブ
まず, ダークウェブとは**通常のPCではアクセスできないサイト群**を指します. 文献によって曖昧な解釈がされがちですが, Googleの検索に出てこないウェブ(Gmailの受信トレイや学術記事や論文など)をディープウェブ, Torなどの怪しいツールを用いてのみアクセス可能なウェブ(ないし, 犯罪や非合法サービスの提供を目的としたウェブ)をダークウェブと呼ぶのが一般的です. 

![dark-web.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/97c59f68-11f9-4093-db54-ca2094e662aa.png)

Torにおいて, ダークウェブを利用する際は[Tor Browser](https://www.torproject.org/download/)を使ってサイトにアクセスすることが推奨されています。また, ダークウェブを提供するサーバはTor経由でのアクセスであることを認証している(厳密には微妙にニュアンスが違うけど...)のでTorを利用していればアクセスできます.

![firefox.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/7a4a3a21-2757-33fc-16e3-bafe5236f7bd.png)

Firefoxでは「network.dna.blockDotOnion」というダークウェブである".onionドメイン"をブロックする設定がデフォルトで有効になっているのでこれをfalseにしなければアクセスできない仕様になっています.

**ワンポイント！**
 - Overlay-Networkとは, **特定のソフトウェアからのみ利用できるネットワーク**のこと. LINEやTikTokなどのアプリをインストールしないと使えないサービスをイメージしてもらえるとわかりやすい. TorもこのOverlay-Networkの一種で、他にはJXTA, I2P, Freenet, Gnutella, Torrentなどが挙げられる。
 - .onionドメインはTorネットワーク上に存在するサーバが提供するため, 通信の末端までTorによる暗号化が保証される.すごいね！

## Torの情報漏洩
Torは場合によって匿名化が損なわれる可能性があります. 

### entry-nodeに存在する弱み
entry-nodeはPCから直接通信を行うため, PCのIPアドレスを知っているケースが多いです.そのため, このentry-nodeを運営している組織または個人がPCのIPアドレスを漏洩または開示する可能性があります.

![entry-leak.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/bbce44f6-6d44-fd4b-bffe-2322f11006d3.png)

この問題は, Torネットワークへの接続の前段に信頼されたVPNを挟むことで解決されます.(項目: [VPNとの併用](#vpnとの併用)を参照)

### exit-nodeに存在する弱み
exit-nodeはTorネットワークの出口になるため, 復号化された通信データを知っているケースが多いです. そのため, このexit-nodeを運営している組織または個人がPCの通信データを漏洩または開示する可能性があります. 

![exit-leak.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/1b9cc5fe-7889-e354-3192-b33797091014.png)

この問題は, HTTPSなどの暗号化を用いるプロトコルの利用により解決されます.

### ブラウザに存在する弱み
アドオンとはFirefoxをはじめとしたブラウザにある機能を拡張するために外部から追加できる仕組みのことで, このアドオンがブラウザの通信とは別にTorを介さない(Torをバイパスした)通信を非同期に行うことがあり, これにより意図しない形でユーザの情報が漏洩することがあります.

![addon-leak.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/0765c4b3-1768-1cdb-4c0b-35d4d93e8b5b.png)

この問題は, ブラウザのアドオンの無効化, Tor以外の通信を遮断するOS(TailsOSなど)の利用, もしくはTor Browserへの乗り換えによって解決されます.

### DNSによる名前解決に存在する弱み
アプリケーションの中にはUDPを用いてDNS名前解決を行うものがあります. TCP専用のTorネットワークにおいて, このUDPに対応していない場合にTorのバイパスが生じることがあります.

![dns-leak.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/cdcc5dff-5ca3-768d-1e07-34438cb7ef2d.png)

この問題は, DNS名前解決をTCP上で行うか, Tor以外の通信を遮断するOS(TailsOSなど)の利用によって解決されます.

### つまりTorは脆弱?
いいえ.

Torのもつ匿名性自体はかなり強固なものです.
情報漏洩の多くはTorを使う**ユーザのリテラシー不足によって生じる**ということを念頭に入れるべきです. 

## VPNとの併用
Torを利用するにあたってその匿名性をより強固なものにしたい, Torネットワークに生IPでつなげるのが不安といった場合にVPNと併用してTorを使うという選択肢があります.

VPNと併用する方法は, Torネットワークに接続する前にVPNを中継する**Tor Over VPN**とTorネットワーク越しにVPNにアクセスし, TorをまるごとVPNで包括する**VPN Over Tor**に分けられます.

### Tor Over VPN
Torネットワークへの接続の前段にVPNを中継する「Tor Over VPN」.

![tor-over-vpn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/5487972c-08e8-e70f-c27a-41a7014ca55e.png)

![tor-over-vpn-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/73d1fd3b-318e-8148-8eb4-035cc9bb480f.png)
VPNが情報を開示しない限り接続先からはもちろん, Torネットワークのentry-nodeからもPCの存在が見えなくなり, Torの利用における匿名性の向上が期待できます.

#### メリット
 - PCのIPアドレスはVPNだけが把握している
 - ISPはPCがTorネットワークに接続していることを知らない

#### デメリット
 - 通信の遅延がTor単体に比べて大きくなる
 - IPアドレス匿名化の信頼性がVPNに依存する

### VPN Over Tor
Torネットワークの後段, Torネットワーク越しにVPNを中継する「VPN Over Tor」.
![vpn-over-tor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/7f58dcff-3574-2789-f0b6-224c7aebe0ae.png)

![vpn-over-tor2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206397/9f959ce8-9b32-34ea-3eb9-4f2e036af311.png)
VPNのサービス事業者がログを開示したとしてもTorのexit-nodeのIPアドレスが開示されるだけなので, PCのIPを知ることは不可能です.

#### メリット
 - Torネットワークのexit-nodeが通信データを見ることができない
 - 接続先はPCがTorネットワークを介していることを知らない(Tor禁止のサイトのアクセスが可能になる)

#### デメリット
 - 通信の遅延がTor単体に比べて大きくなる
 - ダークウェブにアクセスできない場合がある
 - Torネットワークのentry-nodeは依然としてPCのIPアドレスを知っている

### VPN Over [Tor Over VPN]
Torネットワークの前と後ろの両方にVPNを中継させる「VPN Over [Tor Over VPN]」.
理論的には匿名性が最も強化される方法ではあるが, 遅延があまりに大きく運用に関してそもそも実用的ではない(有料VPNを二種類契約する必要がある等)ため一般に使われることはありません.

##おわりに
Torについて, またその周辺の技術について拙いながらも情報をまとめました. 不明な点もしくは間違いなどがあればここのコメント欄に連絡していただけると記事をより良いものにしていく励みになります. 最後まで読んでくださりありがとうございます.

需要があればTor Over VPNやVPN Over Torの実際の構築のしかたも書こうかなと考えています.

## 参考文献
Wikipedia
 - [Tor (en)](https://en.wikipedia.org/wiki/Tor_(anonymity_network))
 - [Tor (ja)](https://ja.wikipedia.org/wiki/Tor)

YouTube
 - [How Tor Browser Protects Your Privacy and Identity Online](https://www.youtube.com/watch?v=JWII85UlzKw)
 - [How Tor Works - A ComputeCycle Deep Dive](https://www.youtube.com/watch?v=LAcGiLL4OZU)
 - [Onion Routing - Computerphile](https://www.youtube.com/watch?v=QRYzre4bf7I)