分散型BitCoinエスクローサービスの作り方
要約:BitCoinに分散型エスクローを持たせれば、他のすべての交換手段に対する優位性が生まれ、普及率が高まるかもしれない。詳細は以下の通り。
分散型通貨に対して、中央集権型のエスクローが現在のBitCoinの標準となっているようだ。例を挙げる:
アリスはボブから$5分のBitCoinを買いたいが、アリスもボブもお互いを完全には信頼していないので、両者が信頼するサイト——例えばMt. Goxに行く。そこにそれぞれの資金を預け、Mt. Goxに交換を行ってもらう。
Mt. Goxを悪く言うつもりはないが(好きなサイトだ)、そのエスクローサービスなしでやれないだろうか?
ほぼ分散型の代替案:
- チャーリー(信頼できる第三者)がBitCoinの秘密鍵を生成する。
- チャーリーはUNIXのsplitコマンドで秘密鍵を半分に分割し、半分をアリスに、半分をボブに渡す。
- ボブは$5分のBitCoinを分割されたBitCoinアカウントに入金する。
- アリスは公開ブロックを使って取引を確認する。
- アリスはPayPalでボブに$5を送る。
- ボブはPayPalの取引を確認する。
- ボブは自分の半分の秘密鍵をアリスに送り、アリスが先に入金されたBitCoinにアクセスできるようにする。
(簡略化のため、取引手数料を誰が払うかや、チャージバック詐欺を避けるためにどのくらい待つべきかなどのPayPalの詳細は省略する。また、ボブが最後のステップを実行するインセンティブも省略する。)
UNIXのsplitコマンドの代わりにもっと洗練されたものを使えば、より高度なほぼ分散型の例が作れる。例えば:ssss[1]のようなシャミアの秘密分散法の実装だ。ssssのようなユーティリティを使えば、アリスとボブは意見が食い違った場合に仲裁人を指名できる。
もちろん、これらすべての問題は、チャーリーが作成する秘密鍵の完全なコピーを悪用しないとチャーリーを信頼しなければならないことだ。
理想的な解決策は、アリスとボブがそれぞれ独自に秘密鍵の半分を生成することだろう。現代の鍵ペアに使われる数学を完全には理解していないが、現在のアルゴリズムではこれは不可能だと思う。
鍵全体をどの当事者にも渡さずに、アリスとボブがそれぞれ秘密鍵の半分を取得する代替方法はあるだろうか?
-Dave
[1] 参照:http://en.wikipedia.org/wiki/Shamir’s_Secret_Sharing (http://en.wikipedia.org/wiki/Shamir's_Secret_Sharing)
まだ実装されていないが、ネットワークは2つの署名を必要とするトランザクションをサポートできる。ここに説明がある:topic 750
エスクローなしの直接支払いよりは絶対に安全だが、人間が仲裁するエスクローほどではない(もちろん、その人間を十分に信頼できると仮定した場合だが)。
この種のエスクローでは、詐欺師は勝つことができないが、あなたが損をする可能性はまだある。少なくとも、あなたを騙す利益動機を取り除くことはできる。売り手はお金が自分のために確保されていることが保証され、買い手は完了するまで売り手にまだ支払われていないという交渉力を保持する。
まだ実装されていないが、ネットワークは2つの署名を必要とするトランザクションをサポートできる。ここに説明がある:
http://bitcointalk.org/index.php?topic=750.0
投稿の前に検索したのに、これを見つけられなかったなんて。ありがとう。
リンク先の投稿で言っているように、エスクローはソフトウェア(おそらくノード上で動作している)で実装されているので、理論的にはネットワークはn個の署名を必要とするトランザクションをサポートできる、ここでnは任意の数だ。これで正しいだろうか?
もしそうなら、ネットワークは(登録されたすべての署名ではなく)過半数の署名を必要とするトランザクションもサポートできるだろうか? 例えば、買い手が3つのキーペアを生成し、1つをトランザクションの開始に使い、1つを資金の解放のために保存し、1つを両者から信頼される仲裁者に配布する。買い手か仲裁者のどちらかが資金を解放できる。
改めてありがとう。
-Dave
前の投稿をした後で気づいたが、自分の例では3つのキーペアは必要ない。買い手は単に2つ目のキーペアのコピーを仲裁者に渡せばよい。
3つ以上のキーペアが必要な、もう一つあり得るシナリオを思いつけない。
とにかくありがとう、-Dave