皆さんはビットコインのプライバシーについて、ブロックチェーンに刻まれるトランザクション以外の部分についてどれくらい考えているでしょうか。

ランサムウェア、身代金の支払いやDMMビットコインのような流出事件など、犯罪者にもビットコインが利用されている関係で、捜査当局にツールを提供するChainalysis社のような企業は様々な手段でビットコイントランザクションの出どころを突き止めようとアンテナを張っています。

今日はあるビットコインユーザーが公開した「ビットコインノードのP2Pトラフィックデータ分析」から、いわゆる「スパイノード」の存在に触れ、トランザクションの出どころを解析する他のいくつかの手法(とプライバシーを守るために私達が取れる対策)を解説します。

引用元の記事はこちらです:

Bitcoin node P2P traffic analysis
I’d like to share some of my recent node traffic analyses in case someone else might find the method for making estimates estimates or some of the insights enabled by the estimates useful. I initially did this work to figure out what kind of bandwidth savings to expect for Erlay, but I think the approach and data might be useful for other P2P optimizations as well. While measuring overall node traffic is trivial (e.g., via iptables, systemd’s IP accounting), there’s hardly anything useful to l…

・ビットコインノードの通信データに現れる、不穏なノード群の意味

・スパイノードの狙い

・ウォレットも大きなプライバシーリスク源になる

ビットコインノードの通信データに現れる、不穏なノード群の意味

冒頭でリンクした元記事の著者は、自身が立ち上げたビットコインノードの通信の種類(P2Pメッセージの種類)を分析し、それぞれに必要なデータ量を元に合計値を計算してグラフ化しました。分析の過程で、

・IBD中(ブロックチェーンの初回同期)
・Unreachable状態(家庭内ネットワークなど外部からの接続を受け入れない環境)
・Reachable + Pruned状態(外部からの接続を受け入れるが、古いブロックチェーン情報は保持していない状態)
・Reachable Non-Pruned状態(外部からの接続を受け入れ、全てのブロックチェーン情報を保持する状態)

の4つの状態を試して通信内容を記録しました。(なお検算のため、全ての通信量推計値を合算したものとシステムの通信量のモニタリング結果を比較したところほぼ一致していた模様です)

当たり前といえば当たり前ですが、IBD中はよそからブロックをダウンロードしてくるため通信量が非常に大きく、Reachable Non-Pruned状態のときも他のノードのIBDにブロックチェーンデータを提供していたため同様でした。

validation-hourly+all+logscale
IBDの終了、PrunedからNon-Prunedへの移行はハッキリと通信量に表れていますが、Unreachable→ReachableもFeb 12あたりに通信量の微増になっています。 対数軸なので色ごとの面積の比較はしてはいけません(上の色が圧倒的に多いです)

著者はP2P通信の効率などに関して得られた示唆などにも触れていますが、プライバシーの観点で興味深いのはUnreachable→Reachableに移行したときの通信量の微増です。下の図は接続したピアごとの日毎の通信量の合計を表すものです:

2/12から受け入れ始めたInbound Peersの通信量のボリュームゾーンは Outbound Peersの10~100MBと比べてかなり少ない1MB前後だとわかる

それまで自ノードから接続しにいったピア(Outbound Peer)との通信量は1日あたり10~100MB程度のものがほとんどで、Reachable移行後もその水準で推移していますが、Unreachableになってから向こうから接続してきたピア(Inbound Peer)の多くは1日わずか1MB前後しか通信していないことが可視化されています。

Outbound Peerは通常トランザクションやブロックの伝播に使われるもので、Inbound Peerの1日1MBという通信量はあまりに小さすぎます。また、そもそも「自分のOutbound Peer」から見ると自分は相手のInbound Peerなので、Inbound Peerも本来は10~100MBというのが予想される通信量です。

この通信量が著しく少ないInbound Peerはどのような動作をしているのか、引用元の記事の著者が調べたところ、接続後は向こうからは特に何も配信してこず、自ノードから配信するINVメッセージ(新しいトランザクションの到着をアナウンスするP2Pメッセージ)を受け取り、接続が切れないようにPingに応答するだけだったようです。ウォレットなどで使用されるSPVと呼ばれるライトクライアントの可能性も、SPV関連のP2Pメッセージが来ないことからないと主張しています。(何なら限られた範囲のIPアドレスから来ているそうなので、同一主体によって乱造されたノードだと推測できます)

まとめると、

・ビットコインノードに外部から接続してくるノードの多くは通常のノードとは挙動が違い、通信量が著しく少ない
・通信内容を見ると、ほぼ自ノードから発信したINVメッセージ(新しいトランザクションの到着を知らせるメッセージ)を受信するのみである
・これらのノードは特定のIPアドレスレンジに存在することが多いため、同一主体によるネットワーク監視用と推測できる

スパイノードの狙い

ビットコイントランザクションが各ノードに到着したタイミングだけを延々と取得しているスパイノードたちの狙いは何でしょう?

冒頭でも述べたように、ビットコインの盗難は多発しており、捜査機関にとって悩みのタネの一つは犯人が自身でビットコインノードを動かしていればトランザクションの配信主体についての手がかりが得られにくいことです。そこで、Chainalysis社のように捜査機関にブロックチェーン解析サービスを提供している企業が、「このノードから配信された可能性が高い」という情報を得ようとネットワークにシビル攻撃のようなものを仕掛けているのではないでしょうか。

例えばクラウドにホスティングされたノードであればクラウドのアカウント、自宅でホスティングされたものならISP、カフェから配信されていれば監視カメラなど、トランザクションを最初に配信したノード(とそのIP)を特定できれば捜査の足がかりとなります。その気になれば、トランザクションを配信した人物をかなり絞り込めるということです。

逆に言えば現在のビットコインネットワークはこの手の攻撃に対して非常に脆弱なので、プライバシー面で改善の余地があるといえるでしょう。例えばDandelionのように、トランザクションを「数ノード先」で配信するプロトコルが導入されると、スパイノードを用いた監視の効果は減少します。

ウォレットも大きなプライバシーリスク源になる

先ほどSPVという用語が出てきましたが、自身のビットコインノードに接続していないビットコインウォレットはそもそもプライバシーを諦めています。他人のノードにアドレスの残高を問い合わせているためです。タイミングや発信元IPをはじめとする様々なメタデータを使って複数のアドレスを関連付けることができてしまいます。

もちろん、悪いことをしているのでなければ捜査機関の手が及ぶことは少ないでしょう。しかし、例えば取引所から出金先アドレスリストを含む個人情報が流出して、ウォレットアドレスの関連付けデータがダークウェブで売られていたらどうでしょう?一気にリスクが高まったと感じるのではないでしょうか。プライバシーは不可逆的なものなので、一度漏れてしまった情報を消す方法はありません。

皆さんもぜひ、この機会にウォレットの問い合わせ先を自分のビットコインノードにしましょう。

Sparrowだと自分のBitcoin Coreに接続した場合、ウィンドウ右下のスイッチが緑色になります。黄色い場合は、パブリックなElectrumサーバーに接続しています。

おすすめのPC向けウォレット・Sparrowの場合、Files>Settings>ServerタブからElectrumサーバーまたはBitcoin Coreを選択できます。別のマシンにあるBitcoin Coreを指定する場合は認証方法はUser/Passにし、ノードのbitcoin.confにrpcbind, rpcuser, rpcport, rpcallowip, serverの記述が必要になります。bitcoin.confの例はこちら