Torプロジェクト、Rustへの移行を進行中
(itsfoss.com)- Torネットワークの中核コードが、従来のC言語からRustベースのArtiへ移行しつつある
- 既存のCコードには、バッファオーバーフロー、use-after-free、メモリ破損などの脆弱性が存在する
- 新バージョンArti 1.8.0は、回路タイムアウトの再設計によって予測可能なパターンを排除し、追跡リスクを低減する
- onionサービス運用者がCベースのTorからArtiへ鍵を自動移行できる新コマンドが追加された
- 今回の移行は、セキュリティと安定性の向上に向けたTorプロジェクトの重要な技術的前進である
Arti 1.8.0の主な変更点
-
今回のリリースの中核は、**回路タイムアウトの再設計(circuit timeout rework)**の適用
- 従来のTorの*Circuit Dirty Timeout(CDT)*は、単一タイマーで回路の終了時点を制御していた
- この方式は予測しやすく、トラフィック監視者がパターンを識別できる可能性があった
- Arti 1.8.0では、使用量ベースのタイムアウトと個別タイマーを導入し、回路が新しい接続を受け入れるときやアイドル状態のときにランダムな時点で終了するよう変更された
- これにより、**フィンガープリンティング(fingerprinting)**のリスクを低減する
-
新たに**実験的コマンド
arti hsc ctor-migrate**を追加- onionサービス運用者は、**制限付き検索鍵(restricted discovery keys)をCベースのTorからArtiのキーストア(keystore)**へ移行できる
- これらの鍵はクライアント認証に使用され、新コマンドは手動作業なしの自動移行をサポートする
-
追加の改善点
- ルーティングアーキテクチャ、プロトコル実装、ディレクトリキャッシュ対応、ORポートリスナー設定など、多数の内部コンポーネントを改善
- 詳細な変更内容は、Arti 1.8.0の公式変更ログで確認できる
Rust移行の背景
- Torネットワークは2000年代初頭からC言語ベースで運用されてきた
- しかしCのコードベースでは、メモリ安全性の問題によりセキュリティ脆弱性が継続的に発生していた
- そのためTorプロジェクトは、Rustのメモリ安全性を活用したArti再実装プロジェクトを進めている
- ArtiはTorの機能をRustで再実装し、セキュリティ・安定性・保守性の強化を目指している
技術的意義
- Rustへの移行は、Torの匿名性保証の仕組みを根本から強化する方向にある
- 予測可能な回路動作の排除と鍵管理の自動化は、ユーザープライバシー保護水準の向上に寄与する
- Artiの継続的な更新は、CベースTorの段階的置き換えを加速させる兆候と評価されている
2件のコメント
Arti 1.0.0 リリース - Rustで書かれたTor実装
Hacker News の意見
最近 EFF の Cover Your Tracks を試してみたところ、Tor ブラウザで JS を無効化した状態だけが完全にフィンガープリンティング耐性ありと判定された。
JS を有効にした Tor でさえ「部分的にのみ」耐性があると評価され、Firefox は JS を無効にしても良い結果が出なかった。かなり怖い結果なので、他の人の実験結果も気になる
逆に fingerprinting.com/demo のように持続性だけをテストするツールにも問題がある。
本当の危険信号は、両方のテストで失敗する場合だ
ただし Tor ブラウザは確かに目立つものの、このテストだけで Tor ユーザー同士の フィンガープリント識別が容易だとは言い切れない
セキュリティレベルを上げるほどむしろ識別ビットが増え、JS を完全に無効化すると再び減る。
つまり、JS の無効化が最も高い匿名性を提供する
Mozilla が Firefox の Rust 化(oxidizing) をもっと進めてくれていたらよかったのにと思う。Rust エコシステムにもプラスだったはずで残念
もし Rust が Mozilla の「秘密兵器」のままだったら、かえって Rust の普及は遅れていたかもしれない
Rust を使うことが彼らの問題解決に役立つなら、合理的な選択だと思う。
言語はプロジェクトやチーム、問題に応じて使い分ける道具だ
これは Rust 信者の主張ではなく、医師やパイロットがチェックリストを拒んでいた時代と同じような抵抗の問題だ
UI では素早い反復と GC が重要で、性能の重要度は低い。Rust で UI を書くとメンテナンス地獄になりかねない
Tor は セキュリティと性能の両方が重要なマルチスレッド環境だからだ。
Zig も代替にはなり得るが、まだ成熟していない。Tigerbeetle のように 決定的動作(determinism) を重視するアプローチも興味深い
Tor プロジェクトへの最大の不満は 速度低下だ。Rust に移したからといって速くなるとは思えない
今回の Rust 移行は Zcash Community Grants の支援で行われた。暗号資産 R&D でも良い結果が出ることはある
ただし暗号資産は尿よりひどいかもしれない、という冗談交じりの比喩も添えていた
Tor の exit ノード運用時の法的リスクが心配だ。ホワイトリスト方式でのみ許可する方法はあるのだろうか
可能なら 組織名義での登録が推奨され、より安全に支援したいなら relay の運用 のほうがよい
あるいは guard/middle relay を回せばネットワークに大きく貢献できる
ただし一部の中国 ASN はブロックすべきだ。偽のダウントラフィックが多い
Rust 導入はまるで 古い要塞の木の柱を鋼鉄に置き換える過程のようだ。
Tor の C ベースコードは何十年にもわたるセキュリティ上の妥協と性能上の痕跡を抱えているため、段階的な Rust 化が最も現実的な安全確保の方法だ。
核心は「全面的な書き直し」ではなく、メモリ非安全領域の縮小にある。
リスクの高いパース処理、暗号化、プロトコル境界部分だけを Rust に移せば、Tor はさらに堅牢になるだろう。
今後 Rust ベースの pluggable transport や ハイブリッドランタイムへ発展するかもしれない点も興味深い
実はこの決定は最近の話ではない。Tor は 2020 年に Rust ベースの Arti プロジェクトを始め、2022 年に Arti 1.0 を発表している。
C コードベースを段階的にリファクタリングするのは難しいと判断し、Rust の 開発速度・移植性・コントリビューター流入に満足しているという。
最近でも Arti changelog によれば活発に開発が続いている
たとえばメッセージングアプリが別途 Tor デーモンなしでネットワークを利用できるようになる。こちらのほうが大きな変化だと思う
Tor は単なる概念ではなく、プロトコル(onion routing)とネットワーク、そして参照実装をすべて含む名前だ。
Tor を Fil-C でコンパイルすればメモリ安全性をタダで得られるのでは、という冗談交じりの提案があった