Tor(The Onion Router)は、インターネット上で匿名性を確保するための強力なツールとして知られていますが、その信頼性の根幹となっているのが「オープンソース」という特性です。
ソースコードが公開されているため、誰でも内部の動作を確認でき、セキュリティホールや バックドアがないことを検証できます。
この記事では、Torのソースコードについて、どこで入手できるのか、どのようなプログラミング言語で書かれているのか、どんなライセンスで公開されているのか、そして開発に参加する方法まで、詳しく解説します。
Torの内部構造に興味がある方、オープンソースプロジェクトへの貢献を考えている方は、ぜひ参考にしてください。
- Torがオープンソースである意義
- Torのソースコードの入手方法
- Torのプログラミング言語
- Torのライセンス
- Torのソースコード構造
- Torの仕様書(torspec)
- Torのソースコードをビルドする方法
- Torの開発に参加する方法
- Torのセキュリティ監査
- Torブラウザのソースコード
- Torに関連するその他のプロジェクト
- よくある質問
- Q1: Torのソースコードを見るだけでも違法ですか?
- Q2: ソースコードを改変して配布できますか?
- Q3: プログラミング初心者でもTorの開発に参加できますか?
- Q4: Torのソースコードに バックドアはありませんか?
- Q5: Torのソースコードはどのくらいの規模ですか?
- Q6: Rustで書かれたArtiはいつ完成しますか?
- Q7: Torのソースコードをビルドするのに何時間かかりますか?
- Q8: 商用製品にTorを組み込めますか?
- Q9: Torの開発に参加すると報酬はもらえますか?
- Q10: Torのソースコードを使って独自の匿名化ネットワークを作れますか?
- Q11: Torのソースコードは定期的に更新されますか?
- Q12: Torの脆弱性を発見したらどうすればいいですか?
- まとめ
Torがオープンソースである意義
Torがオープンソースソフトウェアであることには、重要な意味があります。
オープンソースとは
オープンソースソフトウェア(OSS)とは、ソースコードが公開され、誰でも自由に閲覧、使用、改変、再配布できるソフトウェアのことです。
オープンソースの特徴
- ソースコードが公開されている
- 無料で利用できる(多くの場合)
- 改変・再配布が可能
- コミュニティによる開発
- 透明性が高い
Torにおけるオープンソースの重要性
匿名化ツールにおいて、オープンソースであることは特に重要です。
1. 透明性の確保
- 内部の動作を誰でも確認できる
- 隠れた機能やバックドアがないことを検証可能
- 政府機関による操作の可能性を排除
実例:JAP事件
2003年、ドイツの匿名化プロジェクト「JAP」が、ドイツ政府からバックドアの組み込みを強制されました。
しかし、オープンソースコミュニティがソースコードの変更を発見し、この事実が明るみに出ました。
Torの開発者ロジャー・ディングルダインは、「もしTorに同様の要請があっても、オープンソースコミュニティが必ず発見する」と述べています。
2. セキュリティ監査
- 世界中の専門家による検証
- 脆弱性の早期発見
- 迅速なパッチ適用
3. 信頼性の向上
- 独立した第三者による検証
- 政府や企業に依存しない
- コミュニティによる継続的な改善
4. バックドアの不在
NSAのスノーデン文書によれば、「特定の状況下(脆弱性が見つかるか、ユーザーが設定を誤る場合)以外でTorユーザーの匿名性を破ることはできなかった」とされています。
これは、オープンソースであることがTorの信頼性を支えている証拠です。
非オープンソースの匿名化ツールとの比較
一部の匿名化ツールはオープンソースではありません。
例:Ultrasurf
- Windows用のプロキシシステム
- アメリカ政府から資金提供を受けている
- ソースコードは非公開
- 内部動作を検証できない
Torとは異なり、ソースコードが公開されていないため、バックドアの有無を確認できません。
Torのソースコードの入手方法
Torのソースコードは、複数の方法で入手できます。
公式リポジトリ:GitLab
Torプロジェクトは、2021年以降GitLabをメインのリポジトリとして使用しています。
GitLabのURL
- メインサイト:https://gitlab.torproject.org/
- Torコア:https://gitlab.torproject.org/tpo/core/tor
- Tor Browser:https://gitlab.torproject.org/tpo/applications/tor-browser
GitLabを使う理由
- 機能が豊富
- CI/CD機能の統合
- バグトラッキング機能
- GitHubより柔軟
GitHubのミラー
GitHubにも非公式のミラーリポジトリがあります。
GitHubのURL
- https://github.com/torproject/tor(非公式ミラー)
注意点
- GitHubはミラーです
- バグ報告やプルリクエストはGitLabに提出する必要がある
- GitHubのイシューやPRは受け付けていません
Gitを使ってクローンする
開発に参加する場合は、Gitでリポジトリをクローンします。
GitLabからクローン
git clone https://gitlab.torproject.org/tpo/core/tor.git
cd tor
GitHubからクローン(ミラー)
git clone https://github.com/torproject/tor.git
cd tor
ソースコードのダウンロード(Gitなし)
Gitを使わずにソースコードをダウンロードすることもできます。
ダウンロード方法
- GitLabのTorリポジトリにアクセス
- 「Download source code」ボタンをクリック
- zip形式またはtar.gz形式でダウンロード
公式アーカイブから入手
Tor Projectの公式アーカイブサイトからも入手できます。
アーカイブURL
- https://dist.torproject.org/
ここから、特定のバージョンのソースコードをダウンロードできます。
Torのプログラミング言語
Torは主にC言語で書かれていますが、一部で他の言語も使用されています。
メインの実装:C言語
Torのコア部分(通称「little-t-tor」)は、C言語で実装されています。
C言語が選ばれた理由
- 高速:低レベルな操作が可能
- 移植性:多くのOS(Linux、Windows、macOS、BSD)で動作
- メモリ効率:リソースを効率的に使用
- 成熟:長年の実績がある
C言語のバージョン
- C99標準に準拠
- 一部C11の機能も使用
新しい実装:Arti(Rust)
Tor Projectは、Rustで書かれた新しいTor実装「Arti」の開発を進めています。
Artiとは
- Rustで書かれたTorの再実装
- 2020年から開発開始
- まだ完全なクライアントではない(開発中)
Rustが選ばれた理由
- メモリ安全性:バッファオーバーフローなどの脆弱性を防ぐ
- 並行処理:データ競合を防ぐ
- モダン:現代的なプログラミング言語
ArtiのGitLab
- https://gitlab.torproject.org/tpo/core/arti
Artiは将来、C言語版のTorを置き換える可能性があります。
Tor Browser:JavaScript、C++、Rust
Tor Browserは、Mozilla Firefoxをベースにしています。
使用言語
- C++:Firefoxの主要部分
- Rust:Firefoxの一部(Servoプロジェクト)
- JavaScript:拡張機能、UIスクリプト
- Python:ビルドスクリプト
その他のコンポーネント
Torエコシステムには、様々な言語で書かれたツールがあります。
Python
- ディレクトリサーバー
- 統計ツール
- テストスクリプト
Shell Script
- ビルドスクリプト
- インストールスクリプト
HTML/CSS
- Webサイト
- ドキュメント
Torのライセンス
Torは、オープンソースライセンスの一種である「3-clause BSDライセンス」で配布されています。
3-clause BSDライセンスとは
BSDライセンスは、カリフォルニア大学バークレー校(UCB)で開発された、非常にシンプルで自由度の高いライセンスです。
3-clause BSDライセンスの条件
- ソースコード配布時:著作権表示、条件リスト、免責事項を含める
- バイナリ配布時:ドキュメントに著作権表示、条件リスト、免責事項を記載
- 宣伝での使用禁止:著作権者の名前を無断で使用して宣伝してはいけない
制限
- 元の開発者を自分だと偽ってはいけない
- 開発者を訴えてはいけない(ソフトウェアに問題があっても)
3-clause BSDライセンスの利点
1. 非常に寛容
- 商用利用が可能
- 改変が自由
- 再配布が自由
2. GPLとの違い
- GPL:改変したコードもGPLで公開する必要がある(コピーレフト)
- BSD:改変したコードを非公開にすることも可能
3. 企業フレンドリー
- 企業が商用製品に組み込みやすい
- ライセンス変更の心配が少ない
Torのライセンス表示
Torのソースコードには、LICENSEファイルが含まれています。
ライセンスファイルの内容(抜粋)
Tor is distributed under the "3-clause BSD" license, a commonly used
software license that means Tor is both free software and open source:
Copyright (c) 2001-2004, Roger Dingledine
Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
Copyright (c) 2007-2024, The Tor Project, Inc.
一部のコンポーネントの異なるライセンス
Torに含まれる一部のコンポーネントは、異なるライセンスで配布されています。
例
src/ext/mulodi4.c:University of Illinois “BSD-Like” license / MIT licensegetdelim.c:NetBSD Foundation license- ドキュメント:Creative Commons Attribution-ShareAlike 4.0
Torのソースコード構造
Torのソースコードは、複雑な構造を持っていますが、明確に整理されています。
ディレクトリ構造
Torのソースコードの主要なディレクトリ構造は以下の通りです。
主要ディレクトリ
tor/
├── src/ # ソースコード
│ ├── core/ # コア機能
│ ├── lib/ # ライブラリ
│ ├── feature/ # 機能別モジュール
│ ├── app/ # アプリケーション
│ └── tools/ # ツール
├── doc/ # ドキュメント
├── scripts/ # スクリプト
├── changes/ # 変更履歴
└── contrib/ # 貢献されたコード
src/ディレクトリの詳細
src/core/
- オニオンルーティングの中核
- 回線構築
- セル処理
src/lib/
- 独立したライブラリモジュール
- 暗号化
- ネットワーク処理
- データ構造
src/feature/
- ディレクトリサービス
- ブリッジ
- ヒドゥンサービス(.onionサイト)
- 統計
src/app/
- メイン関数
- 設定ファイル解析
モジュール化の取り組み
Torプロジェクトは、ソースコードをモジュール化する取り組みを進めています。
目標
- 循環依存をなくす
- 各モジュールの独立性を高める
- テストを容易にする
.may_includeファイル
- 各ディレクトリに配置
- そのディレクトリが使用できるヘッダーファイルを指定
- 循環依存を防ぐ
チェック方法
make check-includes
このコマンドで、循環依存がないか確認できます。
主要なファイル
README
- プロジェクトの概要
- ビルド方法
LICENSE
- ライセンス情報
ChangeLog
- バージョンごとの変更履歴
configure.ac
- ビルド設定(autotools)
Torの仕様書(torspec)
Torには、プロトコルの詳細を記述した仕様書があります。
torspecリポジトリ
Torの仕様書は、別のリポジトリで管理されています。
GitLab
- https://gitlab.torproject.org/tpo/core/torspec
GitHub(ミラー)
- https://github.com/torproject/torspec
主要な仕様書
tor-spec.txt
- Torプロトコルのコア仕様
- オニオンルーティングの詳細
- セルフォーマット
dir-spec.txt
- ディレクトリサービスの仕様
- ノード情報の配布方法
rend-spec.txt
- ヒドゥンサービス(.onionサイト)の仕様
- ランデブーポイント
- 導入ポイント
control-spec.txt
- 制御プロトコル
- Torプロセスとの通信方法
pt-spec.txt
- プラガブルトランスポートの仕様
- 検閲回避技術
path-spec.txt
- 経路選択アルゴリズム
- ノードの選び方
guard-spec.txt
- ガードノードの仕様
- 長期的に使用する入口ノード
仕様書の目的
1. 独立した実装を可能にする
- ソースコードを読まずにTorを実装できる
- 仕様書だけで完全な情報を提供
2. 互換性の確保
- 異なる実装間での互換性
- プロトコルの明確化
3. セキュリティ監査
- プロトコルレベルでの検証
- 脆弱性の発見
Torのソースコードをビルドする方法
Torのソースコードから実行ファイルをビルドする方法を解説します。
必要な環境
対応OS
- Linux(Ubuntu、Debian、Fedora、Arch Linuxなど)
- macOS
- BSD(FreeBSD、OpenBSD、NetBSD)
- Windows(WSLまたはCygwin)
必要なツール
- GCC または Clang(Cコンパイラ)
- make
- autoconf
- automake
- libtool
- Git
必要なライブラリ
Torのビルドには、いくつかのライブラリが必要です。
必須ライブラリ
- OpenSSL:暗号化
- libevent:非同期イベント処理
- zlib:圧縮
推奨ライブラリ
- libzstd:高速圧縮
- liblzma:LZMA圧縮
- libsystemd:systemd統合(Linux)
Ubuntuでのビルド手順
1. 依存関係のインストール
sudo apt update
sudo apt install build-essential automake autoconf libtool \
libssl-dev libevent-dev zlib1g-dev libzstd-dev liblzma-dev
2. ソースコードの入手
git clone https://gitlab.torproject.org/tpo/core/tor.git
cd tor
3. ビルドシステムの生成
./autogen.sh
4. 設定
./configure --prefix=/opt/tor
5. ビルド
make -j$(nproc)
-j$(nproc)オプションで、CPUコア数に応じた並列ビルドを行います。
6. テストの実行(オプション)
make check
7. インストール
sudo make install
macOSでのビルド手順
1. Homebrewのインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. 依存関係のインストール
brew install openssl libevent automake autoconf libtool zstd xz
3. ソースコードの入手とビルド
git clone https://gitlab.torproject.org/tpo/core/tor.git
cd tor
./autogen.sh
./configure --with-openssl-dir=$(brew --prefix openssl)
make -j$(sysctl -n hw.ncpu)
sudo make install
カスタマイズオプション
./configureコマンドには、様々なオプションがあります。
主要なオプション
--prefix=PATH:インストール先(デフォルト:/usr/local)--enable-zstd:zstd圧縮を有効化--enable-lzma:LZMA圧縮を有効化--enable-systemd:systemd統合を有効化(Linux)--disable-asciidoc:ドキュメント生成を無効化
例:すべての機能を有効化
./configure --prefix=/opt/tor --enable-zstd --enable-lzma --enable-systemd
ビルド後の確認
ビルドが成功したかを確認します。
バージョン確認
./src/app/tor --version
出力例
Tor version 0.4.8.10 (git-xxxxx)
Torの開発に参加する方法
Torはオープンソースプロジェクトなので、誰でも開発に参加できます。
開発者コミュニティ
メーリングリスト
- tor-dev:開発者向けの議論
- 購読:https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-dev
IRCチャンネル
- #tor-dev:OFTC(Open and Free Technology Community)ネットワーク
- リアルタイムでの議論
週次パッチワークショップ
- 毎週開催
- パッチのレビューと議論
初心者向けのタスク
初めて貢献する人向けのタスクがあります。
“easy”タグのチケット
- 初心者でも取り組みやすい
- GitLabのイシュートラッカーで見つけられる
“lorax”タグのチケット
- 比較的大きな機能
- 開発者が手が回っていないもの
探し方
- https://gitlab.torproject.org/ にアクセス
- Issues(イシュー)セクションを開く
- ラベルで絞り込み
開発の流れ
1. アイデアの相談
- メーリングリストやIRCで相談
- 既存のイシューを確認
2. ソースコードのフォーク
- GitLabでフォーク
- 自分のブランチで作業
3. コーディング
- コーディング規約に従う(doc/HACKING参照)
- ユニットテストを書く
4. コミット
- 小さな変更ごとにコミット
- わかりやすいコミットメッセージ
5. マージリクエスト(プルリクエスト)
- GitLabでマージリクエストを作成
- レビューを待つ
6. レビューと修正
- レビュアーからのフィードバックに対応
- 必要に応じて修正
7. マージ
- レビュアーが承認
- メインブランチにマージ
コーディング規約
Torには明確なコーディング規約があります。
主要なルール
- インデント:スペース2つ
- 行の長さ:80文字以内
- 命名規則:スネークケース(
my_function_name) - コメント:明確で簡潔に
- エラーハンドリング:適切なエラー処理
詳細
doc/HACKING/CodingStandards.mdに記載
テストの重要性
新しいコードには、必ずユニットテストを書く必要があります。
テストの種類
- ユニットテスト:個別の関数のテスト
- 統合テスト:複数のモジュールの連携テスト
テストの実行
make check
テストの書き方
doc/WritingTests.txtを参照
大きな変更の提案
大規模な変更やプロトコル変更には、提案書(Proposal)が必要です。
提案書の書き方
proposals/ディレクトリを確認- 既存の提案書を参考にする
- 新しい提案書を作成
- メーリングリストで議論
提案書のフォーマット
- タイトル
- 概要
- 動機
- 設計
- セキュリティへの影響
- 互換性
コントリビューションのベストプラクティス
1. 小さく始める
- 最初は小さなバグ修正から
- 徐々に大きなタスクに挑戦
2. コミュニティとコミュニケーション
- 質問は遠慮なく
- レビューを積極的に依頼
3. ドキュメントも重要
- コードだけでなくドキュメントも改善
- 誤字脱字の修正も立派な貢献
4. 継続的な学習
- Torのアーキテクチャを学ぶ
- セキュリティの知識を深める
Torのセキュリティ監査
Torのソースコードは、定期的にセキュリティ監査を受けています。
オープンソースによる自然な監査
オープンソースであることで、世界中の専門家が常にコードを監視しています。
貢献者
- セキュリティ研究者
- 暗号学者
- 大学の研究機関
- ボランティア開発者
公式のセキュリティ監査
Tor Projectは、外部の専門機関に依頼して、定期的にセキュリティ監査を実施しています。
監査の内容
- ソースコードレビュー
- 脆弱性の発見
- セキュリティ改善の提案
静的解析ツール
Torの開発では、複数の静的解析ツールを使用しています。
使用ツール
- Coverity:静的コード解析
- Clang Static Analyzer:コード品質チェック
- AddressSanitizer:メモリエラー検出
脆弱性の報告
脆弱性を発見した場合の報告方法があります。
報告先
- セキュリティチーム:security@torproject.org
- 機密情報:PGP暗号化を使用
報告すべき内容
- 脆弱性の詳細
- 再現手順
- 影響範囲
Torブラウザのソースコード
Tor Browserのソースコードも公開されています。
Tor Browserのベース
Tor Browserは、Mozilla Firefox ESR(Extended Support Release)をベースにしています。
Firefox ESRとは
- 長期サポート版Firefox
- 企業や組織向け
- セキュリティ更新が長期間提供される
Tor Browserのソースコード
GitLab
- https://gitlab.torproject.org/tpo/applications/tor-browser
構成
- Firefoxのソースコード
- Torネットワーク接続機能
- プライバシー保護機能
- HTTPS Everywhere
- NoScript
Tor Browser Buildプロジェクト
Tor Browserのビルドシステムは、別のプロジェクトで管理されています。
tor-browser-build
- https://gitlab.torproject.org/tpo/applications/tor-browser-build
このプロジェクトには、Tor Browserをビルドするためのスクリプトが含まれています。
Tor Browserのビルド
Tor Browserのビルドは複雑です。
公式のビルドスクリプトを使用することを推奨します。
必要な環境
- Linux(Ubuntu推奨)
- 大量のディスクスペース(50GB以上)
- 長いビルド時間(数時間)
Torに関連するその他のプロジェクト
Torエコシステムには、様々な関連プロジェクトがあります。
Onion Browser(iOS)
iOS向けのTorブラウザです。
特徴
- オープンソース
- App Storeで入手可能
- 開発者:Mike Tigas
ソースコード
- GitHub:https://github.com/OnionBrowser/OnionBrowser
Orbot(Android)
Android向けのTorクライアントです。
特徴
- Guardian Projectとの共同開発
- 他のアプリをTor経由で接続可能
ソースコード
- GitLab:https://gitlab.com/guardianproject/orbot
Tails(OS)
Torを標準搭載したLinuxディストリビューションです。
特徴
- USBメモリから起動
- すべての通信がTor経由
- 2024年9月にTor Projectの一部に
ソースコード
- GitLab:https://gitlab.tails.boum.org/tails/tails
OnionBalance
負荷分散のためのツールです。
特徴
- 複数のTorヒドゥンサービスを1つのアドレスに
- 高可用性
ソースコード
- GitLab:https://gitlab.torproject.org/tpo/onion-services/onionbalance
よくある質問
Q1: Torのソースコードを見るだけでも違法ですか?
A: いいえ、違法ではありません。
Torのソースコードは完全に合法的なオープンソースソフトウェアです。
誰でも自由に閲覧、学習、使用できます。
Q2: ソースコードを改変して配布できますか?
A: はい、できます。
Torは3-clause BSDライセンスで配布されているため、改変と再配布が自由です。
ただし、ライセンス条項(著作権表示など)を守る必要があります。
Q3: プログラミング初心者でもTorの開発に参加できますか?
A: はい、参加できます。
ただし、C言語の基本的な知識は必要です。
初心者向けの「easy」タグが付いたイシューから始めることをおすすめします。
Q4: Torのソースコードに バックドアはありませんか?
A: オープンソースであるため、世界中の専門家が常に監視しています。
現在まで、意図的なバックドアは発見されていません。
もしバックドアがあれば、コミュニティがすぐに発見するでしょう。
Q5: Torのソースコードはどのくらいの規模ですか?
A: 正確な行数は変動しますが、Torコア(C言語部分)は約30万行のコードです。
これにはコメントやテストコードも含まれます。
Q6: Rustで書かれたArtiはいつ完成しますか?
A: Artiはまだ開発中で、完全なクライアントではありません。
完成時期は明確に発表されていませんが、数年かかる見込みです。
Q7: Torのソースコードをビルドするのに何時間かかりますか?
A: 環境にもよりますが、Torコア自体は10~30分程度です。
ただし、Tor Browserをビルドする場合は、数時間かかります。
Q8: 商用製品にTorを組み込めますか?
A: はい、できます。
3-clause BSDライセンスは商用利用を許可しています。
ただし、ライセンス条項を守る必要があります。
Q9: Torの開発に参加すると報酬はもらえますか?
A: ボランティアベースです。
ただし、Tor Projectは時々有給のポジションを募集しています。
また、Google Summer of CodeやOutreachy経由でインターンシップがあります。
Q10: Torのソースコードを使って独自の匿名化ネットワークを作れますか?
A: 技術的には可能ですが、推奨されません。
Torの強みは、大規模なネットワークと長年の実績です。
独自のネットワークは、ユーザーが少ないため匿名性が低くなります。
Q11: Torのソースコードは定期的に更新されますか?
A: はい、活発に開発されています。
通常、数ヶ月ごとに新しい安定版がリリースされます。
開発版は常に更新されています。
Q12: Torの脆弱性を発見したらどうすればいいですか?
A: Tor Projectのセキュリティチーム(security@torproject.org)に報告してください。
機密情報の場合は、PGP暗号化を使用することを推奨します。
まとめ
Torのソースコードは、オープンソースの匿名化ネットワークとして、透明性と信頼性を確保するための重要な要素です。
誰でも自由にソースコードを閲覧、改変、再配布でき、世界中の専門家によって監視されています。
Torのソースコードの主なポイント
- オープンソース:3-clause BSDライセンスで配布
- 主要言語:C言語(Rust版のArtiも開発中)
- 入手方法:GitLab(メイン)、GitHub(ミラー)
- 開発参加:誰でも貢献可能、初心者向けタスクあり
- セキュリティ:定期的な監査、静的解析ツール使用
Torエコシステム
- Torコア(little-t-tor):ネットワークの中核
- Tor Browser:Firefoxベースのブラウザ
- Arti:Rust版Tor(開発中)
- 関連プロジェクト:Onion Browser、Orbot、Tails など
開発に参加する方法
- GitLabでソースコードを入手
- ビルド環境を構築
- 初心者向けイシューを探す
- コーディング規約に従って開発
- マージリクエストを提出
- レビューとフィードバック
Torのオープンソースという特性は、単なる技術的な選択ではなく、プライバシーと自由を守るための哲学的な選択です。
ソースコードが公開されていることで、バックドアや隠れた機能がないことを誰もが検証でき、世界中のコミュニティによって継続的に改善されています。
プログラミングの知識がある方は、ぜひTorの開発に参加してみてください。
小さなバグ修正から始めて、徐々に大きな機能開発に挑戦することができます。
あなたの貢献が、世界中の人々のプライバシーと自由を守ることにつながります。

コメント