ダスティン・トランメルから​サトシへ​:いく​つか​思う​ところ — 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 として配布された