Dive into Darkweb

※この記事は「[AltPlus Advent Calendar 2016](http://qiita.com/advent-calendar/2016/altplus)」の2日目の記事です。


みなさんこんにちは。

この記事では一時期巷で騒がれていたダークウェブ周りのお話をします。

## 書いてあること
- ダークウェブについて
- ダークウェブへのアクセス方法
- ダークウェブへの公開方法

## 書いてないこと
- ダークウェブというものの危険性

## TL;DR: 

- ダークウェブって響きが厨二っぽくてかっこいい。
- ダークウェブへの公開は簡単。怖くないよ。

## ダークウェブって何？

そもそもいきなりダークウェブという単語がでてきましたがこれは一体なんなのでしょうか？

![darkweb.png](https://qiita-image-store.s3.amazonaws.com/0/104844/d5417960-ed5e-23e7-99fb-679b8c5c94f7.png)


よく言われている分類としては上の図のようなもので、ウェブというものは３つのカテゴリに分類することができます。

### 1. サーフェスウェブ

表層ウェブとかVisibleウェブとも言われていて、Googleなどの検索エンジンにインデックスされる事を許可しているWebサイトのことをいいます。
    
Qiitaとかブログとか、そういうオープンな普通のウェブです。

Netcraftによると10億を超えるサイトが存在しているようです。すごいですね。
cf: http://news.mynavi.jp/news/2016/03/22/265/
    

### 2. ディープウェブ

サーフェスウェブと対比して、深層ウェブとかInvisibleウェブと言われています。
サイト側がnoindexなどを指定してクローラーに対してインデックスを拒否していたり、ログイン認証などによってクローラーが巡回できないようなWebサイトのことをいいます。

クローラーが巡回できないので、検索エンジンでは検索できないということになります。
    
しかし一般的なインターネット上には公開されているので、リンクを知っていれば
普通のブラウザで直接アクセスすることはできます。
    

### 3. ダークウェブ

サーフェスウェブ、ディープウェブとは違い、一般的なインターネット上には公開されておらず、
Torによってのみアクセス可能なWebサイトのことをいいます。

中には違法な物の売買など犯罪につながるものも多くあり、よく危険と言われていますが
そういった危険性は様々なところでレポートされていますのでこの記事では割愛します。
    
ダークとか闇とか、アングラな感じがして厨二心がくすぐられますね。

## Torってなに？

上のダークウェブの説明に出てきたTorとは一体なんでしょうか。

Tor(トーア)とは、P2P技術を使ってTCP/IPでの通信経路の匿名性を高めるための
プロトコルとそのプロトコルを実装したブラウザアプリケーションの両方を指します。

名前の由来は、元々の開発プロジェクトが「The Onion Router」という名前で、
その頭文字から来ているとされています。

Torプロトコルを安全に使うためには以下の6点に気をつけよ、と公式にアドバイスされています[^1]。

1. Torブラウザを使いましょう。

    Torプロトコルが担保するのは通信の匿名性だけです。
    なにかあってもコンピューターは守らないので、安全な初期設定がされているTorブラウザの
    利用を推奨します。
    
    Torブラウザのダウンロードは https://www.torproject.org/ からです。
    英語ですがダウンロードするだけなので簡単なものですね。

2. Tor経由でtorrentは利用しないようにしましょう。
    やめましょう。

3. ブラウザプラグイン入れないでね。
    FlashとかRealPlayerとかQuicktimeとかもろもろブロックしてるけど、プラグイン入れて
    使えるようにしたら危ないのでやめましょう。

4. HTTPSのWebサイトを利用するようにしましょう。
    HTTPでアクセスすると、通信の内容が傍受される危険性があるのでHTTPSにしましょう。

5. ダウンロードしたファイルはTorがオンラインになっている時には開かないでね。
    ファイルに何か仕込まれてて、本当のIPアドレスバレたりするかもなので開くならTorはオフにしてから。

6. ブリッジ使いましょう。
    身元をより隠蔽して安全に利用するためにはTor bridge relayを使うといいです。
    https://www.torproject.org/docs/bridges.html.en


## Torを使ってダークウェブに触れる

Torを使うと、前述のダークウェブ(Torで公開されているもの)にアクセスすることができます。
Torで公開されているWebサイトのURLは、一般的な.comや.netなどのドメインとは異なり、
.onionというドメインを利用します。

### 例) Tor上に公開されているWiki
http://zqktlwi4fecvo6ri.onion/wiki/Tor
このようなURLをTorで開くと、以下のようなサービスが表示されます。
![tor_hidden_wiki.png](https://qiita-image-store.s3.amazonaws.com/0/104844/d02e258f-6e21-b02e-200f-ffaf02d519ff.png)
※試しに今みている普通のブラウザで上記URLにアクセスしてみてください。つながらない事がわかります[^2]。

### しかし速度は。。。
実際にTorを利用してみるとわかると思いますが、とっても遅いです。
どのくらい遅いかというと、私の環境で計測したら下りが240Kbpsです。

![tor_speed.png](https://qiita-image-store.s3.amazonaws.com/0/104844/61088f4a-e1f5-ec73-c2a9-df9f0e4a0c0b.png)


なんかタイムスリップした感ありますね。
画像が多く使われているサイトを見ようものならかなりの苦痛です。

## ダークウェブを公開してみる

とても遅いインターネット環境で、初めてTorネットワーク上にあるWebサイト(ホームページ?)にアクセスすることができました。

みなさんの中にもホームページ全盛期に、手打ちのHTMLやホームページビルダーなどで
「ようこそ◯◯の部屋へ」とか「◯人目のお客様です！キリ番！」とか公開したことがある方もいるのではないでしょうか。

私もそんな一人でいまや枕に顔を埋めてじたばたしたくなるような事をたくさん書いてました。

閑話休題。

実際にTorを使ってみると、そんなノスタルジックな気持ちになりながら、このダークウェブに
再び自分のWebサイトを公開したい！という感情に駆られます。

ということで、今日の本題であるTorを使ってダークウェブに最短で公開する方法をまとめます。

## まずは自分のWebサイトを用意する。

といってもあれこれ準備するのは大変なので3分間クッキング方式ですでに用意してあります。

https://github.com/cimadai/nginx-hello-darkweb

このリポジトリをcloneして、docker-compose up -dを実行するとnginxが8080番ポートで立ち上がります。
※もし8080以外で起動したければ、`docker-compose.yml`の中身を書き換えて下さい。

```bash:手順
git clone https://github.com/cimadai/nginx-hello-darkweb.git
cd nginx-hello-darkweb
docker-compose up -d
```
※docker-compose入ってない！という場合は[こちら](http://docs.docker.jp/compose/)を参考に。

そして普段使っているブラウザで http://localhost:8080 にアクセスすると
Hello Darkweb!という文字が見えると思います。

しかしこれはまだ単純にnginxでサーバーを立てて、ローカルにある静的ファイルを読んでいる
だけですので次にTor経由で公開してみます。

## Tor経由で先程のWebサイトを公開する

Tor経由で公開するWebサイトの事を、Hidden Serviceと言い、
https://www.torproject.org/docs/tor-hidden-service.html.en
に詳細が書いてありますので詳しく知りたい方はリンク先を参照してください。

Hidden Serviceを公開するに当たって必要な前提は２つです。

1. ローカルにWebサーバーが起動していること。
Webサーバーは何でもいいです。ポートも8080でなくてもいいです。

2. Torブラウザが起動していること。
※Torブラウザの最新版(本記事執筆時は6.0.6です。)をインストールしてください。

きちんと上から順にやっていれば問題ないですね。

### Hidden Service用の設定をする

1.　まず、今回はHTTPSを使わないので、TorのHTTPS Everywhereの設定は無効にします。
　　※本当はこれはよくないので自分で本気で公開するときはhttpsにしてください。
　　　　![tor_https_everywhere.png](https://qiita-image-store.s3.amazonaws.com/0/104844/2f41177a-03f2-2e74-c23f-70839da204cb.png)
2. そしてTorブラウザを終了させます。
3. 設定ファイルを修正します。
　　※私はMacを利用しているので、Macでの設定方法で解説していますが、Windowsでも同様に設定できると思います。
　　「~/Library/Application Support/TorBrowser-Data/Tor/torrc」を開き、以下を追記します。

```text:torrc
HiddenServiceDir /path/to/tordir/
HiddenServicePort 80 127.0.0.1:8080
```

それぞれの意味は以下の通りです。

|項目|意味|
|:--|:--|
| HiddenServiceDir | 自動的に割り当てられたホスト名と、自ノードの秘密鍵が格納されます。 |
| HiddenServicePort | Tor上に公開するポートと、ローカル側のWebサーバのペアです。 |

**/path/to/tordir/**  の部分は適当なパスに置き換えてください。
パスは、絶対パスで指定する必要があり、権限は**700**にしておいてください。755とかだと起動に失敗します。

変更を保存して、TorBrowserを再起動しましょう。エラーが出なければ準備完了です。

正しく起動していれば、HiddenServiceDirのディレクトリに
1.　hostname
2.　private_key
の2つのファイルが生成されていると思います。

このhostnameの中身を控えておいてください。

### いざダークウェブデビュー

さて万事準備が整いましたので、いよいよTorを使ってダークウェブへの初公開の時です。

Torブラウザのアドレス欄に先程控えておいたhostnameの文字列を入力しましょう。

![tor_hello_darkweb.png](https://qiita-image-store.s3.amazonaws.com/0/104844/25dc042e-6989-b58d-39d1-a669826921c5.png)


いかがでしたでしょうか？きちんと表示されましたか？

90年代の趣を感じられる仕上がりになったのでは無いでしょうか。

## まとめ

ダークウェブは危険だ、怖い！と言われているのを見ると、
2chは怖い、危険だと言っていた(る？)時期を思い出して懐かしい気持ちになります。

◯◯という技術を使っているから危険！という論調をよく目にしますが、
それらを悪用する人が悪いのであって技術が悪いのではないです。

どのような技術であっても脊髄反射で危険と避けるのではなく、
きちんと調べて適切に利用していくようにしましょう。

------
[^1]: https://www.torproject.org/download/download-easy.html.en#warning
[^2]: まさか日常的にTorを使っていてAdventCalendarをみている人は居ないですよね。