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

ダスティン・トランメルから​サトシへ​:いく​つか​思う​ところ — Send-to-IPへの​中間者攻撃 (2009-01-15)

ビットコインクライアントが自分自身に送金する可能性を考慮していて、 取引ログにそれを示す適切な記述を入れているのが見られて嬉しい (:

これをやった主な理由は、取引中のネットワークトラフィックをパケット キャプチャして解析するためだ。そちらのパケット構造を知らないので、 パケットからは平文の情報がわずかに見えるだけで、ほとんどは取引詳細に 表示されているような名前やコメントだ。‘version’ や ‘reply’ のような 文字列も少しだけ流れているが、残りはかなり判読不能だ。

取引について考えるうちに、IPアドレスかビットコインアドレス以外に 識別可能な情報がまったく関わっていないことに気付いた。IPによる 取引の場合、ビットコインクライアントは接続した相手のIPが本当に 意図した受取人だと信じているように見える。中間者攻撃を仕掛けて 入金を盗むのはかなり簡単だ。たとえば、同僚と私が同じLAN上で ワークステーションを使っている状況を考えてみてくれ。私が悪意を 持ってローカルブロードキャストドメインでARPポイズニングを行い、 彼のワークステーション宛のすべてのトラフィックを私の ワークステーションを中継させて流すこともできる。私たちはどちらも勤勉な社員ではなく、今流行りのMMORPGをプレイし、ビットコインで ゲーム内アイテムを売買するのが好きだとしよう。私はTCPポート8333への着信を監視し、それらの接続を彼のワークステーションに 渡さずに私の方で終端させてしまえる。やや込み入っているが、 要点を示している。このタイプの攻撃は、取引する2者間の経路上の どのホップでも実行できる。私が「Big ISP USA」の悪い管理者 だったら、まあ、言いたいことは分かるだろう。

意図した受取人のアドレスとしてネットワークアドレス(IP)の使用を 許可しないことを勧める。常にビットコインアドレスを要求し、 そちらで取引するほうが少しは安全だと思う。正しく理解できているか 分からないが、ビットコインアドレスによる取引というのは、取引を ブロックチェーンに計算して入れて、受取人にそれを「発見」してもらう だけ、という理解で合っているかな? 代替案として、ネットワークノードに 解決サービスを持たせるのも考えられる。あるビットコインアドレスの ネットワークアドレスをノード間で問い合わせ、対象ノードがオンライン であれば、そのアドレスについてネットワーク全体の合意が形成された うえで送信側のビットコインアプリケーションが直接接続する、という形だ。 ビットコインアドレスはノードの鍵に紐付いているので、送信側ノードが そのビットコインアドレスの所有を証明する方法を作ることもできる はずで、そうでなければ取引を進めない、とすることもできるはずだ。 少なくとも、IPによる宛先指定方式を残すつもりなら、両者間で共有した 秘密のハッシュを照合する仕組み、つまり中間者が知り得ない情報の 照合の仕組みを入れることを勧める。とはいえ、もう暗号の仕組みが 入っていて鍵も生成されているのだから、それを利用するほうが はるかに強固な解になる。

それとも、私が考えすぎなのかな? ネットワーク接続は 単に取引の即時通知やコメントなどの文脈情報を送るためだけのもの なのか? ビットコインアプリケーションは受取人の公開鍵などを 取得していると述べていたし、単純な通知に必要な以上のやり取りが ネットワークトラフィックに見えるんだよね。

近いうちにまた。

— Dustin D. Trammell dtrammell@dustintrammell.com http://www.dustintrammell.com

原典の外部ソース

https://en.bitcoin.it/wiki/Source:Trammell/Nakamoto_emails
2013年11月にダスティン・トランメルが原文ママで公開。完全なmboxアーカイブはトランメルのブログ (https://blog.dustintrammell.com/i-am-not-satoshi/) からSatoshi_Nakamoto.zipとして配布された。時刻は、メールのDateヘッダー(米国中部時間、UTC−6)をUTCに直したもの