ビットコインの匿名性とChaumian CoinJoin【前編】


HiddenWallet1は、nopara73という人物が開発しているWalletで、Chaumian CoinJoin(チャウミアン・コインジョイン)というスキームを用いて高い匿名性を達成している。現在は1度目のオープンテストが完了し、リファクタリングを行なっている最中だ。
nopara73はビットコインの匿名送金スキームであるTumbleBit2の開発に携わった経験を持ち、Mediumなどにビットコインの技術的話題を多く提供する識者である3。本稿で解説する内容の多くは、彼のまとめたZeroLinkというプロジェクトの文書4に依拠している。
なぜビットコインにおいて匿名性が重要なのか?
匿名性の高いコインが「望ましいか」否かというのは、暗号通貨領域に従事する者にとって議論の別れるところであり、マネーロンダリングに使用されることへの懸念を示す意見も多い。したがってここでは深く議論はせず、一つの意見を述べるにとどめる。
ビットコインはExpensiveになるように設計されており、それが、それだけが「プロトコルの」目的である。1. 発行量が逓減することも2. 発行スケジュールが、いますぐ採掘したいと人々に思わせられる程度には短く、公平性を担保できる程度には長いことも3. コンセンサスアルゴリズムがPoWでなくてはならないことも、全てここから導き出される性質である。
このように考えると、匿名性はこのプロトコルの目的を達成するためになくてはならない性質であるという結論に至る。なぜならば、人は匿名性の高い通貨の方が受け取りたがる5傾向にあり、人が受け取りたがる通貨の方が価値が高まるためである。また匿名な状態(あなたがいくら資産を持っているか誰も知らない状態)から非匿名な状態に移行することは簡単であっても、その逆は資産を捨てない限り難しいので、デフォルトでプライベートな通貨の方が価値が高まりやすい6。
これはあくまで「そのように考えることができる」という一つの物の見方である点に注意されたい。
したがって、本稿ではこの仮定の元でプロトコルの目的を達成するための匿名化手法の概要の説明と、その手法のうちの一つである「Chaumian CoinJoin」の紹介を行うこととする。
オンチェーンの匿名化について
ビットコインの場合、ブロックチェーンのデータからは個々のアドレスと、そのアドレスに対応する秘密鍵の所有者(以後、単に所有者と呼ぶ)とを紐づけることができず、この性質を指して「擬匿名性(pseudo-anonymity)を持つ」という。
問題は、「ブロックチェーンのデータからは」という点にある。例えば自分が支払ったトランザクションの場合、支払先のアドレスの所有者は大抵既知である。また、オフチェーンの非匿名化手法7を用い、トランザクションがどのIPアドレスから発行されたものであるかを知ることで結びつけることもできる8。
オフチェーン(ネットワークレイヤ)の匿名化手法については本記事では詳しく述べないが、BIP151: P2Pネットワークの暗号化やライトニングネットワークにおけるonion routingなどがその研究の代表である。
さらに問題を大きくするのが、トランザクションのグラフを辿ることで一部のアドレスの持ち主が判明した際に他のアドレスの所有者も芋ずる式に判明してしまう可能性がある点にある。これは、単に所有者にこれは誰から入手したビットコインか尋ねたり、SNSなどのweb上の情報から推測したりするだけで可能になる。
オンチェーンの匿名化手法とは、この「ブロックチェーン内の支払いの履歴」を消すことであり、このような「支払いの履歴を辿れない」という性質をFungibility(ファンジビリティ)と呼ぶ。Fungibility確保のための代表的な手法がCoinJoinをはじめとするCoin Mixingであり、いくつかの派生が存在する。
CoinJoin
CoinJoin自体は極めてシンプルな方法で、「複数のトランザクションをくっつけて一つにする」というだけのものである。
もしも一つのトランザクションが必ず一回の決済に対応していると履歴が残ってしまうが、一つのトランザクションが複数の決済に対応していればinputとoutputの対応が理論上できなくなり、履歴の情報を辿りづらくなる。というのが根本にあるアイディアだ。一見シンプルだが、実用上はいくつか問題が発生する可能性がある。
一番厄介なのは、「単一の決済のinputの合計とoutputの合計は、(お釣りを含めれば)必ずイコールになる」という点である9。仮にinputとoutputを増やすことで関連を曖昧にしようとしても、クラスタリングを行うことでかなりの程度履歴が明らかになってしまう。このクラスタリングの手法をCoinJoin sudoku(数独)と呼ぶ。
かつてblockchain.infoが運営していたSharedCoinというサービスでこの問題が指摘され、現在は運用が停止している10。対応策は、以下のように大きく二つに分かれる。
1. 同額の決済のみを一つのトランザクションにまとめる
これは、複数の送金希望者の中から同額の決済を行いたい人物どうしを引き合わせる必要があるので、多くの場合、経済的(あるいはマーケットデザイン的)な対応策とみなすことが可能である。なぜならば、「今すぐ一定額を送金したい」という側と「多少の手数料がもらえるならば、今すぐでなくても良い」という側でTakerとMakerの関係が成り立ちうるためだ。
また、実際には「自分が参加するトランザクションのinputとoutputには最低限どれくらいの参加者がいて欲しいか?」というパラメータもあるのでもう少し複雑になる。したがってMakerとTakerの協調問題(coordination problem)が発生し、
- 一定の参加者が存在する金額でのみ成り立つ
・その金額以外の支払いを行いたい場合は、複数の金額のCoinJoinに同時に参加してバラバラにコインを送る必要がある。 - 流動性の観点から、参加者が互いを見つけるHubにネットワーク効果が働く可能性がある
- Hubから見た匿名性が存在しなくなる可能性がある
- Hubに対するDoS攻撃の問題が大きくなる可能性がある
という問題が生まれる。とはいえ、現時点で実行可能な手法の中では悪くない部類なのでJoinMarket(python製のCoinJoinのタンブラー)のように、実際に使われているものも存在する。JoinMarketは特に3, 4についての問題が顕在化していない点と、Makerの取る手数料が送金額に比例してしまうという点に問題があり、Chaumian CoinJoinが事前の解決を目指すところである。
タンブラー(tumbler)とは、実際にコインのミキシングを行うハブとなるサーバのこと。
2~4の問題を軽減するため、以下のようなP2Pネットワーク上で協調問題を解決する手法も提案されている。
- CoinShuffle
- CoinShuffle++
- ValueShuffle
特にValueShuffleは下記のConfidential Transactionと併用できるという点で有望な研究分野ではあるが、独自のP2Pネットワークを作る際にどれだけの攻撃体制をもてるかという点で検証が不十分であり、広く実用化されるには時間がかかるものと思われる。
本記事で紹介するChaumian Coinjoinは、Torなどの既存のネットワークレベルでの匿名化テクニックで十分目的を達成できるため、これらの手法が必要なくなり、実装を単純に抑えることができる可能性がある点に実用上の利点がある。
2. Pederson Commitmentによって出力の値を隠す
これは暗号学的な対応策であり、Confidential Transaction(秘匿トランザクション)という名前で知られる。楕円曲線暗号の加法準同型性を利用して、アウトプットに値を書き込むことなく、「アウトプット(と手数料)の合計がインプットと同じになる」ということだけを証明する。というのが基本的なアイディアである。
サイドチェーンではすでに動作しているものも存在し11、またパフォーマンス面での目覚ましい改善を見せており12、類似の仕組みはMoneroというアルトコインでもすでに稼働している13。
ところがこのスキームは、離散対数問題の困難性に立脚しているため、量子コンピューター耐性というところに大きな課題がある14。
暗号技術の量子コンピューター耐性は、大抵の場合現時点で考慮しても仕方がないようなところがあるのだが、Confidential Transactionだと最悪の場合「破られていることに気づかないままに、徐々に通貨の総発行量が増えていく」ということが起こりうるため、ビットコインへのデプロイには慎重にならざるを得ない。したがってメインネットでの稼働には相当な時間がかかる可能性があると思われる。
プライバシーとスケーラビリティの問題を同時に解決するMimbleWimble15もまた、現在のスクリプトシステムを抜本的に変更しなければならないため、メインチェーンへのデプロイが困難という点で同様の問題を共有している。
また、Chaumian CoinJoinは、Confidential Transactionと並行して利用しうるものなので、お互いに対立するようなアイディアではない。したがって仮にConfidential Transactionがすぐに使えるようになったとしても以下に説明するアイディアが有用であることに変わりはない。
TumbleBit, CoinSwap
もう一つ比較対象として、nopara73が以前開発に関わっていたTumbleBitというプロトコルにも簡単に触れておく。
TumbleBitはやCoinSwapというプロトコルを「Tumblerに対する匿名性」という点で改善したものである。ペイメントチャネルの開通を必要とするため、トランザクション手数料と実行時間という点に難がある。また、Lightning Networkの匿名性が高まれば必要なくなる可能性も高いので、深く探求はしない。
Chaumian CoinJoinの目標は、TumbleBitのクラシックタンブラーモードを以下の2点で改善することにある。
- プロトコル全体を実行するまでの時間の短縮
TumbleBitの場合は数時間かかる場合がある。 - 必要な手数料の削減
TumbleBitの場合はトランザクション2回分の手数料が必要になるが、これを一回で抑えたい。
これらを、「Tumblerに対する匿名性 」というTumbleBitの性質を維持した上で達成する。
後編では、いよいよChaumian CoinJoinについて解説する(3月21日18時公開)。
- https://github.com/nopara73/HiddenWallet ↩
- https://eprint.iacr.org/2016/575.pdf ↩
- https://medium.com/@nopara73 ↩
- https://github.com/nopara73/ZeroLink/ ↩
- 例えば情報取集のためにノードを立て、トランザクションがmempoolに出現した順番からIPを絞り込む。など ↩
- 決済ごとに新しいアドレスを生成して使いまわさないことが推奨されているのもこのためである。 ↩
- 説明が複雑になるので、手数料の問題は一旦無視する。 ↩
- 運用の停止自体は、技術的側面ではなくコンプライアンス的側面によるものである可能性もある。 ↩
- https://elementsproject.org/elements/confidential-transactions/ ↩
- https://eprint.iacr.org/2017/1066.pdf ↩
- https://eprint.iacr.org/2015/1098.pdf ↩
- https://medium.com/@nopara73/confidential-transactions-bulletproofs-the-elephant-in-the-room-cfdb37ce509 ↩
- http://mimblewimble.cash/ ↩
bitbank MARKETSは国内暗号資産(仮想通貨)取引所のビットバンクが運営するマーケット情報サイトです。ビットバンクは日本の関東財務局登録済の暗号資産(仮想通貨)取引所です(暗号資産交換業者登録番号 第00004号)。
ビットバンクの販売所なら、業界最狭クラスのスプレッドでお好みの暗号資産(仮想通貨)をワンタップで購入できます。
ビットバンクならシンプルで軽量、しかも高い機能性を備えたスマートな暗号資産(仮想通貨)取引所で本格的トレードも可能です。