アドレス再使用を防ぐプライバシー対策Silent PaymentsはBIP47/PayNymをどう改善したのか
デスクトップ向けのビットコインウォレットとして近年人気上昇中のSparrow Walletが対応したことによって、Silent Paymentsへの注目が再び集まっています。このプライバシー機能は、実は以前から存在するBIP47というプロトコルの欠点を大部分解消するものです。
どちらもビットコインアドレスの再利用を防ぎつつ送金を受け取れる固定の文字列を実現するためのプロトコルですが、仕組みは非常に似ているにも関わらず根本の設計思想が大きく異なります。
また、もしかすると読者の皆様には、BIP47に関連するPayNymというプライバシー機能の名称を聞いたこともある方もいらっしゃるかと思います。
本稿ではSilent PaymentsとBIP47/PayNymの関係性に注目して、なぜSilent Paymentsがこれほど注目されているのかを解説します。
Silent Paymentsについては過去記事をご覧ください。

BIP47の仕組みには無駄が多い
BIP47/PayNymについても実は過去記事で軽く紹介しています。こちらです:
今日は図解を試みます。
BIP47の仕組み
BIP47では、まず支払いを受ける側はBIP47 Payment Codeと呼ばれる公開鍵をWebサイトなどに公開します。”PM8T~”で始まるビットコインアドレスのようなものです。

それに対して送金したいユーザーは、まず自分自身のPayment Codeを宛先ユーザーに通知する必要があります。そのため、自分のPayment Codeを宛先ユーザーのPayment Codeで暗号化し、そのデータをOP_Returnに含めた「通知トランザクション」を、宛先ユーザーのPayment Codeから生成した最初のアドレス宛に送ります。

この通知トランザクションが送られてくることで、宛先ユーザーは「これ以後はこのBIP47 Payment Codeのユーザーからの送金が来る可能性がある」と認識します。
通知トランザクションの後、送金ユーザーは自分自身と宛先ユーザーのPayment Codeを組み合わせて、その二者のみが知ることのできるウォレットを作成できます。この「共同のウォレット」内で毎回新しいアドレスを発行することで、アドレス再使用を防ぎながら送金することができます。宛先ユーザーはこのウォレット宛の入金がないか、通常のウォレットと同様に確認できればよいのです。
送金者や宛先ユーザーが違えば生成される「共同のウォレット」も異なるため、このように生成したアドレス宛に何回送金したとしても、実際の送金トランザクションは当事者以外には普通のビットコイントランザクションに見え、宛先ユーザーの公開情報であるPayment Codeとの関わりはわからないというわけです。
無駄な部分、プライバシーが足りない部分
しかし、BIP47にはいくつか無駄に感じる部分やプライバシー面での落とし穴があります。
まず、新しい相手に送金するときは必ず通知トランザクションが必要になります。これが曲者で、通知トランザクションには
- 実際の送金に加えて、通知トランザクションの手数料が余分にかかるので送金コストが高い
- 通知トランザクションの送り先であるPayment Codeから導き出されたアドレスは再使用される(受け取る側の視点では、自分が何回通知トランザクションを受け取っているかがバレる)
- 通知トランザクション自体に使用するコインとその後の実際のトランザクションに使用するコインの履歴が結びついていると、本来得られるはずだったプライバシーが損なわれる恐れがある
という問題があります。
そもそもなぜ通知トランザクションが必要なのかというと、受信者側でビットコイントランザクションの全数探索を不要にするためです。自分のPayment Codeから導いたウォレットを監視していて通知トランザクションが来たら、その送金者のPayment Codeと組み合わせて導出される新たな「ウォレット」を登録して、そのウォレットのアドレスだけを監視すればよいので、ウォレットの各アドレスの残高更新を監視する一般的なモバイルウォレットのインフラで実現可能です。
一方、全数探索する場合は通知トランザクションは必要ありませんが、ビットコインのフルノードが必要になります(後述)。

他にもBIP47にはいくつか問題があります:
- 「共同ウォレット」内で何番目の宛先アドレスまで使用したかは送金者が管理する必要があるので、複数デバイスを使った場合などにアドレスの再使用をしてしまうおそれがある
- 宛先ユーザーは送金者のPayment Codeがわかる(送金者はプライバシーを最大化するためにPayment Codeを毎回使い捨てにし、新たに通知トランザクションを出す必要がある)
まとめると、BIP47の前提として、モバイルウォレット、軽量クライアントで利用することが考えられていたようです。ただし、これ自体にもプライバシー面での問題があるので、難しい選択だっただろうと感じます。ビットコインのプライバシー重視の利用はなかなかの難問です。
PayNymとBIP47の関係
ここまで意図的にBIP47 Payment Codeという表現で統一して解説してきましたが、より一般的な名称として知られるPayNymとの関係についても短く説明します。
PayNymは人間にとって読みづらいBIP47 Payment Codeを、人間にとって扱いやすいIDのような文字列とプロフィール画像に変換したものです。文字列とプロフィール画像があることによってWebやウォレットでBIP47 Payment Codeを扱いやすくします。
ビットコイン上級者に人気のデスクトップ向けウォレット「Sparrow Wallet」がBIP47/PayNymにも対応しているので、イメージが沸かない方はぜひ使ってみてください。

Sparrow Walletについての記事はこちら(近日公開)
https://bitcoin-research.jp/sparrow-wallet/
Silent Paymentsはシンプルな分、受け取りの負荷が大きい
さて、BIP47ではトランザクションの全数探索をしないでいい代わりに通知トランザクションが必要になったと説明しました。通知トランザクションを不要にするには、どうにかして送金者のPayment Codeか、何らかの公開鍵を宛先ユーザーに伝えなければなりません。
1つの解決策は、「鍵交換はブロックチェーン外で行う(送金者のPayment Codeをメッセージなどで伝えてもらう)」ことです。ブロックチェーン外でコミュニケーションを取ることができれば、プライバシー面でリスクの塊である通知トランザクションを廃止することができます。しかし、WebサイトにPayment Codeを公開するだけという手軽さは失われてしまいます。
もう1つの解決策は、「鍵交換と送金を1つのトランザクションで実行して、宛先ユーザーにはなんとかして見つけてもらう(全トランザクションを確認してもらう)」です。Silent Paymentsはこの方式を採りました。
Silent Paymentsでは送金者がPayment Codeの代わりに、送金元アドレスの公開鍵を使用してBIP47とほぼ同じことをします。宛先ユーザーはすべてのビットコイントランザクションを「もしかすると自分宛の送金かもしれない」と考え、その手順に沿って生成されたビットコインアドレス宛の送金ではないか1つ1つ確認します。

OP_Returnを使用せず、余分なアウトプットもない1トランザクションで送金が完了するのでSilent Paymentsは傍からは普通のビットコイン送金にしか見えません。その代わり、宛先ユーザーの視点からするとすべてのビットコイントランザクションが自分宛ての送金かもしれないので全数検査が必要ということになります。そのためにビットコインノードが必要になるのです。
したがって、Silent Paymentsは
- 受け取る側にビットコインノードが必要
というのがデメリットになります。こちらはモバイルだけで完結させるのは少し難しい条件です。
プライバシーは簡単ではない
忘れないでほしいのは、BIP47もSilent Paymentsも解決しようとするプライバシーの問題は「アドレス再使用の問題」であることです。ビットコイン利用時のプライバシーに関しては他にも
- ヒューリスティクスによるトランザクション内容分析
- KYC情報に結びついたトランザクション
- 資金の全貌を隠すコインコントロールの難しさ
- 自分でノードを実行しないことによる残高データやメタデータの漏洩
- 他のユーザーのバッドプラクティスによる波及
など様々な課題があります。また、ライトニングネットワークは送金者のプライバシーを大きく改善した一方で、受取時のプライバシーはまだ改善の余地があります。
ビットコイン利用時のプライバシーは重要な問題でありつつ、まだまだこれから取り組むべき範囲が大きいというのも実情です。
Silent Paymentsのユースケース例
身近でSilent Payments導入のメリットが大きそうなのは取引所の入金アドレスでしょうか。同じ入金アドレスを繰り返し使っていると、入金を事前にブロックチェーン分析によって検知されてしまい、取引所利用者が売買する前にフロントランニング(先回り売買)されてしまい、不利益を被ります。
Silent Paymentsを使って、取引所入金であったことが事後的にしかわからないようにするだけでも、特に大口ユーザーにとって魅力的だと思います。
しかし、あくまでSilent Paymentsは第三者が知りうることを減らすだけで、取引所が入金元について知る情報は従来と変わりません。
関連記事
最新記事
読者になる
ビットコイン研究所の新着記事をお届けします。

ディスカッション