Greetings! New to Zcash?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with more information about how you can get started with Zcash!

言語

BOLT: プライベートの支払いチャネル

Ian Miers | Aug 01, 2016

Matthew Green と私は、BOLT (Blind Off-chain Lightweight Transactions) を紹介する論文を発表し、その中で、ライトニングネットワークでの迅速かつプライベートな支払いチャネルプロトコルを説明しています。これによりZcashは、強固なプライバシー保護を維持しながら、よりスケーラブルで実用的なものになると信じています。

TL;DR: BOLTを使用すると、関連する当事者間でも、同じチャネルでの複数の支払いを結び付けることはできなくなります。支払いはミリ秒単位で発生し、ブロック認証を必要としません。業者にはオープンしたチャネルで支払いを受け取ることだけが分かります。関係者を匿名にして、悪意のある第三者からプライバシーを保護し (第三者が同意している場合も同様)、移行される金額を非表示にすることで、支払いは、顧客や業者がチャネルをもたなくても、第三者を介して転送することができます。この論文のプレビューは http://eprint.iacr.org/2016/701 から参照できます。

問題

ブロックチェーンに基づいた暗号通貨は、ブロックチェーンのすべてのトランザクションを公に記録することで機能します。これには、信頼のおける当事者を必要としないという利点がありますが、ブロックチェーンのすべてのトランザクションを公に記録する ため、プライバシー、スケーラビリティおよび遅延における重大な問題があります。ブロックチェーンのすべてのトランザクションを記録するには容量が必要(ビットコインのブロックサイズに関する記述を参照)であり、ブロックのトランザクションを記録するには数分かかる上、記録は公のものであるため他人に行為の詳細が開示されてしまいます。

支払いチャネル

Lightning Networkなどの支払いチャネルプロトコルは、資金の受け渡しや紛争の解決のためだけにブロックチェーンを使用して規模や遅延の問題を認識します。それ以外では、ユーザーは紛争がなければブロックチェーンに記録されない、本質的にブロックチェーンを使用したIOUを交換します。

そのしくみを具体的に見てみましょう。AliceとBobが、チャネルで分割資金の最初のIOUに同意します(例えば、それぞれが50ドル支払い、IOUではAlice:50ドル、Bob:50ドル)。このお金はブロックチェーン上のエスクローで保持され、AliceとBobの両方が署名した有効なIOUによってのみリリースされます。AliceがBobに5ドル支払うには、Aliceが古いIOUを確認して破壊し、Bobと共に「Alice:45ドル、Bob:55ドル」という新たなIOUに署名します。いずれかの当事者がお金を引き出すときは、その度にこれを繰り返します。この時点で、AliceまたはBobのどちらかが最新のIOUをブロックチェーンに提示(紛争の場合は双方が提示)できます。したがって、チャネルの開閉のみがブロックチェーンに記録されます。

チャネルはプライベートではない

チャネルの開始と終了により、顧客、売り手、および資金の最初と最後の分割を識別する記録が残ります。これが正に公開されてはならない情報です。

Tor(または別の匿名サービス)で帯域幅の支払いにマイクロペイメントを使用したとします。実際、AliceがTorを経由して閲覧するすべてのウェブページには、ペイアウトチャネルを介したマイクロペイメントが必要です(たとえば、ページビューごとに10分の1セント)。Aliceには、Torの支払いチャネルで毎月ゼロバランスで終了する$ 1.00があるとすると、彼女がTorのヘビーユーザーあることがわかります。Aliceが活動家やジャーナリストだとしたら、カフェのような場所でのみTorを使用するように気をつけていても、「隠すべきもの」がある人物として当局の注意を引くかもしれません。また、Aliceが例えばトルコなどのような国に住んでいる場合、大変なことが起こる可能性もあります。

ありがたいことに、Zcashはまさにこの手の問題を解決できるように設計されています。ビットコインやイーサリアムのような透明性の高い元帳機能の代わりにZcashを使えば、チャネルの開始と終了をAliceにリンクする情報がブロックチェーンに含まれることはありません。ただし、Zcashはオンチェーンの支払いのプライバシーに対応しているだけであり、IOUには対応していません。

問題は、これらのIOUが一意の識別子となり、まるでクッキーのようにAliceを追跡できてしまうということです。たとえば、Torの出口コードを観察しても識別子が誰のものなのかを推定することはできません。Aliceの実際のIDは匿名サービスから保護されているからです。しかし、特定の支払いチャネルで行われる支払い処理は本質的にリンク可能なので、ページビューとパターンはわかってしまいます。ページビューとパターンがわかれば、Aliceを一意に特定するのは難しいことではありません。たとえばAliceが自分の執筆した新聞記事に関するドキュメントを参照した場合、そこから彼女を特定することができます。さらに、彼女が何に関する記事を書いているかもわかってしまいます。このため、Zcashはこのソリューションに*参加*してはいますが、プライベートの支払いチャネルは作成していません。

BOLT: プライベートの支払いチャネル

Mattと私がこの数カ月取り組んできたBOLTを入力すると、チャネル内の支払い間のリンクが除去されます。これで、この受信者に対する*すべての*支払いのうち、Aliceの支払いが非表示になります。

設計された2つのプロトコルの1つは非対話型で、AliceからBobへの決まった額の支払いにのみ対応しています。もう1つは対話型で、双方向で任意の額の支払いが可能です。ここでは、この双方向のプロトコルについて見ていきます。

このプロトコルの基本的な考え方は、プライベートIOUを構築することです。このために私たちは、ブラインド署名とコミットメントという2つの技術を使用しています。コミットメントを使用すると、IOUの値(個人を特定できる情報)を隠すことができます。ブラインド署名では、たとえばBobはIOUに署名してIOUを信頼しますが、自分が署名したIOUの中から特定の署名またはIOUを見つけ出すことはできません。

BOLT図

Aliceは、(リボケーションキーで署名することで)IOUを無効にし、支払いより少ない金額の古いIOUと同じ残高の新しいIOUをBobに署名してもらうことで、IOUなどでBobに支払いをします。同様に、新しいIOUに金額を追加して、BobはAliceに支払いをします。実際の残高と署名は、2つの異なる支払いが同じチャネルまたは異なるチャネルからのものであるかどうかが分からないように、Bobには表示されません。

真のチャレンジは、古いIOUを無効にし、新しいものをアトミックに署名することです。また、Aliceがどのチャネルを使用するかを開示することなくこれを実行するのはかなり難しいことです。 Aliceが古いIOUを最初に無効にし、Bobが新しいIOUに署名することを拒否した場合は、Aliceはチャネルを閉鎖することができず、お金を失うことになります。古いIOUを無効にする前に、Bobが新しいIOUに署名すると、AliceはBobに詐欺行為を働くことができます。Aliceは、Bob の署名した新しいIOUを受け取り、一連の支払いに使用することができ、元のIOUを現金化し、自分のお金として保持することが可能です。通常の支払いチャネルでは、BobがAliceの詐欺行為の支払いを認識するためにこの状況は発生しません。しかしながら、プライベートのチャネルにはこれは不可能です。

BOLT 図

これを解決するために、チャネル閉鎖がIOUを将来のトランザクションに使用されることと、IOUを作成するプロセスを分離します。IOUは残高と、リボケーションキーと呼ばれる一回限りのパブリックキーへのコミットメントです。Aliceは、チャネルの制定から既存の(無分別に)署名済みのIOUを持っていると想定します。① Aliceはまず、新しいIOUを作成し、Bobが本来署名したIOUより$5多くBobに支払います。② Aliceは、古いIOUのリボケーションパブリックキーを公開します。 ③ Bobは、(新しいIOUが古いものに関して正しく作成されていることを確認にした後で)新しいIOUに署名します。④ その後、Aliceはリボケーションキーを使用して古いIOUを無効にするメッセージに署名し、Bobにメッセージと署名を提供します。これで、何が起こってもAliceが新しいIOUでチャネルを閉鎖することができるため、安全です。⑤ 古いIOUが無効になると、Bobは新しいIOUが次の支払いに使用できる有効なものであると署名します。これは、古いIOUが無効であり、BobはAliceがより多くのお金を保持する以前の状態に戻ることができないために安全であるといえます。Aliceは、次のBOLT支払いに新しいIOUを使用することができます。

Bobの視点で考えると、支払いチャネルのうちの1つで支払いを受け取った(この例では$5)ことが分かります(別の言い方をすれば、支払いチャネルが閉鎖されるときに、Bobはさらに$5を受け取る*予定*です)。しかしながら、Bobには支払いに実際どのチャネルが使用されたかは分かりません。実際のIOU、その残高、そして署名はBobには非公開で、これらのみがチャネルを特定できる手段だからです。

興味深い点は、このすべてがシンプルで迅速、かつ非常によく理解されている暗号を使用することです。プロトタイプがまもなくリリースされますが、このプロトコルを実行するには50ミリ秒以下、10 MBのメモリが必要になると考えられています。

間接的な支払いチャネル

現時点では、AliceとBobが支払いチャネルを保持していることが要件です。保持していない場合はどうなるのでしょうか。

当事者間に直接的なチャネルがない場合も、仲介人(例えば Coinbase)を共有していることを条件として、BOLTで支払いが可能です(Lightningと同様)。これは、チャネル閉鎖へのIOUの使用を、他のトランザクションが正常に行われることの条件とすることで実現します。Lightningと異なる点は、単一の仲介人が当事者や移行される金額を知ることはないという点です。このためには、第三者が停止しチャネルを閉鎖する人物を参照することができないよう、チャネル自体が匿名で提供されていることが重要です。チャネル自体が匿名であれば、この情報には価値がありません。

BOLTの間接的な支払いを、Lightningのような複数の仲介者を介した支払いに拡げることは可能です。しかしながら、現時点ではBOLTではこれを行いません。

BOLTはZcashなしでも動作しますか?

プリミティブを追加できるという条件で、BOLTをほとんどの暗号通貨と動作するよう設定することができます。ビットコインに変更を加えることなく実行することも可能ですが、ECDSAのブラインド署名のためにハッシュベースのコミットメントと一般的なサーキットベースのマルチパーティコンピュテーション(MPC)の使用が必要になります。BOLTにより提供される実際のプライバシーは、基本的にはチャネルのエスタブリッシュメントと閉鎖が匿名であることに依存しています。

ビットコインでは、資金チャネルの作成はプライベートではありません。チャネルを開いた相手や金額、そしてなぜ閉鎖したかなどの記録が残ります。BOLTだけでは、この問題を解決することはできません。同じチャネルでの支払いを連結できなくするだけです。さらに悪いことに、業者や第三者がBOLTプロトコルで強制終了すると、使用しているチャネルを識別することができてしまいます。これは一回しか行うことができないため、同じチャネルでの複数の支払いは連結できませんが、チャネルを匿名で開かなければ、その(途中で終了された)支払いがあなたに結び付けられる可能性があります。

これを回避するために、チャネルを作成するための匿名の資金が必要です。実際、チャネルを作成するプライバシーの必要事項は通常の支払いと同様です。そのため、通常の支払いに必要な強力なプライバシーが求められます。そして、Zcashは強力なプライベートの資金を得るための最善の方法です。

LightningとZerocashを組み合わせるというアイディアを提案してくれた、Zcash開発者の一人であるSean Boweに感謝の意を表します。また、このブログ記事にフィードバックを提供してくれたSean, Maureen、Matthew、Daira、Jackと匿名のleopardにも感謝いたします。