Tokenshuffle – BitcoinCashを匿名化する新しいプロトコルを解説します

2018.10.24

BCHNews編集部

こんにちは、BCHNews編集部です。

BCHNewsではElectron Cash上でリリースされたCashShuffleプラグインに関する記事をご紹介しました。CashShuffleプラグインは、Coinshuffleプロトコルに基づいて現状のミキサーの問題点を改善しつつ暗号通貨の匿名化を行うためのプラグインです。

先日、BCH開発者のChris Troutner氏によって、このCoinShuffleに加えCoinJoinを組み合わせたTokenshuffleプロトコルというアイデアが公開されました。

そこで本日は、このTokenshuffleに関して、ご紹介しようと思います。

CoinJoinとは

TokenshuffleはCoinJoinとCoinshuffleを組み合わせたアイデアです。そこでまず、CoinJoinのアイデアから説明します。Coinshuffleについては以前の記事でご紹介している為、割愛させていただきます。

以下は、CoinJoinの構造を図示したものです。

引用元:https://bitcointalk.org/index.php?topic=279249

次のような略図を使用されることもあります。

CoinJoinは、暗号通貨の匿名性に関連したミキシング技術です。簡単にいうと、ユーザー同士が同時期に発生させたトランザクションで、アウトプットを”混ぜこぜ”にすることで匿名性を付与する技術です。N人のユーザーが、N個のアウトプットとそれを達成できるN個のインプットで、一つのトランザクションを作成します。作成したトランザクションはN’の新しいアウトプットアドレスを持ち、どのインプットアドレスから操作されたのかを知ることが出来なくなります。暗号通貨の一つであるDashは、この考えに基づいて設計されています。

しかしCoinJoinには、

  • トランザクションが増えてしまうこと
  • “同時期に”発生したトランザクション同士を使用してミキシングを行う必要があること

という問題点がありました。

Tokenshuffleとは

Tokenshuffleは、通貨の代替可能性をサポートするツールだそうです。

代替可能性(Fungibility)は、通常の通貨の性質の一つで価値が一様で交換可能なことを指します。暗号通貨は、通常コインごとにトランザクションが記録されており、誰のものでどこからきたのかという情報が付随しているため、代替可能性があるとは言えません。そこで、匿名性を付与する必要があります。

Tokenshuffleは、CoinJoinの2番目の弱点を克服した匿名でやり取りできる軽量なアプリケーションとして、WormholeのようなBCH上のトークンプロトコルを利用し実装されます。また、トランザクション数に関しては、手数料が低いBCH上で実行するためトランザクション数の増加を抑える必要はありません。

Tokenshuffleのアイデアについては、以下のような全体像が公開されてます。

まず、ユーザーはBCHをパブリックインプットアドレスに送信し、送ったBCHと1:1のトークンを受け取ります。トークンを交換するために、単一のページのウェブアプリにブラウザからアクセスすることで、フォームと特有のパブリックアドレスが提供されます。フォームに対して、BCHが返却されるためのアドレスと、アプリケーションがトークンを受け取った後どのくらいの時間で返却されるかを指定します。

ここで使用するパブリックインプットアドレスは、全てのTokenshuffleで同じアドレスが使用されます。パブリックインプットアドレスを持つウォレットは、全てのUTXOを一つのUTXOに定期的に結合し、トークンと対応するBCHを指定されたアウトプットアドレスに返却します。

ユーザーが情報を送信するウェブフォームは、ユーザーがトークンを送信するのに30日間使用することができる公開アドレスを提供します。ウェブフォームはその後、トークンをバーンアドレスに送信するため、ユーザーは2回目のトランザクションに必要な300satoshis分をカバーする量のBCHを送る必要があります。

Tokenshuffleは、セキュリティ面では以下のようなことが考えられるそうです。

  • パブリックインプットアドレスは、全てのUTXOを定期的に結合させる為、トランザクションに関連する情報を混ぜ合わせられる
  • インプットの量とアウトプットの量を関連づけることはできる為、なるべく標準化された量のトークンを使用する必要がある
  • アドレスはウォレットとユーザーの間のみで一度だけ使用され、トークンは焼却される為、トークンの償還者とアウトプットアドレスは直接関わることがなく、アプリケーションは定期的にトランザクションの記録の削除が行われる
  • アウトプットは、時間でランダム化され、インプットとアウトプットのつながりを隠すことができる

ユーザー数が少なく全体の流通量が少ない間は、botを使用して決まった量のBCHがTokenhuffleアプリを通るようにし、早期に使用を開始したユーザーでも、トランザクションの匿名性が保証されるようにするそうです。

アイデアの補足

Troutner氏は、補足でTokenshuffleについて次のように発言しています。

I thought that an idea implied in my TokenShuffle idea needed further clarification. That idea is this: If a trusted, central wallet is used, combining its UTXOs is equialent to a CoinJoin.

[意訳]
Tokenshuffleは、信頼できるウォレットアプリを使用することで、暗号通貨分散性の一部を犠牲にし、信頼できるウォレットに全てのUTXOを統合することによってCoinJoinを行なったのと同じUTXOを作り出すアイデアです。

引用元:https://gist.github.com/christroutner/457b99b8033fdea5ae565687e6360323

信頼できるウォレットを使用すると、以下のようにCoinJoinと等価の形態を取ることができるそうです。

前述のCoinJoinの略図と比較してみると、トランザクション数がかなり増えていますが、結果が同じであることがわかりますね。また、CoinJoinと異なり、TX 1ではそれぞれのユーザーがそれぞれにトランザクションを作成していますが、同じ結果を得ることができています。これは、CoinJoinの問題点の一つ”同時”にトランザクションを行う必要があることを克服しています。

TX N+1 からTX N+2では、TX 1からTX Nでできた一定の残高を一つのUTXOにまとめ、N個のアウトプットを新しいアドレスに配分しています。

以上のことから、Tokenshuffleは

  • 同時に参加する必要がない
  • 大量のインプットを送信しても良い(例えば、1BCHを0.1BCHの10個のアドレスに送信できる)
  • UTXOの結合に使用することで、ダストの問題を解決できる

という利点を持つそうです。

フィードバック募集中

Troutner氏はTokenshuffleについて、現在GitHub Gist上でアイデアを共有しフィードバックを募集しています。

開発者のChris Troutner氏は、以下のように投稿しています。

If there is a problem with the logic or privacy implications, I’d like to know about it as soon as possible. That’s why I’m soliciting this idea to the community for feedback. After that, I plan to code up a reference implementation, Dockerize it, and publish it for anyone to use and replicate. I don’t know if it’s possible to get away from centralized trust, but it can be made transparent, easy to implement, and easy to replicate.

[意訳]
ロジックやプライバシーの問題に問題がある場合は、できるだけ早くそのことを知りたいと思っています。だからこそ私はこのアイデアをコミュニティに売り込み、フィードバックを求めています。その後は、リファレンス実装をコード化し、Docker化し、誰でも使用・複製できるように公開する予定です。集中された信用から逃げ出せるかはわかりませんが、透明化することができ、実装・複製が簡単にできます。

まとめ

本日の記事は、Coinshuffle・Cashshuffle・Tokenshuffleなど紛らわしい名前がたくさん出てきたので、以下にまとめておきます。

  • Coinshuffle:
    下二つのベースとなっているアイデア。鍵の交換・シャッフル・トランザクションを行うことで匿名性を付与する。
  • CashShuffle:
    BCHのウォレット、Electron Cashで実装されているプラグイン。
  • Tokenshuffle:
    今回ご紹介した、Coinshuffleに加えて、CoinJoinを組み合わせたアイデア。

また、Tokenshuffleで出てきたバーンアドレスとは、パブリックアドレスだけが存在し、プライベートアドレスを誰も知らないアドレスです。このアドレスにトークンを送信すると、トークンは使用不可能になり、市場から消失(バーン)します。”*shuffle”という単語が出てくるたびに、ミキシングに変わる技術としてshuffleが着目されてきていることがわかりますね。これからも、shuffleの今後の動向に期待できそうです。

最新情報はこちら

BCHNewsでは公式のTwitterアカウント(@bchnews_jp)を開設しました。
更新情報を配信しておりますので、よろしければフォローしていただけると嬉しいです。

BCHNews編集部

BCHNews編集部です。
日々更新される暗号通貨関連のニュースを読者の皆様にお届けします。

関連記事

Bitcoin CashにおけるRabin Signatures

2018.09.25

by BCHNews編集部

bookchain – BCHのブロックチェーンを利用した書籍保存サービスを紹介します

2018.11.28

by BCHNews編集部

Bitcoin Unlimitedの開発者、Bitcoinスクリプトの拡張を提案

2018.11.21

by BCHNews編集部

Graphen – BitcoinCashのブロック伝搬速度を劇的に向上させる技術について解説します

2018.11.17

by BCHNews編集部