現在のBitCoin実装はクレジットカードを使うよりは確かに良いが、多くの変更なしに強い匿名性が求められる環境で使おうとは思わない。
コインの履歴は公開されている。誰でもアドレスからアドレスへのBitCoinの流れを見ることができる。
これは「トランザクションチェーン」の特定のポイントが攻撃者に知られた場合に問題となる。下の図では、攻撃者がDoe氏のBitCoinの出所と送金先の両方を支配している。Doeは匿名ではない方法でコインを購入したため、容易に身元が特定される。彼の身元はトランザクションチェーン内のアドレスに紐付けられている。
より可能性の高いシナリオは、安全でないチャネル(メール、このフォーラムなど)で行われた取引からBitCoin残高が構成されることだ。特に不注意な場合、送金先がトランザクションチェーン内のすべてのアドレスをGoogleで検索するだけで良い。もしかすると、そのうちの一つがこのフォーラムのあなたの署名に含まれているかもしれない。
これをより困難にする方法を2つ考えた。1つ目は、ランダムに自分が生成した新しいアドレスにコインを送ることだ。コインはまだ自分の残高の一部だが、実際の人物ではなく自分自身にコインを送ったことを外部者が証明するのは不可能だ。しかし、トランザクションチェーンにはまだ自分の身元が含まれている。実際の調査では、捜査対象の人物を直接的または間接的に知っているか、あるいはその人物本人であるため、詳しい調査の対象となるだろう。
2つ目は、多くの異なる人々のコインを受け取り、混ぜ合わせ、同様の金額をそれらの人々のアドレスに送り返す外部サービスだ。ミキサーが誰がどのコインを受け取ったかのログを保持しなければ、いかなる調査もここで止まるはずだ。
最大限のセキュリティのために、BitCoinは複数の外部ミキサーを通じて自動的にコインを送る機能を持つべきだ。少なくとも1つがログを保持しない限り(そしてすべてが実際にコインを返してくれる限り)、これで完全に安全なはずだ。
これをすべて安全に調整するという問題がある。すべてのコインを少なくとも1回はミキシングしたいが、データベースで追跡するとplausible deniability(もっともらしい否認可能性)が損なわれる。おそらく最初は追跡する必要があるが、すべてのコインが安全になった後にデータベースを削除するべきだろう。
上記のチェーンの問題とは無関係に、BitCoinはネットワーク分析に対して脆弱だ。攻撃者がすべての受信・送信トラフィックを監視できる場合、どのトランザクションがあなたのものかを容易に把握できる。接続が暗号化されていない場合(現在がそうだ)、受信していないトランザクションをブロードキャストしたことが分かる。
暗号化されていても(Torや組み込みメカニズムを通じて)、攻撃者がBitCoinネットワークへの接続の両端を見ることができれば、どのトランザクションがあなたのものかを特定するのは不可能ではない。
Torを通じたトランザクションは以下のように特定できる:
- 攻撃者が自分が管理するIPアドレスでBitCoinネットワークを埋め尽くす。
- これらの「悪意のあるノード」がパケットを受信した時、攻撃者はあなたがパケットを送信した時刻に近い時刻に受信されたかどうかを確認する。これが数回発生すれば、攻撃者はあなたが誰かを知り、あなたのネットワークへの送信を見ることができる。
- あなたがトランザクションを送信する時、しばらくパケットを受信せずに送信した場合、攻撃者はそれがあなたのものだと分かる。
これを修正するために、BitCoinは暗号化、パディング(サイズベースの特定を防ぐため)、ダミーパケット、送信タイミングのランダム化を実装すべきだ。BitCoinがトランザクションをファイルにエクスポート・インポートできるようにすれば(インポートはトランザクションをネットワークにブロードキャストするが、エクスポートはしない)、plausible deniabilityも追加できるだろう。そうすれば、このファイルを別の方法(例えばUSBメモリ)で送信できる。
匿名性とは関係のない構造上の問題も2つ見つけた:
- ネットワーク層でネットワークが分断された場合(例えば大統領が「インターネットキルスイッチ」を発動した場合)、ブロックチェーンがフォークする。これは本当にまずい。
- 大量のIPアドレスを持つ攻撃者がネットワークを有害ノードで埋め尽くすのは非常に容易だ。これがBitCoinにどれほど悪影響を与えうるかは分からない。