ビットコイン・インスティテュート

TORとI2P

11件のメッセージ BitcoinTalk madhatter, サトシ・ナカモト, The Madhatter, BitcoinFX, riX, fergalish 2010年1月16日 — 2010年4月27日
madhatter 2010年1月16日23:22 UTC

こんにちは、

また一つアイデアを思いついた。

TORとI2Pのシードを持てるようにできたらとても良いと思う。例えば、TORネットワーク内の.onionアドレスでBTを実行できる。クライアントがBTをTORに接続し、.onionアドレスからシードして接続ピアとして使用できるだろう。(I2Pについても同様で、.i2pサービスとして、その、BCを実行できる)

このような形でいくつかのノードをセットアップし、トンネル情報をこのフォーラムに投稿するかもしれない。すでに多くのI2PとTORのノードを運用しているので、BCを追加するのは非常に簡単だ。

システムのプライバシーを向上させるために、BCをTORおよびI2Pと互換性のあるものにするというアイデアを支持する。つまり、車輪を再発明する必要はないじゃないか。BCを強化するために使える数千ものミックスネットワークノードがすでに存在している。

よろしく!

しばらくそれについて考えていた。.onionアドレスのバックエンドサポートと接続機能を追加してから、そこから進めていきたいと思う。

.onionアドレスを作成するにはユーザーがいくつかの手順を踏まなければならないため、何かに使われている.onionアドレスはあまり多くない。TORを設定して.onionアドレスを生成し、TORを再起動し、生成されたアドレスで設定する。おそらくこれは意図的なもので、TORがファイル共有プログラムに十分に自動化された形で統合できないようにしているのだろう。

The Madhatter 2010年1月24日20:52 UTC

ああ、その点ではI2Pの方がずっと自動化しやすい。手動で.onionをいくつか設定して、シードとして使えるようにリストに投稿することはできる。最小限の手間でTorに結びつけられる、常時稼働のノードを持っているからな。

私は以前は熱心なTor推進派だったが、I2Pを使い始めてからは、いろいろな点でずっとずっと優れていることが分かった。最大の改善点はスピードだ。😉 ただ、Javaで書かれているのが残念だな。

サトシ・ナカモトの投稿(2010年1月20日22:05 UTC)

しばらくそれについて考えていた。.onionアドレスのバックエンドサポートと接続機能を追加してから、そこから進めていきたいと思う。

.onionアドレスを作成するにはユーザーがいくつかの手順を踏まなければならないため、何かに使われている.onionアドレスはあまり多くない。TORを設定して.onionアドレスを生成し、TORを再起動し、生成されたアドレスで設定する。おそらくこれは意図的なもので、TORがファイル共有プログラムに十分に自動化された形で統合できないようにしているのだろう。

BitcoinFX 2010年2月1日21:36 UTC

私もTorのリレーと出口ノードを運用していて、BitcoinとTorの統合について同じようなアイデアを持っていた。

Torは設定を正しく編集すれば非常に高速になりうる。遅いサーバーへの接続を制限し、可能な限り最速のノードだけを使えばいい。私はまた、「問題のある」インターネット国にあるノードもブロックするのが好きだ。そういう場所は接続も遅い傾向があり、全体的なプライバシーもいくぶん向上する。さらに、Unnamed、ididnteditheconfig、名前が気に入らないサーバー、不安定なサーバーもブロックしている。

この設定例はリレー/出口ノードではない個人利用にのみ適している。ただ、P2Pには最適だ 😊

AvoidDiskWrites 1

ExcludeNodes SlowServer,{sd},{pk},{tn},{ae},{by},{in},{bh},{th},{ye},{mm},{eg},{sg},{ma},{cu},{qa},{sa},{by},{md},{tm},{tr},{et},{jo},{sy},{om},{ir},{az},{uz},{kz},{kg},{af},{cn},{bd},{vn},{ng},{gh},{ro},{lb},{ru},{iq},{ly},{ve},{zw},{my},{mo},{kr},unnamed,ididnteditheconfig …etc.

StrictEntryNodes 1

EntryNodes (http://trunk.torstatus.kgprog.com/index.php?Fast=0から高速なエントリおよび権威サーバーを選択)

StrictExitNodes 1

ExitNodes (http://trunk.torstatus.kgprog.com/index.php?Fast=0から高速な出口のみを選択)

Torが自動的に回路を切り替える時間や、その他のカスタム設定を変更するのもいい考えだhttps://www.torproject.org/tor-manual.html

これが役に立つといいんだが 😉

BitcoinFX 2010年2月1日22:08 UTC

さて、Torを使って疑似匿名の暗号「Bitcoin銀行」実験をセットアップしてみた。😄

標準の9050 socksポート「デフォルト設定」を使えばほぼ成功した。つまり、Torを通じて他のBitcoinノードへの接続は確保できた。しかし、様々な問題と複数の警告メッセージに遭遇した。

「あなたのアプリケーション(ポートxxxxでsocks5を使用)はTorにIPアドレスのみを提供しています。DNS解決を自分で行うアプリケーションは情報を漏洩する可能性があります。代わりにSocks4A(例:polipoやsocat経由)の使用を検討してください。」

https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#IkeepseeingthesewarningsaboutSOCKSandDNSandinformationleaks.ShouldIworry.3F

最終的にPrivoxyとStunnel(そちらの方が慣れているので)を使って修正した。ただし、polipoとStunnelでも可能だ。

しかし、ポート8333(Bitcoinの「デフォルト」として想定通り)と6667(間違っていなければIRCポートだ!?)について、時折警告が出る。

Tor経由でBitcoinに接続すると、Torが [scrubbed]アドレスへの「欠落した」接続を確立しようとして、繰り返し出口ノードを変更する。最初はTorの出口がポート8333や6667をブロックしているためだと思ったが、ほとんどの場合そうではなかった!

Tor経由の他のP2Pアプリケーションは、接続できないIPアドレスを「無視」でき、「警告」なしに動作を続行できる。しかし、Bitcoinはブロックの漏れがないか確認するために、すべてのノードに接続を試みなければならない! したがって、Bitcoinノードが1つだけ稼働しているIP範囲がTor出口ノードをブロックしている場合、これは常にそうなるのだろうか?

これは多くの理由で問題がある。😕

riX 2010年2月2日22:36 UTC
BitcoinFXの投稿(2010年2月1日22:08 UTC)

「あなたのアプリケーション(ポートxxxxでsocks5を使用)はTorにIPアドレスのみを提供しています。DNS解決を自分で行うアプリケーションは情報を漏洩する可能性があります。代わりにSocks4A(例:polipoやsocat経由)の使用を検討してください。」

BitcoinはIPアドレスを使っていて、ホスト名は使っていないので、DNSは不要だ。TorはbitcoinがTorの内部DNSを通さずにIPに接続しようとしているため、通常のDNSを使っていると判断してしまう。

BitcoinFX

しかし、ポート8333(Bitcoinの「デフォルト」として想定通り)と6667(間違っていなければIRCポートだ!?)について、時折警告が出る。

Bitcoinはポート8333を使っている。Torのポート9050を通してリレーしているとしてもだ。😛 6667はIRCだ。Bitcoinはノードリストの配布にIRCサーバーを使っている。(Bitcoinを動かしている別のコンピューターのIPを知っていれば、-connectオプションを指定してノードリストの使用を回避できる。)

BitcoinFX

しかし、Bitcoinはブロックを見逃していないか確認するために全てのノードに接続しようとしなければならない!

いや、最長のブロックチェーンのコピーを持っている限り、たった1つのノードに接続されていれば十分だ。

BitcoinFX 2010年2月3日15:31 UTC

了解、ありがとうriX。

つまり、Bitcoinが少なくとも1つのノードに接続されれば、-connectオプションで6667の警告を排除できるわけだ。

Bitcoinは何らかの「ピア交換」やDHTを使っているのだろうか? これでもTorの「出口」警告が止まらず、そのためTorが接続のために新しい「出口」ノードを試行し続ける必要がある問題は解決しないようだ。(これはTorにとって問題であり、Bitcoinではないが 😉)「しかし、Bitcoinはブロックの漏れがないか確認するために、すべてのノードに接続を試みなければならないのでは?」というのは本当はそういう意味だった。表現が不正確だった。

I2Pの方がBitcoinユーザーの匿名性を高める実装としてはるかに簡単な解決策に思える。http://forum.i2p2.de/viewtopic.php?t=3946&sid=213e3cd998db98c4511675ecbba17af4

JonDonymもテストしている。http://anonymous-proxy-servers.net/ (有料サービスのみsocks対応!)ただし、paysafecardsを受け付けており、現在Bitcoinと交換で購入できる。😄

プロキシポート9050を使用する場合、IRCサーバーがすべてのTOR出口ノードをBANしているため、おそらく常に失敗するとわかっているので、IRCへの接続は1回だけ試行し、その後諦める。別のポートを使用している場合、通常の古いプロキシである可能性があると判断し、徐々に間隔を長くしながらIRCへの再試行を続ける。PolipoやPrivoxyは使用しないでほしい。これらはHTTPフィルターおよびキャッシュであり、変更を加えるとBitcoinのメッセージを破損する可能性がある。Bitcoinは再接続によって克服しようとしているのかもしれない。ポート9050を使用してほしい。

riXが言うように、「TorにはIPアドレスしか渡していない。DNSを行うアプリは…」という警告は心配する必要はない。BitcoinはプロキシモードではまったくDNSを使用しない。

BitcoinはTor経由でIRCに接続できないため、現在どのノードがオンラインかわからず、最近確認されたすべてのノードを試す必要がある。接続試行をできるだけ節約しようとするが、起動時に素早く接続し、切断された場合に素早く再接続したいという要望もある。最後に接続に成功してからの時間が長いほど、接続試行の頻度を下げるアルゴリズムを使用している。例えば、24時間前に確認されたノードの場合、接続試行の間隔は5時間だ。少なくとも2つの接続があれば、1週間以上前のものは試行せず、5つの接続があれば24時間以上前のものは試行しない。

riX 2010年2月4日12:41 UTC

負荷がそれほど高くないなら、IRCサーバーからのノードリストをhttpやftp経由でミラーリングするのも一案だろう。

fergalish 2010年4月20日14:26 UTC

torで隠しサービスをセットアップしようとしていて、torrcに以下を追加した:

HiddenServiceDir /some/directory HiddenServicePort 8333 127.0.0.1:8333

ただ、bitcoinを127.0.0.1:8333だけにバインドしたいのだが、「netstat -lp」を見るとすべてのインターフェースでリッスンしているようだ。これをどう指定すればいいのか、簡単には見つからなかった。

何か提案はある?

fergalish 2010年4月27日09:38 UTC

bitcoinをlocalhost:8333だけにバインドする方法について、誰か答えを知らない? それから、外部IPの代わりにtorlandアドレスをブロードキャストさせるにはどうすればいいだろうか?