post Image
ビットコインにおける匿名性を高める技術

仮想通貨・ブロックチェーン Advent Calendar 2016 の15日目の記事です。

ビットコインのプライバシー問題

昨今のビットコインの話題の一つに、プライバシー問題があります。

ビットコインは匿名性が高いと言われていますが、それは完全な匿名ではありません。
ビットコインには個人を表すデータはなく、ビットコインアドレスも現実の個人と結び付けられている訳ではありませんが、
例えば過去の取引記録や、利用するウォレットや取引所、IPアドレスなどのデータから、個人や組織が特定されてしまう可能性があります。

ビットコインのすべての取引はインターネット上に公開されているので、アドレスから過去の入出金先と入出金量の記録(いつ・誰が・誰に・いくらで)を、誰でも見ることができてしまいます。
その場合、個人であれば何にいくらお金を使っているのか、どれだけのお金を持っているのか、
企業であれば顧客からいくらお金を受け取っているのか、取引先や従業員にいくら支払っているのかが見られてしまうことになります。
これでは、プライバシーに係る取引はビットコインで行うことができません。

加えて、ビットコインはコインの記録も追跡することができます。もし不正な取引や犯罪に使われた「汚染されたコイン(tainted)」であると分かったら、そのコインは嫌がられるかもしれません。
これはビットコインの「お金としての価値」を揺らがすことになります。

このような問題を解決するため、ビットコインの匿名性を高めることは非常に重要とされています。

匿名性を高める技術

現在では、ビットコインの匿名性を高めるための様々なアイディアやサービスが生まれています。
よく名前の出るもの、最近目にしたものを中心にピックアップしてみて、以下のようにまとめました。

  • ミキシング技術を用いたもの
    • CoinJoin
    • Dash (Darksend)
  • ゼロ知識証明を用いたもの
    • Zcash
  • リング署名を用いたもの
    • Monero (CryptoNight)
  • 準同型暗号を用いたもの
    • Confidential Transaction

CoinJoin

CoinJoin は、入出金先(誰が・誰に)の匿名化に有効なミキシング技術です。
ユーザがビットコインを利用すると、その取引はランダムで選ばれた同時期の他のユーザの取引と混ぜ合わされ、一つのトランザクションに集約されます。集約されたトランザクションは、それぞれの出金先に再分配されます。
こうしたミキシング(撹拌)技術の仕組みによって、取引の入金元と出金先との紐付けを断ち、追跡できなくすることができます。

こうしたミキシングサービスは、以前は企業などが中央集権的に運用していため、仲介となる企業にコインを持ち逃げされるリスク、取引のログが見られてしまうリスクがありました。
CoinJoin はそうした仲介なしに、ユーザ同士が集まることでミキシングを実現しています。

難点としては、ユーザ同士が同じタイミングに集まらなければならないこと、仲介となるサーバが必要になること、があります。

Dash

Dash は、CoinJoin の考えに基いて匿名性を強化した仮想通貨です。
Darksend と呼ばれる仕組みを取り入れており、ユーザの取引は一度「トランザクションプール」に集められてから、再分配されるようになっています。
CodeJoin の実用的な実装の一つと言えます。

Zcash

Zcash は、入出金先と入出金量(誰が・誰に・いくらで)の匿名化を可能とする仮想通貨です。
ゼロ知識証明という暗号技術を用いることで、取引が発生したこと以外のすべての情報を隠蔽し、閲覧用の鍵を持つ人だけが取引の内容を見ることができます。

ゼロ知識証明は、自分の持っている命題が真であることを、それ以外の情報を伝えずに相手に示す技術です。
Zcash では、ユーザがビットコインアドレスを所有していることを、誰からいくらのコインを受け取ったかの内容を明かすことなく証明します。
これにより、追跡を不可能にするだけでなく、入出金量も非公開にすることができます。

しかし、ゼロ知識証明はまだ新しい暗号技術ということもあり、いくつかのバグ検証が必要とのことです。
また証明にはそれなりの計算量が必要で、取引を検証するのに2分ほどかかるそうなので、現段階で調べた結果では最も匿名化のレベルは高いものの、まだ実用には遠そうな印象を受けました。

ゼロ知識証明の原理についてはこちらが勉強になりました。
http://www.atmarkit.co.jp/ait/articles/1510/20/news007_2.html

Monero

Monero は、CryptoNight アルゴリズムに基づいた仮想通貨です。
CryptoNight アルゴリズムでは リング署名 という技術を使用しています。

リング署名は、あるグループの一員であれば誰でも署名が可能で、かつその署名は誰のものかは分からず、グループの誰かのものであることのみを証明できる技術です。
これにより、誰が入金したのかを隠匿し、ミキシングと同等の効果が得られます。ただ、CoinJoin とは異なり、取引を混ぜ合わせる仲介がいなくとも匿名化が可能な点がメリットです。

また、Monero ではリング署名にワンタイムキーを組み合わせることで、取引が追跡できないようにしています。
ユーザのアドレスがマスターキーの役割を果たし、取引の度にマスターキーからワンタイムアドレスを生成します。取引のアドレスはワンタイムアドレスとなるため、取引からユーザを追跡することはできません。

Confidential Transaction

Confidential Transaction は、Blockstream というサイドチェーン(ビットコインと他のチェーンを連携させる)技術を推進している企業が開発している技術です。

これは CoinJoin が入出金先(誰が・誰に)の匿名化が可能な一方で、入出金量(いくらで)の匿名化ができない課題を解決するものです。
ボロミアン・リング署名という、Monero で使用されているリング署名のパフォーマンスを改善したアルゴリズムを使用している他、準同型暗号による秘匿計算 を利用しているのが特徴となります。

準同型暗号は、暗号化されたデータを復号することなく、平文の演算を可能とする暗号技術です。
Confidential Transaction では、取引の入出金量が隠蔽されていても、取引におけるすべての入出力の合計を比較して確かめることで検証することができます。

しかしながら、Confidential Transaction もまだパフォーマンスに難はあるようで、通常の取引に比べると約20倍の時間がかかるようです。

準同型暗号については、こちらが勉強になりました。
http://www.atmarkit.co.jp/ait/articles/1508/14/news001.html

まとめ

ビットコインにおけるプライバシー問題と、その解決策となる技術について調べ、ここ1年2年ほどで様々な解決策が模索されていることが分かりました。

まだ課題の多い分野ではありますが、古い技術も新しい技術も組み合わせて、次々と課題解決がチャレンジされていくのはわくわくしますね。
引き続き動向を追っていけたらと思います。

参考


『 Bitcoin 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。