ビットコインのプライバシーとP2EP

Kazumatree
andgo_inc
Published in
14 min readMar 10, 2020

はじめに

ビットコインは、取引履歴であるトランザクションが連なったブロックチェーンによって支えられています。また、銀行のような中心的な組織がないことも大きな特徴です。しかし、これらの特徴が故にプライバシーがしばしば問題視されています。今回はビットコインのプライバシーの問題が何なのか、またその問題の解決策の一つになると期待されるP2EPについてまとめていきたいと思います。

ビットコインにおけるプライバシーの問題点

ここでは、なぜビットコインがプライバシーの観点から問題視されているのかについてお話ししていきます。ビットコインはすべての取引履歴が公開されています。このため、自分が持っているコインがどんな経路を辿ってきたかがブロックチェーンを逆に辿れば分かってしまいます。例えば、Aさんが所有権を持っているコインが過去に不正な取引が行われたコインなら、Aさんは次の取引を拒否されてしまう可能性があり、不正取引にAさんが関わっていないのにAが被害を被る可能性もあります。本来であれば、お金(現金)のやり取りは自分の持っているお金は偽札等でない限り同じ価値を持ち、同じだけの財・サービスと交換可能です。これは、fungibility(=代替可能性)という言葉として知られています。よって、ビットコインは現金と比べて、代替可能性が低い通貨と言え、その根底には取引履歴が公開されているというプライバシーの問題が深く関わっているのです。
また、ビットコインのトランザクションにはブロック番号(時間にあたる)、金額、移動先、その資金がどこから来たのか、などの情報が含まれています。実際、Chainalysisのようなビットコインの取引を監視する企業も最近出てきており、ビットコインは今、プライバシーの観点から問題視されている状況であると言えます[文献1] [文献3]

通常のビットコインの取引とP2EP概要

ここでは、通常のビットコインの取引を具体例を用いて解説していきます。最後に、P2EPが何を目標にしているのかについても触れていきます。

2BTCと4BTC のUTXOの所有権を持つ送信者Aが受信者Bに5BTCを支払う場合

この場合に作成されるトランザクションを下図に示します。

送信者Aは、図のようなトランザクションを作成します。インプットの2BTCと4BTCは、送信者Aが所有権を持つUTXO(※)です。また、アウトプットのうち5BTCは受信者Bのアドレスに割り当てられ、お釣りの1BTCは送信者Aのアドレスに割り当てられます。このとき、一つのトランザクションに含まれるインプットは全て同じユーザー(ここでは送信者A)が所有権を持っています。通常のビットコイン取引ではこれが前提となっています。この前提をcommon input ownershipと言います。実際に、Chainalysisのようなビットコインの取引を監視する企業ではこの前提に基づいて取引を追跡していると考えられます。

P2EPはこのcommon input ownershipの前提を崩すことで、ビットコイン取引の追跡を困難にしようとしています。具体的には、これまでのトランザクションのインプットは送信者のみのUTXOで構成されていましたが、P2EPではトランザクションのインプットに送信者のUTXOに加えて受信者のUTXOも加えてトランザクションを作ることによって、取引を複雑にしています。

※UTXO(=未使用トランザクションアウトプット)これまでの取引で、自分のアドレスに割り当てられたトランザクションのアウトプットのうち未使用のもの。これらの合計値が各個人のビットコインの残高であり、次の取引でトランザクションのインプットにセットされることで使用される。

P2EPによる取引の手順

ここでは、P2EPによる取引の流れを簡単に知ることを目的とします。
[文献2]にはStep1からStep4にわたってP2EPによる取引の流れが英語で述べられているため、これを翻訳することによって取引の流れを追っていきたいと思います。翻訳の際に意味が取りずらかった部分については[文献3]を参考にしました。

  1. 受信者が送信者に送金先URIを送る。このとき、URIにはP2EP のエンドポイントを付与する。
  2. エンドポイントが有効な場合、送信者はUTXOの所有権の証明として、自分が送金する金額を持つ自身のUTXOをトランザクションのインプットにセットし、署名済みのトランザクションを受信者に送る。
  3. 受信者が 複数のトランザクションを送信者に送る。一つのトランザクションは送信者の UTXO と受信者の UTXOがセットされたもの、それ 以外は未使用の UTXO プールから選択された 他者の UTXO がセ ットされたトランザクション。
    送信の方法は直列送信と並列送信がある。
    直列送信
    トランザクションは順番に送信される。送信者が受信者のUTXOを使った署名済みのトランザクションを受信者に送ると終了する。
    並列送信
    トランザクションは全て一度に送信者に送られる。送信者は全てのトランザクションに署名し、受信者に送付する。
  4. 受信者は、送信者の署名済みのトランザクションを手に入れるとトランザクションに受信者の署名を加えてブロードキャストする。このトランザクションのインプットには受信者と送信者の両方のUTXOが含まれている。

P2EPによる取引の具体例

ここでは、「通常のビットコインの取引の流れとP2EP概要」で考えた例を再び用いて、P2EPによる取引がどのように行われるかを具体的に追っていきます。しかし、取引の具体例は[文献2][文献3]には詳細が読み取りにくかったり詳しく書かれていなかったりするため、一部私個人の見解や考察も踏まえて解説していきたいと思います。あらかじめご了承ください。

P2EPで、2BTCと4BTC のUTXOの所有権を持つ送信者Aが受信者Bに5BTCを支払う場合

① 受信者 B が送信者 A に送金先 URI を送る。

② 送信者 A は、5BTC を支払うのに十分な UTXO(2BTC と 4BTC)をインプット、お釣りのアウトプット(1BTC)を含むトランザクションを作成して受信者 B に送る。なお、UTXOに対し送信者Aの秘密鍵を用いて電子署名を施すことは通常の送金トランザクションと同じであるが、P2EPではUTXOの所有証明の意味でのみ利用される(本記事ではこの署名を仮署名と呼ぶ)。

(以降の図では、実線は送信者A、点線は受信者Bを表す)

③ 受信者 B が 複数のトランザクションを作成し、それらを送信者 A に送る。ここで、複数のトランザクションのうち一つは送信者が送ってきたトランザクションデータに含まれる UTXO と、受信者BのUTXO(ここでは例として3BTCとする)がセットされたもの、それ以外は未使用の UTXO プールから選択された A でも B のものでもない他者の UTXO がセ ットされたトランザクションである(前者を正しいTX 、後者をダミーTXと呼ぶ)。

④ 並列送信の場合、送信者 A は、送られてきた全てのトランザクションに署名をし、受信者 B に送り返す(ここでの署名を本署名と呼ぶ)。

⑤ 受信者 B は、送り返されたトランザクションのうち正しいもの(受信者 B の UTXO がトランザクションのインプットにセットされたもの)に署名をする。

⑥ 受信者Bが⑤で完成したトランザクションをネットワークにブロードキャストする。

これでP2EPによるビットコインの取引が完了します。ここで、最終的にブロードキャストされるトランザクション(⑤下の図)を見てみると、受信者Bがトランザクションのインプットにセットした3BTCのUTXOに対して、8BTCのアウトプットが新たに受信者Bのアドレスに割り当てられいます。送信者Aが受信者Bに5BTCの送金が完了したことが分かります。また、トランザクションのインプットには送信者Aの他に受信者BのUTXOも含まれているため、前述のcommon input ownershipの前提が崩れたことになります。

補足

今回の具体例では、④の過程を並列送信の場合で書きました。Blockstreamのページ[文献2]では、送信者と受信者が複数のトランザクションをやり取りする過程は直列送信と並列送信が提案されていました。双方では、 署名とブロードキャストの流れが異なります。 直列送信では、受信者はトランザクションは順番に送信者に送られます。送信者はそれぞれ順番に署名し受信者に送り返します。受信者は、自分の UTXO がトランザクションのインプットにセットされたトランザクションを受け取ると、それをブロードキャストします。この時点で送信者 A とのやり取りは終了します。

考察

ここでは、P2EPによる取引とその具体例で解説した過程について、いくつかの考察を示したいと思います。先程申し上げた通り、具体例の解説については一部私個人の見解も含まれているため、見解の根拠も示していきたいと思います。

  • ①の送金先のURIに付与されるエンドポイントについて

P2EPでは②以降で送信者と受信者がオンラインで協力してトランザクションを作成することから、①の送金先のURIに付与されるエンドポイントは、今後トランザクションをやり取りするためのAPIを指定していると考えられます。

  • ②におけるトランザクションの中身について

[文献2]ではトランザクションの中身についての記述がありませんでしたが、[文献3]には「UTXOの所有権の証明として、自分が送金する額を持つ自身のUTXOをトランザクションのインプットにセットした署名済みのトランザクションを受信者に送る。」という記述がありました。[文献3]によると、送信者Aは送金する額に足りるUTXOをトランザクションのインプットにセットしなければなりません。P2EPは送信者と受信者が協力してトランザクションを作っていくという特徴があるため、送信者が作れる範囲についてはあらかじめ作っておき、その後③で受信者が付け足していくという流れが自然だと考えました。そのため、②におけるトランザクションには、送信者が送金する額に足りるUTXOをトランザクションのインプットに、お釣りをアウトプットにセットしたトランザクションにしました。

  • ②でUTXOに署名させる理由について

[文献2] [文献3]では、署名済みのトランザクションを送るという記載がありました。しかし、②の時点でトランザクションは未完成であるため、この署名は送信者のUTXOの所有権の証明をするための仮の署名と考えられます。ここで、なぜこの時点での署名が必要になるのかという疑問が生じます。これは、P2EPの取引を円滑に進めるためであると考えます。もし、②でAが 仮署名無しにCに所有権のある UTXO をBに送った場合、Aは④で本署名ができなくなります。するとAは自身の UTXO をセットしてBに再び複数のトランザクションを送り直す(②〜④の過程を繰り返す)必要があります。これらの手間を最小限にするためにも、あらかじめAが自身の持つ UTXO の所有権をBに示す必要があると考えます。
また、[文献2] [文献3]ではP2EPにおけるトランザクションのやり取りがどこかで失敗した場合(どちらかがオフラインになってしまった時など)は通常のビットコインの取引が行われるという記載もありました。この記載を考慮すれば②で行うUTXOへの署名は、P2EPがどこかで失敗して通常の取引でコインを送信する際に使われるのではないかとも考えられます。

  • 直列送信と並列送信の是非について

具体例のところで並列送信について、補足で直列送信について考察しましたが、私は並列送信の方が有効であると考えます。直列送信では、複数のトランザクションが順番に送られ、受信者Bが自分の UTXO がトランザクションのインプットにセットされたものを受け取った時点で、送信者Aとのやり取りは終了してしまいます。このため、送信者Aが最後に送ったトランザクションが正しいトランザクションであり、受信者BのUTXOが知られてしまう可能性があると考えられます。このため、受信者Bのプライバシーを考慮すると、一度にトランザクションを送信する並列送信の方が有効であると考えます。

まとめ

ここまで、ビットコインのプライバシーとその解決策の一つであるP2EPについてお話ししてきました。ビットコインはすべての取引履歴が公開されていること、そのため代替可能性が低くなることによりプライバシー保護の問題を抱えていました。P2EPはcommon input ownershipの前提を崩すことよって、トランザクションを複雑にしています。P2EPの大きな特徴として、ブロードキャストされたトランザクションはP2EPで取引されたことが外見では判断できないという点があります。先程のトランザクション(具体例の⑤下の図)をcommon input ownershipに基づいて分析すると、送信者Aが自身のUTXO(2BTC、4BTC、3BTC)を用いて受信者Bに8BTCを支払い、1BTCのお釣りを受け取ったと解釈することもできます。これは、P2EPで実際に支払った額とは異なります。これにより、ビットコイン取引の追跡を困難にしています。
しかしながら、上述の取引の流れは送信者と受信者双方がオンラインでなくてはなりません。P2EPの、トランザクションの外見が通常の取引と変わらないという利点は残しつつも、オフラインでビットコインの取引が可能なプロトコルを提案することで、よりプライバシーに配慮した仕組みを構築でき得ます。

ANDGOでは、こうした基礎技術の研究開発を行っています。興味のある方は弊社公式サイトより問い合わせください。

参考文献

[文献1]
2017–2019 仮想通貨ニュースサイト-CoinPost
ビットコインのプライバシーはなぜ議論されるのか?その手法について検証|BTCプライバシー編
https://coinpost.jp/?post_type=column&p=106168

[文献2]
Blockstream Improving Privacy Using Pay-to-EndPoint (P2EP)
https://blockstream.com/2018/08/08/en-improving-privacy-using-pay-to-endpoint/

[文献3]
Hatena Blog Bitcoinのプライバシーを向上する決済プロトコルPay to EndPoint(P2EP)
https://techmedia-think.hatenablog.com/entry/2018/08/09/152004

--

--