ビットコインのプライバシーはなぜ議論されるのか?その手法について検証|BTCプライバシー編

2019年6月8日から9日にかけて、アムステルダムでBreaking Bitcoinというカンファレンスが行われました。 本コラムは、公開された動画や書きおこしをもとに、その発表内容を追いかけ、Bitcoinのセキュリティに関する取り組みの最先端を知ろうという試みです。

発表内容を日本語で、かつ実際の事例などを交えて解説することで、少しでも皆様がBitcoinの仕組みや最新の研究について詳しくなるための一助になれることを願います。 今回は初回ということで、Chris Belcher氏Breaking Bitcoin Privacyという講演の前半部分を取り上げます。

前回の記事はこちら
本コラムにもつながるビットコインのセキュリティについて解説しています。ビットコインの保有に対してアドバイスをさせていただきましたので、参考になれば幸いです。 ビットコインを壊すことは可能なのか? プロトコル破壊について検証|ビットコイン

そもそも、プライバシーはなぜ議論されるのか

Bitcoinでは、トランザクションはすべて公開され、誰でも確認できる状態になっています。 分散化を標榜して作成されたBitcoinは、基本的にすべてがオープンになっているのが正しい状態とも言えます。 なのになぜ、プライバシーがたびたび議論にのぼるのでしょうか。

そのひとつの答えは、お金にとって重要な特性であるファンジビリティ、すなわち代替可能性です。 例えば、同じお金ということで、日本円を考えてみましょう。日本政府が発行する千円札は、誰が使っても同じ価値です。もし過去に盗まれたことがあったとしても、その価値が変わることはありません。

Bitcoinも同じことが言えます。盗まれたBitcoinをそれ以上取引させないためにブラックリストを管理する行為は一見正しいように見えますが、ほとんどの場合リストは集中化されるため、本来の目的である分散化とは離れていき、相容れないものになってしまう可能性があります。

トランザクションから何が分かるか

トランザクションが誰からも見えてしまうという性質が、問題になる場合もあります。

あなたがBitcoinで給与を受け取ったとして、そのトランザクションが世界中で見える状態になっていたら、どうなるでしょうか。 あるいは、企業の会計情報がBitcoinの取引情報から簡単に推測できてしまったら、どんな影響があるでしょうか。 さらに現在の脅威として、ChainalysisやEllipticといった、ビットコインの取引を監視するような会社も出てきています。

トランザクションが公開されていても、所有者が誰か分からなければ問題にならない、という意見もあるかもしれません。 しかし、トランザクションには様々な情報が含まれます。時間、金額、移動先、トランザクションを処理したノード、その資金がどこから来たのか、等です。 こういった情報を総合的に組み合わせて分析することは「ウォレットクラスタリング」と呼ばれていますが、プライバシーを守ることは遥かに難しいのです。

さらに、Bitcoinのトランザクションのうち約4割は、過去に使われたウォレットアドレスが使われているという報告もあります。 アドレスの再利用はプライバシーに大きな影響を与えます。大きな金額でなければさほど影響がないとはいえ、例えばデポジットアドレスをずっと使いまわしている場合、取引所への入金も追跡できてしまうかもしれません。

こういった問題を避けるため、「アドレス」という呼び方をやめるという提案もされています。「Bitcoin領収書ID」のようにすれば、ユーザーの意識は少しは変わるかもしれません。

共通入力所有者ヒューリスティックスとコインジョイン

共通入力所有者ヒューリスティックス(Common-input-ownership heuristic)とは、複数の入力と出力があるとき(例えば3つの入力と2つの出力としましょう)、この入力群は、同じ所有者であるとみなすことができるというものです

Bitcoinはお金として考えたとき、割り切れなければなりません。簡単に言えば、ちょうどよい金額を送るために、複数のアドレスを組み合わせて送金することになるということです。これは、アドレスを使いまわさないようにしていても、いわば芋づる式に、簡単にアドレスの所有者を推測できてしまうということです。

共通入力所有者ヒューリスティックス(Common-input-ownership heuristic)
https://en.bitcoin.it/wiki/Common-input-ownership_heuristic

そこで、Bitcoinでプライバシーを改善する仕組みとして、「コインジョイン」があります。 たくさんの人々が集まり、トランザクションを混ぜてしまうことで追跡を困難にしてしまおう、という考えです。

コインジョインには大きく分けて2種類があります。等出力コインジョイン(equal-output coinjoin)と、ピアがそれぞれに支払いを行うペイジョイン(payjoin、またはpay-to-end-point、P2EP)です。

等出力コインジョイン(equal-output coinjoin):https://en.bitcoin.it/wiki/Common-input-ownership_heuristic

等出力コインジョインは比較的シンプルで、複数のアドレスからの送金を混ぜ、分割し、分かりにくくします。多数のウォレットが参加した場合、追跡が難しくなる効果が期待できますが、仕組み上、金額の分割単位が固定されるため、それがコインジョインであるということが簡単にわかってしまいます。

コインジョイン、つまりミキシングサービスを利用すると、ハッキングによる資金洗浄などに巻き込まれた場合、ブラックリストに掲載されてしまうなどのリスクも想定されます。

一方、ペイジョインは送金側だけでなく、受け取り側もコインジョインに参加し、送金した金額をもわかりにくくする仕組みです。BIP79として提案されています。

例として、送金したいアリスのアドレスA,B、受け取り側ボブのアドレスCを考えてみましょう。ここでは、ボブに0.1BTCを送金するとします。もともと、共通入力所有者ヒューリスティックスの問題は、アリスがボブのアドレスに対し、二つのアドレスを入力として送金した場合、簡単にAの所有者とBの所有者が同じだと推測できてしまうことでした。

入力

A(0.08BTC)

B(0.05BTC)

出力

A(0.03BTC)

C(+0.1BTC)

※出力のAはお釣り

非常に雑な実装という前提はありますが、この場合はAがお釣りを受け取っているため、AとBの所有者は同じだと簡単に推定できてしまいます。

ペイジョインでは、受け取り側も入力に参加し、金額を混ぜてしまいます。ちょっと複雑にするために受け取り側のアドレスDも足してみましょう。前回と同じようにアリスは0.1BTCを支払い、ボブはアドレスCとDで0.1BTCを受け取りました。

入力

A(0.08 BTC)

B(0.05 BTC)

C(1.50 BTC)

D(0.10 BTC)

出力

A(0.03 BTC)

C(1.00 BTC)

D(0.70 BTC)

これによるメリットは、A,B,C,Dのアドレスの所有者が混ざっているため、共通入力所有者ヒューリスティックスの性質で所有者を特定できなくなるということです。加えて、内部的にUTXOをまとめやすくなり、受け取り側で入力が細分化されることを防ぐ効果もあります。これは大規模な事業者などで有利とされています。

そして最後の一番大きな要素は、一種のコインジョインであるにも関わらず、これがコインジョインであると誰も断定できないということです。

なお、講演では実装には触れられていませんが、簡単に調べた範囲ではSamurai WalletのStowawayやJoinmarketで実装が行われているようです。

まとめ

ここまでプライバシーについて言及をしてきましたが、あくまで問題の可能性を議論しているのであり、ユーザーから見て、必ずしもこういった問題が起こる、というものではありません。また、コインジョインが必ず必要という結論が出ているわけでもありません。

大切なのは、プライバシーを守りつつ、公開する情報が選択できるべき、ということです。

次回は、Chris Belcher氏の講演について、後半を見ていきたいと思います。

プライバシーとセキュリティはまさにトレードオフ!双方の開発の最前線を紹介

次回記事では、Chris Belcher氏講演の後半の解説になります。現在、ビットコインのプライバシー問題についてどこまで議論されているのか最新情報をお伝えします。

コメントしてBTCを貰おう