Onion Service は、Tor 経由でのみアクセス可能なサービスです。
Onion Service を運営すると、Tor Browser の追加のプライバシー上の利点とともに、HTTPS のすべてのセキュリティ機能がユーザーに提供されます。
Onion Service を使う理由
Onion Service は、ユーザーにさまざまなプライバシーとセキュリティの利点を提供します。
位置情報の秘匿
Onion Service の IP アドレスは保護されています。
Onion Service は TCP/IP 上のオーバーレイネットワークであるため、ある意味 IP アドレスは Onion Service にとって意味がなく、プロトコルでも使用されません。
エンドツーエンド認証
ユーザーが特定の Onion Service にアクセスすると、ユーザーは表示されているコンテンツがその特定の Onion Service からのみ提供されていることを知ります。
つまり、なりすましはできません。
通常、ウェブサイトにアクセスしたからといって、中間者が別の場所 (例: DNS 攻撃) に誘導しなかったことにはなりません。
エンドツーエンド暗号化
Onion Service のトラフィックは、クライアントから Onion ホストまで暗号化されます。
これは、強力な SSL/HTTPS を無料で手に入れるようなものです。
NAT の回避
ネットワークがフィルタリングされていて、ファイアウォールのポートを開くことができませんか?
これは、大学のキャンパス、オフィス、空港など、どこにいても起こる可能性があります。
Onion Service は NAT を突破するため、ポートを開く必要はありません。発信接続のみを確立します。
Onion Service プロトコル: 概要
では、これらの特性をすべて実現するには、どのようなプロトコルが必要なのでしょうか。
通常、ユーザーは IP アドレスに接続して終わりですが、IP アドレスを持たないウェブサイトに接続するにはどうすればいいのでしょうか。
特に、Onion Service のアドレスは以下のようになります:
vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion
これが不規則でランダムに見えるのは、Onion Service の ID公開鍵 だからです。
これが、上記のセキュリティ特性を実現できる理由の1つです。
Onion Serviceプロトコルは、Tor ネットワークを使用して、クライアントがサービスにアクセスし、Tor ネットワーク経由でサービスとのランデブーポイントを設定できるようにします。
これがどのように行われるか、以下でご説明します。
第1章: Onion Service が導入ポイントを設定する場合
地元の新聞社が、匿名の情報を受け取るために (SecureDrop を使って) Onion Service を立ち上げることにしたとします。
プロトコルの最初のステップとして、Onion Service は多数の Tor リレーに通信し、長期的な回線を確立することで 導入ポイント として機能するよう依頼します。
これらの回線は匿名化されているため、サーバーはサービスの位置情報を導入ポイントに知られることはありません。
Onion Service は、3ホップの Tor 回線で接続された3つの導入ポイントからのアクセスのみを許可することで、Tor ネットワークの背後に隠れて自身を保護します。

第2章: Onion Service が記述子を公開する場合
導入ポイントが設定されたので、クライアントがそれらを見つける方法を作成する必要があります。
このため、Onion Service は、導入ポイント (および「認証鍵」) のリストを含む Onion Service 記述子 を作成し、この記述子に Onion Service の _ID 秘密鍵_で署名します。
ここで使用する ID秘密鍵 は、Onion Service のアドレスにエンコードされている公開鍵のプライベート部分です。
Onion Service は、その署名付き記述子を Tor ネットワークの一部である 分散ハッシュテーブル にアップロードして、クライアントが取得できるようにします。
匿名化された Tor 回線を使用してアップロードするため、位置情報が明らかになることはありません。

第3章: クライアントが Onion Service を利用したい場合
例えば、SecureDrop を使って、匿名で地元の新聞社に脱税に関するデータを情報提供したいとします。
新聞社の SecureDrop の Onion アドレスは、公開されているウェブサイトや知り合いから入手することができます。

第4章: 実際にクライアントが Onion Service にアクセスする場合
これまでの手順はすべて、Onion Service がクライアントからアクセスできるように設定しただけです。
では、実際のクライアントがサービスにアクセスするところまで早送りしてみましょう。
この場合、クライアントは SecureDrop の Onion アドレスを知っており、それにアクセスしたいため、Tor Browser を使用してサービスに接続します。
次に必要なことは、クライアントがステップ 2の 分散ハッシュテーブル にアクセスして、SecureDrop の Onion Service の署名付き記述子をリクエストすることです。

第5章: クライアントが Onion アドレスの署名を検証する場合
クライアントは署名された記述子を受け取ると、Onion アドレスにエンコードされた公開鍵を使用して記述子の署名を検証します。
これにより、エンドツーエンド認証 のセキュリティ特性が提供されます。これは、記述子がその Onion Service によってのみ生成され、他の誰にも生成されないことが確実だからです。
また記述子の内部には、クライアントが SecureDrop の Onion Service にアクセスするための導入ポイントがあります。

第6章: クライアントがランデブーポイントを確立する場合
導入が行われる前に、クライアント (この場合はあなた) は Tor リレーを選択し、そのリレーへの回線を確立します。
クライアントはリレーにランデブーポイントになるようリクエストし、ランデブー手順の一部として使用される「ワンタイムシークレット」を渡します。

第7章: Onion Service がクライアントとランデブーを行う場合
導入ポイントは、ユーザーの詳細 (秘密の文字列とランデブーアドレス) を Onion Service に渡します。Onion Service は、ユーザーが信頼できるかどうかを判断するために複数の検証プロセスを実行します。

第8章: ランデブーポイントがクライアントシークレットを検証する場合
Onion Service は、(匿名化された回線を介して) ランデブーポイントに接続し、「ワンタイムシークレット」を送信します。
ランデブーポイントは、ユーザーとサービス (後者もユーザーから送信されるが、サービスを介してリレーされる) からの秘密の文字列が一致するかどうかの最後の検証を行います。
ランデブーポイントは、クライアントとサービスの双方向の (エンドツーエンドで暗号化された) メッセージを中継するだけです。

第9章: Onion Service がクライアントとランデブーを行う場合
一般に、クライアントと Onion Service 間の完全な接続は6つのリレーで構成されます。そのうちの3つはクライアントによって選択され (3番目はランデブーポイント) 、残りの3つは Onion Service によって選択されます。
これにより、この接続に対して 位置情報の秘匿 が可能になります。
最後にランデブーポイントを使用して、ユーザーと新聞社の SecureDrop Onion Service との間に Tor 回線が作成されます。

その他のリソース
これは、Tor Onion Service プロトコルの大まかな概要に過ぎません。
さらに詳しく知りたい方は、こちらもご覧ください。