Torのサーキット生成ルール
はじめに
Torがサーキットを生成する際にどのようなルールで各ノードを選択するのか気になったので調べた.torspecの2.2項(Path selection and constraints)に書いてあった.
選択のルール
1.同じパス上で同じノードを2度選択することはない.
2.同じファミリの中で複数のノードを選択することはない.
3./16のサブネットの中で複数のノードを選択することはない.
4.有効でないノード(Validフラグを持たないノード)または、実行されていないノード(Runningフラグを持たないノード)を選択することはない.
5.Torの接続に使用する入口ノードはGuardノードでなければならない.
2について、各ノードは"family"というエントリを持っていて、例えば2つのTorノードがfamilyエントリにお互いのノードを持っている場合、それらのノードは同一のfamilyといえる.
4について、これは設定(torrc)によって変更が可能.デフォルトの設定では、non-validなノードに関してはrendezvousノードとmiddleノードの選択において許可されている.
5について、Guardノードとは長期間運用の実績と適切な帯域を持つノードのこと(Guardフラグを持つ).入口ノードはTor利用者のグローバルIPアドレスを直接見ることができるため、信頼性の高いノード(=Guardノード)が求められる.
Guard・Exitノードに関しては帯域幅の割合と利用者が選択している位置(torrcのEntryNodes項目およびExitNodes項目)に応じて重み付けがなされ、決定される.さらに、次のルールのうち1つ以上を考慮してサーキットを生成する場合がある.
1.全てのIntroductionサーキットとRendezvousサーキットの生成には安定したノード(Stableフラグを持つノード)が選択されるべきである.
2.長期間の接続が予想される場合には安定したノードが選択されるべきである.
3.DNS(DNS over Tor)を使用する場合には、torrcのExitPolicyが"reject *:*"でないExitノードが必要である.
4.DNSの逆引きにはeventdnsに対応したバージョンのTorが必要である(Tor 0.1.2.1-alpha-dev以降)
5.全ての接続には、接続先アドレスとポートをポリシーによってrejectしていないExitノードが必要である.
1について、IntroductionサーキットとRendezvousサーキットはHidden Serviceにアクセスする際に生成されるサーキットでRendezvousノードは利用者とHidden Serviceのサーバの中間地点にあたる.詳細に関してはこちら(Tor : Onion Service Protocol)を参照のこと.
2について、利用者が長期間接続するかどうかは接続時のリクエストポートを見ることによって判断していて、以下のポートの場合は安定ノードが選択されるようである.
21, 22, 706, 1863, 5050,5190, 5222, 5223, 6667, 6697, 8300
おわりに
他にもBad Exitが有効なExitノードは選択されないようになっている.Torの実際のソースコードを読んで確認したわけではないので今後時間があれば確認・検証していきたい所存.