IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エヌチェーン ホールディングス リミテッドの特許一覧

特許7414795アセット混合のための、コンピュータにより実施されるシステム及び方法
<>
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図1
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図2
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図3
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図4
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図5
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図6
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図7
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図8
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図9
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図10
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図11
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図12
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図13
  • 特許-アセット混合のための、コンピュータにより実施されるシステム及び方法 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-05
(45)【発行日】2024-01-16
(54)【発明の名称】アセット混合のための、コンピュータにより実施されるシステム及び方法
(51)【国際特許分類】
   G06F 21/62 20130101AFI20240109BHJP
   G06Q 40/02 20230101ALI20240109BHJP
   G06Q 40/04 20120101ALI20240109BHJP
【FI】
G06F21/62 354
G06Q40/02
G06Q40/04
【請求項の数】 15
(21)【出願番号】P 2021500693
(86)(22)【出願日】2019-07-17
(65)【公表番号】
(43)【公表日】2021-11-18
(86)【国際出願番号】 IB2019056105
(87)【国際公開番号】W WO2020021394
(87)【国際公開日】2020-01-30
【審査請求日】2022-06-20
(31)【優先権主張番号】1811968.5
(32)【優先日】2018-07-23
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ベルナト,ポーリーン
(72)【発明者】
【氏名】バルトルッチ,シルヴィア
【審査官】中里 裕正
(56)【参考文献】
【文献】MIERS, I. et al.,Zerocoin: Anonymous Distributed E-Cash from Bitcoin,2013 IEEE Symposium on Security and Privacy,2013年05月,pp.397-411
【文献】MOSER, M., BOHME, R. and BREUKER, D.,An Inquiry into Money Laundering Tools in the Bitcoin Ecosystem,2013 APWG eCrime Researchers Summit,2013年09月,pp.1-14
【文献】RUFFING, T., MORENO-SANCHEZ, P. and KATE, A.,CoinShuffle: Practical Decentralized Coin Mixing for Bitcoin,Lecture Notes in Computer Science,Vol.8713,2014年,pp.345-364
【文献】ZIEGELDORF, J. H. et al.,CoinParty: Secure Multi-Party Mixing of Bitcoins,Proc. of th 5th ACM Conference on Data and Application Security and Privacy,2015年03月,pp.75-86
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/62
G06Q 40/02
G06Q 40/04
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
出力シャッフルプロセスにおいて参加者コンピュータシステムの組を識別する圧縮情報を含むデータ構造を生成することであり、前記出力シャッフルプロセスは、前記参加者コンピュータシステムの組によって与えられた出力アドレスの組をシャッフルすることによって、シャッフルされた出力アドレスの組を生成することを含む、ことと、
前記シャッフルされた出力アドレスの組を前記参加者コンピュータシステムの組から取得することと、
前記参加者コンピュータシステムの組に対応する寄与記録の組がブロックチェーンへサブミットされていることを決定することであり、各寄与記録はデジタルアセットのデポジットに対応する、ことと、
前記寄与記録の組が前記ブロックチェーンへサブミットされているとの決定に応答して、前記シャッフルされた出力アドレスの組及び前記データ構造に少なくとも部分的に基づいて複数のブロックチェーントランザクションを生成することと、
前記複数のブロックチェーントランザクションを前記ブロックチェーンへサブミットすることと
を有する、コンピュータにより実施される方法。
【請求項2】
前記参加者コンピュータシステムの組によって使用されているロッキングスクリプトで定義されている第1閾時間量の後、個々の参加者コンピュータシステムの組に関連する個々のブロックチェーントランザクションが前記ブロックチェーンにサブミットされていないことを決定することであり、前記個々の参加者コンピュータシステムの組は、前記参加者コンピュータシステムの組のサブグループである、ことと、
前記個々のブロックチェーントランザクションが前記ブロックチェーンにサブミットされていないとの決定の結果として、前記個々の参加者コンピュータシステムの組が前記個々の参加者コンピュータシステムの組寄与記録に対応する前記デジタルアセットの前記デポジットを再請求することを可能にする暗号情報を前記個々の参加者コンピュータシステムの組へ供給することと
を更に有する、請求項1に記載のコンピュータにより実施される方法。
【請求項3】
寄与記録の各組は、ロッキングスクリプトを含み、
前記ロッキングスクリプトは、ブロックチェーントランザクション出力が、前記シャッフルされた出力アドレスの組に基づいて個々の参加者コンピュータシステムによって請求されることを可能にする、
請求項2に記載のコンピュータにより実施される方法。
【請求項4】
前記ロッキングスクリプトは、入力が前記暗号情報を用いて再請求されることを可能にする、
請求項3に記載のコンピュータにより実施される方法。
【請求項5】
前記ロッキングスクリプトは、前記第1閾時間量よりも長い第2閾時間量後に入力が再請求されることを可能にする、
請求項3又は4に記載のコンピュータにより実施される方法。
【請求項6】
前記ロッキングスクリプトは、OP_CHECKSEQUENCEVERIFY演算子を含む、
請求項3乃至のうちいずれか一項に記載のコンピュータにより実施される方法。
【請求項7】
前記シャッフルされた出力アドレスの組は、前記シャッフルされた出力アドレスの組を前記参加者コンピュータシステムの組の中の各参加者コンピュータシステムへルーティングされるようにすることによって、取得される、
請求項1乃至のうちいずれか一項に記載のコンピュータにより実施される方法。
【請求項8】
前記寄与記録の組の中の各寄与記録は、当該コンピュータにより実施される方法を促進するディーラーへ支払われるトランザクション手数料を含む、
請求項1乃至のうちいずれか一項に記載のコンピュータにより実施される方法。
【請求項9】
前記データ構造は、集積木であり、該集積木のリーフノードは、前記参加者コンピュータシステムの組を表し、参加者コンピュータシステムは、前記複数のブロックチェーントランザクションにおける入力アドレス及び出力アドレスを有する、
請求項1乃至のうちいずれか一項に記載のコンピュータにより実施される方法。
【請求項10】
個々のブロックチェーントランザクションにおける参加者コンピュータシステムは、前記集積木の中間ノードの下の前記リーフノードに対応する、
請求項9に記載のコンピュータにより実施される方法。
【請求項11】
各参加者コンピュータシステムは、前記集積木の各リーフノードに関連する値のハッシュを供給する、
請求項9又は10に記載のコンピュータにより実施される方法。
【請求項12】
前記ブロックチェーントランザクションは、アセット混合トランザクションである、
請求項1乃至11のうちいずれか一項に記載のコンピュータにより実施される方法。
【請求項13】
各参加者コンピュータシステムは、1つ以上のプロセッサと、該1つ以上のプロセッサによって実行される結果として、暗号通貨ウォレットアプリケーションを実施する命令を記憶しているメモリとを有するコンピュータシステムである、
請求項1乃至12のうちいずれか一項に記載のコンピュータにより実施される方法。
【請求項14】
システムであって、
プロセッサと、
前記プロセッサによる実行の結果として、当該システムに、請求項1乃至13のうちいずれか一項に記載のコンピュータにより実施される方法を実行させる実行可能命令を含むメモリと
を有するシステム。
【請求項15】
コンピュータシステムのプロセッサによって実行される結果として、前記コンピュータシステムに、請求項1乃至13のうちいずれか一項に記載のコンピュータにより実施される方法を少なくとも実行させる実行可能命令が記憶されている非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーン上に記録された複数のノンアトミック操作の使用を通じたアトミック操作の生成及び実行に概して関係がある。本開示は、複数の参加者からの寄与を含む合成アトミック操作の実行に特に適するが限られない。一般に、本開示は、アトミック操作の失敗時に如何なる個々の寄与も返されることを個々の参加者に保証するために集積木を使用する。
【背景技術】
【0002】
本文書中、語「ブロックチェーン」は、いくつかのタイプの電子的な、コンピュータに基づく分散台帳(distributed ledgers)のいずれかを指す。それらは、合意に基づくブロックチェーン及びトランザクションチェーン技術、許可(permissioned)及び無許可(un-permissioned)台帳、共有台帳、並びにこれらの変形を含む。ブロックチェーン技術の最も広く知られた応用は、他のブロックチェーン実施が提案及び開発されているとはいえ、ビットコイン台帳である。ビットコインの例が、便宜上、説明のために本開示で言及され得るが、本開示は、ビットコインブロックチェーンとともに使用することに限られず、代替のブロックチェーン実施及びプロトコルが本開示の適用範囲内にあることが留意されるべきである。例えば、本開示は、どんな制約がトランザクション内で符号化され得るかに関してビットコインに類似した制限を有している他のブロックチェーン実施において有用であることができる。
【0003】
ブロックチェーンは、トランザクション及び他の情報から成るブロックで構成された、コンピュータに基づく非中央集権型の分散システムとして実装されるピア・ツー・ピアの電子台帳である。例えば、ビットコインによれば、各トランザクションは、ブロックチェーンシステム内の参加者間のデジタルアセットの制御の移動を符号化するデータ構造であり、少なくとも1つの入力及び少なくとも1つの出力を含む。いくつかの実施形態で、「デジタルアセット」(digital asset)は、使用権に関連するバイナリデータを指す。いくつかの実施で、デジタルアセットの制御を移すことは、第1エンティティから第2エンティティへデジタルアセットの少なくとも一部を関連付けし直すことによって実行され得る。ブロックチェーンにその始まり以来書き込まれてきた全てのトランザクションの永久的且つ不変な記録を構成するようブロックどうしが連鎖するように、各ブロックは前のブロックのハッシュを含む。トランザクションは、それらの入力及び出力に埋め込まれたスクリプトとして知られている小さいプログラムを含む。スクリプトは、如何にして誰によってトランザクションの出力がアクセスされ得るかを特定する。ビットコインプラットフォームで、それらのスクリプトは、スタックに基づくスクリプト言語を用いて書かれている。
【0004】
トランザクションがブロックチェーンに書き込まれるために、それは“妥当性確認”(validated)される。ネットワークノード(マイナー)は、各トランザクションが妥当であることを確かにする作業を実行し、妥当でないトランザクションはネットワークから拒絶される。ノードは、他のノードとは異なった妥当性の標準を有することができる。ブロックチェーンにおける妥当性は合意に基づく(consensus-based)ので、トランザクションが妥当であると大部分のノードが同意する場合に、トランザクションは妥当と見なされる。ノードにインストールされているソフトウェアクライアントは、部分的にUTXOロッキング(locking)及びアンロッキング(unlocking)スクリプトを実行することによって、未使用トランザクション(unspent transaction,UTXO)を参照するトランザクションに対してこの妥当性確認作業を実行する。ロッキング及びアンロッキングスクリプトの実行が真(TRUE)になり、他の妥当性確認条件が、適用可能である場合に、満足される場合には、トランザクションはノードによって妥当性を確認される。妥当性を確認されたトランザクションは、他のネットワークノードへ伝えられ、そうすると、マイナーノードは、トランザクションをブロックチェーンに含めることを選択することができる。このようにして、トランザクションがブロックチェーンに書き込まれるために、それは、i)トランザクションを受け取る第1ノードによって妥当性確認をされなければならず、トランザクションが妥当性を確認される場合に、ノードは、それをネットワーク内の他のノードへ中継し、そして、トランザクションは、ii)マイナーによって構築された新しいブロックに加えられ、ii)マイニング、すなわち、過去のトランザクションの公開台帳に付加、されなければならない。トランザクションを実質的に不可逆にするよう十分な数のブロックがブロックチェーンに付加されている場合に、トランザクションは承認されていると見なされる。
【0005】
ブロックチェーン技術は、暗号通貨実施の使用のために最も広く知られているが、デジタル起業家は、新しいシステムを実装するために、ビットコインが基づく暗号化によるセキュリティシステムと、ブロックチェーン上に記憶され得るデータとの両方の使用を探求し始めている。暗号資産の分野に制限されない自動化タスク及びプロセスのためにブロックチェーンが使用される場合に、それは大いに有利である。そのような解決法は、ブロックチェーンの利益(例えば、イベントの永久的な耐タンパー性の記録、分散処理など)を活用しながら、それらの用途を広げることができる。
【0006】
ブロックチェーントランザクション出力は、ロッキングスクリプトと、ビットコインなどのデジタルアセットの所有権に関する情報とを含む。ロッキングスクリプトは、解除条件(encumbrance)とも呼ばれることがあり、出力をアンロックするために満足される必要がある条件を指定することによってデジタルアセットを“ロック”する。例えば、ロッキングスクリプトは、関連するデジタルアセットをアンロックするよう特定のデータがアンロッキングスクリプトにおいて供給されることを求め得る。ロッキングスクリプトは、ビットコインでは「scriptPubKey」としても知られている。デジタルアセットをアンロックするためにデータを供給することをパーティに求める技術は、ロッキングスクリプト内にデータのハッシュを埋め込むことを含む。しかし、これは、ロッキングスクリプトが生成される時点でデータが未決定である(例えば、知られておらず固定されていない)場合に問題を提示する。
【発明の概要】
【0007】
よって、相異なるノンアトミックトランザクションの結合を用いてアトミックトランザクションを実行する方法を提供することによって、ブロックチェーン技術を改善する方法及びシステムを提供することが望ましい。そのような、改善された解決法は、これより発明されている。よって、本開示に従って、添付の特許請求の範囲で定義されている方法が提供される。
【0008】
よって、出力シャッフルプロセスにおいて参加者コンピュータシステムの組を暗号的に識別するデータ構造を生成することと、シャッフルされた出力アドレスの組を参加者コンピュータシステムの組から取得することと、参加者コンピュータシステムの組に対応する寄与記録の組(例えば、デポジットトランザクションの組)がブロックチェーンへコミットされていると決定することと、シャッフルされた出力アドレスの組及びデータ構造に少なくとも部分的に基づいて複数のトランザクションを生成することと、複数のトランザクションを前記ブロックチェーンへサブミットすることとを有する、コンピュータにより実施される方法を提供することが望ましい。
【0009】
望ましくは、請求されているコンピュータにより実施される方法は、個々の参加者コンピュータシステムに関連する個別アセット混合トランザクションが失敗したと第1タイムアウト後に決定することと、個別アセット混合トランザクションが失敗したとの決定の結果として、個々の参加者コンピュータシステムが寄与記録の組からの補償を請求すること又は個々の参加者コンピュータシステムの寄与記録を再請求することを可能にする暗号情報を個々の参加者コンピュータシステムの組へ供給することとを更に有する実施形態であってよい。
【0010】
望ましくは、請求されているコンピュータにより実施される方法は、寄与記録の各組がロッキングスクリプトを含み、ロッキングスクリプトにより、トランザクション出力が、シャッフルされた出力アドレスの組に基づいて個々の参加者コンピュータシステムによって請求されることが可能になる実施形態であってよい。
【0011】
望ましくは、請求されているコンピュータにより実施される方法は、ロッキングスクリプトにより、入力が暗号情報を用いて再請求されることが可能になる実施形態であってよい。
【0012】
望ましくは、請求されているコンピュータにより実施される方法は、ロッキングスクリプトにより、第1タイムアウトよりも長い第2タイムアウト後に入力が再請求されることを請求されることが可能にある実施形態であってよい。
【0013】
望ましくは、請求されているコンピュータにより実施される方法は、ロッキングスクリプトがOP_CHECKSEQUENCEVERIFY演算子を含む実施形態であってよい。
【0014】
望ましくは、請求されているコンピュータにより実施される方法は、シャッフルされた出力アドレスの組が、シャッフルされた出力アドレスの組を参加者コンピュータシステムの組の中の各参加者コンピュータシステムへルーティングされるようにすることによって、取得される実施形態であってよい。
【0015】
望ましくは、請求されているコンピュータにより実施される方法は、寄与記録の組の中の各寄与記録が、コンピュータにより実施される方法を促進するディーラーへ支払われるトランザクション手数料を含む実施形態であってよい。
【0016】
望ましくは、請求されているコンピュータにより実施される方法は、データ構造が集積木であり、集積木のリーフノードが参加者コンピュータシステムの組を表す実施形態であってよい。
【0017】
望ましくは、請求されているコンピュータにより実施される方法は、個別アセット混合トランザクションにおける参加者コンピュータシステムが、集積木の中間ノードの下のリーフノードに対応する実施形態であってよい。
【0018】
望ましくは、請求されているコンピュータにより実施される方法は、各参加者コンピュータシステムが、集積木の各リーフノードに関連する値のハッシュを供給する実施形態であってよい。
【0019】
望ましくは、請求されているコンピュータにより実施される方法は、アセット混合トランザクションが、アセット混合トランザクションである実施形態であってよい。
【0020】
望ましくは、請求されているコンピュータにより実施される方法は、各参加者コンピュータシステムが、1つ以上のプロセッサと、1つ以上のプロセッサによって実行される結果として、暗号通貨ウォレットアプリケーションを実施する命令を記憶しているメモリとを有するコンピュータシステムである実施形態であってよい。
【0021】
また、プロセッサと、プロセッサによる実行の結果として、システムに、せいきゅうsあれている方法のいずれかを実行させる実行可能命令を含むメモリとを有するシステムを提供することも望ましい。
【0022】
コンピュータシステムのプロセッサによって実行される結果として、コンピュータシステムに、請求されている方法のいずれかを少なくとも実行させる実行可能命令が記憶されている非一時的なコンピュータ可読記憶媒体を提供することも望ましい。
【0023】
本開示は、検証方法/システムとして、及び/又はブロックチェーンを介したデジタルアセットの交換又は転送を制御する制御方法/システムとして記載され得る。いくつかの実施形態で、デジタルアセットは、暗号通貨の部分又はトークンである。以下で説明されるように、本開示はまた、ブロックチェーンネットワーク又はプラットフォームを介して操作を実行する新しい、改善されたかつ有利な方法のためのセキュアな方法/システムとしても記載され得る。
【0024】
本開示のこれら及び他の態様は、本明細書で記載される実施形態から明らかであり、それらを参照して説明される。本開示の実施形態は、これより、ほんの一例として、添付の図面を参照して説明される。
【図面の簡単な説明】
【0025】
図1】実施形態において、アセット混合を行うシステムの例を表す。
図2】実施形態において、9つの要素の組についての集積木の例を表す。
図3】実施形態において、各リーフノードが関連する要素e(i=1,・・・,4)を有している集積木の例を表す。
図4】実施形態において、マルチCoinJoinトランザクションの部分として行われる暗号化操作の例を表す。
図5】実施形態において、マルチCoinJoinトランザクションの部分として行われる暗号解除操作の例を表す。
図6】実施形態において、マルチCoinJoinトランザクションの部分として行われる出力アドレスの並べ替えの例を表す。
図7】実施形態において、マルチCoinJoinトランザクションの部分としてデポジットに対して参加者によって生成されるロッキングスクリプトの例を表す。
図8】実施形態において、マルチCoinJoinトランザクションにおいて4人の参加者によって生成、署名、及びブロードキャストされた寄与記録の例を表す。
図9】実施形態において、マルチCoinJoinトランザクションにおいて参加者によって生成及び署名された2つのCoinJoinトランザクションの例を表す。
図10】実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによる実行の結果として、マルチCoinJoinトランザクションを実行するプロセスの例を表す。
図11】実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによる実行の結果として、キー共有を実行し、マルチCoinJoinトランザクションでの使用のために集積木を構築するプロセスの例を表す。
図12】実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによる実行の結果として、出力アドレスを再配置し、デポジットを生成し、マルチCoinJoinトランザクションのためのCoinJoinトランザクションを生成するプロセスの例を表す。
図13】実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによる実行の結果として、マルチCoinJoinトランザクションのためにリターン及び補償を処理するプロセスの例を表す。
図14】様々な実施形態が実施され得るコンピュータシステムを表す。
【発明を実施するための形態】
【0026】
本文書は、ブロックチェーンに記録されたノンアトミックトランザクションの結合を用いてアトミックトランザクションを実行するようセキュリティ方法を実行するシステムについて記載する。実施形態において、システムは、ディーラーコンピュータシステムと、参加者コンピュータシステムの組とを識別する。参加者コンピュータシステムと協力して、ディーラーは、参加者コンピュータシステムへ供給される各参加者に特有の暗号情報を生成するために使用される集積木(accumulation tree)を生成する。各参加者コンピュータシステムは、リソースをアトミック操作へコミットするトランザクションを生成する。ここで、トランザクションは、暗号情報に少なくとも部分的に基づいて、ロッキングスクリプトにより保護される。様々な例で、リソースは、暗号キー、コード、暗号通貨の数量、未使用トランザクション出力であってよい。実施形態において、ロッキングスクリプトは、何らかの理由によりアトミック操作が失敗する場合に、タイムアウト後に、トランザクション入力の償還を提供する。ディーラーコンピュータシステムは、全ての参加者がアトミック操作に対して彼らのリソースを適切に満たしているかどうかを判定し、そうである場合に、複数のトランザクションを生成しブロックチェーンにコミットする。ブロックチェーンは、凝集効果において、アトミック操作を実行する。全ての参加者コンピュータシステムがアトミック操作を完了するために必要なリソースをコミットしているわけではない場合に、ディーラーコンピュータシステムは、参加者コンピュータシステムが彼らのコミットされたリソースを回復することを可能にする集積木に関連した特定の情報を供給する。このようにして、参加者は、アトミック操作が完了されること、又は活動にコミットされた如何なるリソースも返されることのいずれかの暗号保証(cryptographic assurance)を得ることができる。
【0027】
いくつかの例で、システムは、単一のアセット混合操作がブロックチェーン上で複数のトランザクションに及ぶことを可能にすることによって、アセット混合操作の有効性を改善するために使用されてよい。アセット混合トランザクションの場合に、あて先アドレスからの個人情報の除外は、必ずしも、トランザクションにおける参加者の身元を不明りょうにしない。意欲的な個人は、特定の移動及びあて先アドレスに個人を関連付けることが可能な解析を実行するために、外部データセットとともに、公に利用可能な台帳内のトランザクション情報を利用することがある。本明細書で記載される実施形態は、単一のアセット混合操作を複数のコンポーネントトランザクションに分割することによって、この懸案事項を軽減する。本明細書で記載されるアセット混合システムは、大規模コンピューティングプール、投票システム、及び暗号通貨トランザクションなどの代替可能資産のプールにおいて交換が行われる可能性がある様々な問題にも適用可能である。
【0028】
例えば、暗号通貨資産は、コインミキシングと呼ばれるアセット混合プロセスを用いて混合され得る。例えば、ビットコインのコインミキシング解決法は、n人のユーザのビットコイン入力をプールし、次いで、プールされたビットコインを、ユーザによって所有されているn個のアドレスの代替の組へ出力することによって、アドレス間のリンクを隠す。コインミキシングのCoinJoin実施は、1つの単一ビットコイントランザクションの使用を通じてコインミキシングプロセスを実行することによってプロセスを簡単にして、CoinJoinトランザクションにおいてユーザの入力をユーザの出力と正確にリンクする確率を1/nまで低下させる。CoinShuffleなどのミキシングサービスは、ユーザが参加しているトランザクションへコインを送るCoinJoinトランザクションを介してビットコインユーザの身元を不明りょうにして、ブロックチェーンを通る個人のコインの流れを追跡することを難しくする解決法を提供する。トランザクションに関わる出力をシャッフルするプロセスは、トランザクションの入力及び出力の間に不鮮明な状態を作り出す。通常、n人の参加者(各参加者はトランザクションにおいて1つの入力及び1つの出力を有している)を含むCoinJoinトランザクションの場合に、入力を出力と正確にリンクする(従って、参加者のコインフローを正確に推測する)確率は、1/nである。
【0029】
1つの実施において、システムは、複数の参加者から未使用暗号通貨出力をプールし、出力アドレスの順序を再配置し、それによって、第三者が追跡することがより困難であるCoinJoinトランザクションからの新しい出力を各参加者に供給する。実施形態において、参加者のグループは、出力アドレスの組をシステムへ供給する。システムは、出力アドレスの順序をランダム化し、並べ替えられた出力アドレスを使用して、多数の独立したCoinJoinトランザクションを生成する。トランザクションは、各参加者が、2つの独特のCoinJoinトランザクションに含まれている関連した入力及び出力を有するように、配置される。
【0030】
一般に、単一のCoinJoinトランザクションにおいて、個々のユーザは1つ(以上)の入力及び1つ(以上)の出力を有することになる。更に、ビットコイントランザクションの場合に、トランザクションサイズは1Mバイトに制限されており、これは、所与のトランザクションに含まれ得る入力及び出力の総数を制約し、従って、トランザクションに関連することができる参加者の数を制限する。
【0031】
本明細書で記載される様々な実例で、システムは、トランザクションへの参加者が2つの異なったトランザクション(例えば、ブロックチェーンに書き込まれている2つの異なったトランザクション記録)に含まれる彼らの入力及び彼らの出力を有し得るように、複数の独立したCoinJoinトランザクションを構築する。システムは、参加者が個々のリーフノードによって表現される集積木をディーラーコンピュータシステムに生成させることによって、これを達成することができる。参加者によって使用されるロッキングスクリプトは、トランザクションが閾時間量の後に成功裏に完了していない場合に、個々の参加者が、ディーラーコンピュータシステムの助けを借りて、又はいくつかの例では、助けなしで、失敗したトランザクションに寄与した如何なるアセットも再請求することができるトランザクションのマルチフェーズ実行を強行する。各参加者は、独立した全てのCoinJoinトランザクションが公開台帳に含まれる場合にその参加者が請求することができる、以前に同意した、及びCoinJoinトランザクションで混合された量と同様のビットコインの量をデポジットする。プロトコルは、CoinJoinトランザクションの1つが、そのトランザクションにおいて彼らの入力を加えると期待された参加者によって署名されない(例えば、トランザクションに割り当てられているサブグループ内の参加者に悪意がある)場合に、残りのトランザクションの1つに入力を加え署名した参加者が正当に補償されることを確かにする安全機構を備える。このプロトコルは、CoinJoinトランザクションのリンク不能性(unlinkability)である顕著な特徴を提供するので、CoinShuffleなどの単一CoinJoinトランザクションに基づく解決法と比べて許可可能な参加者の数を増やす。これは、ネットワーク上でCoinJoinトランザクションを署名及び送信する前に参加者によって行われたデポジットをロック及びアンロックするために参加者によって供給されたデータを用いて構築された静的な集積木(局所的及び大域的ダイジェスト)から導出された数量を用いて達成される。
【0032】
図1は、実施形態において、コインミキシングを実行するシステム100の例を表す。コインミキシングは、ユーザのグループが彼らのビットコインを一緒にプールし、それから、彼らのビットコインを代替のビットコインアドレスに分配してもらいたいと望むシステムである。そのような代替のアドレスは、ユーザの初期の組によって所有されてもされなくてもよい。システムは、外部の攻撃者に対する保護を提供する。これは、攻撃者が、一般的に、入力及び出力アドレスを関連付けることができないからである。例えば、n個の入力及びn個の出力がある場合に、入力を出力アドレスと正確に結びつける確率は、約1/nである。これは、一般的に、全ての参加者が混合プールにおいて同量の暗号通貨を入力及び出力する限りは当てはまる。
【0033】
図1に表される実施形態では、第1ユーザ102は第1クライアントコンピュータシステム104を操作し、第2ユーザ106は第2クライアントコンピュータシステム108を操作し、第3ユーザ110は第3クライアントコンピュータシステム112を操作する。各クライアントコンピュータシステムは、パーソナルコンピュータ、ラップトップコンピュータ、携帯型デバイス、ネットワーク家電、仮想コンピュータシステム、コンピュータサーバ、POS(point-of-sale)端末、又は他のコンピューティングデバイスであってよい。実施形態において、各コンピューティングデバイスは、クライアントデバイス上でメモリに記憶されている命令から成るクライアントアプリケーションをホストする。命令は、クライアントコンピュータシステムによる実行の結果として、クライアントアプリケーションの機能を実施する。クライアントアプリケーションは、ビットコイン台帳又は他の暗号通貨ブロックチェーンなどの、分散型記憶ネットワークに記憶されているブロックチェーン台帳とインターフェース接続する。いくつかの例で、各クライアントコンピュータシステムは、トランザクション記録を送信及び受信すること、又はコンピュータネットワークによって、ブロックチェーンとインターフェース接続する。コンピュータネットワークは、Ethernet(登録商標)若しくは光ファイバネットワークなどの有線ネットワーク、又はWi-Fi若しくはセルラーネットワークなどの無線ネットワークを含んでよい。
【0034】
実施形態において、3人のユーザの夫々は、ブロックチェーン114に記憶されるCoinJoinトランザクションへ入力及び出力を加える。ユーザの入力の夫々及びユーザの出力の夫々は、一致した暗号通貨の価値を有し、出力の順序付けは、ブロックチェーンを調べる攻撃者が、所与の出力がどのユーザからそもそも得られたかを知り得ないように、ランダムに配置される。
【0035】
この解決法のいくつかの実施は、特定の望ましくない特性を示し得る協調サービスプロバイダに依存する:
●協調サービスプロバイダが、ユーザによって供給されたビットコインアドレスへビットコイン入力を転送しないことによって、ビットコインを盗む可能性があるリスクが存在する。
●協調サービスプロバイダは、入力ファンド/アドレスと出力アドレスとの間のつながりに関する知識を持つことがある。サービスプロバイダがそうすることを選択するならば、サービスプロバイダは、この情報を意図的に又は誤って公開する可能性がある。
●一般に、協調サービスは、コインミキシングサービスの利用のために手数料を課す。
【0036】
本明細書で記載される様々な実施形態は、これら及び他の欠点を補償する。例えば、CoinJoinは、ビットコインアドレス間の参加者のファンドの移動において、1つの共有されたビットコイントランザクションを使用する。各ユーザは、彼らのビットコインをビットコイントランザクションへ入力として加え、各ユーザは、彼らのあて先出力ビットコインアドレスをトランザクションへ加える。単一の共有されたトランザクションを使用することによって、コインミキシングサービスのトランザクションコストは低減され得る。しかし、協調サービス(例えば、CoinJoin)に依存する実施は、協調サービスが危殆化される場合に匿名性の喪失を危険にさらすことがある。いくつかの実施で、必ずしも‘中央サーバー’それ自体は存在しないが、CoinJoinトランザクションにおける参加者は、それでもなお、トランザクション出力に対応するトランザクション入力を決定することが可能であり得る。例えば、入力アドレスが{A,B,C,D}であり、出力アドレスが{A’,B’,C’,D’}であるとする。ユーザが彼ら自身の情報をトランザクションに含める場合に、入力及び出力アドレスは、一般的に、同時にトランザクションに加えられ得る。この状況で、トランザクションの出力及び入力アドレスの順序は、それらがトランザクションに加えられる順序で相互に関連付けられてよく、トランザクションの参加者が入力アドレスと対応する出力アドレスとの間のリンクを推測することを可能にする。いくつかの実施で、ユーザは、彼らの出力アドレスを“公表”(announce)し、それをサービスによってプールに加えてもらい、それから、サービスによってシャッフルされた“出力アドレスの順序”を有してよい。しかし、そのような実施では、各ユーザの出力アドレスの公表は、公表者の入力及び出力アドレスの間のリンクを暴露する可能性がある。匿名性を維持するために、様々な実施は、第三者がユーザの出力アドレスを知っている確率をプロセスが1/nよりも増大さないように、出力アドレスをCoinJoinトランザクションに組み込む。ここで、nは、CoinJoinトランザクションにおける出力の数である。実施形態において、シャッフルプロセスは、後に複数のCoinJoinトランザクションに含まれるシャッフルされた出力アドレスの組を生成する。
【0037】
図2は、実施形態において、9個の要素の組について集積木T(ε)200の例を表す。示される例では、集積木は、9つの要素及び3つのレベルを有しており、各内部ノードは、3つの子ノードを有している。表されている例では、集積木は、根ノードr202を有している。根ノードr202は、3つの子ノード、すなわち、第1中間ノードd204、第2中間ノードe206、及び第3中間ノードf208を有している。3つの中間ノードの夫々は、3つの子ノードを有しており、子ノードの夫々は、集積木のリーフノードである。第1中間ノードd204は、第1子ノードa210、第2子ノードb212、及び第3子ノードc214を有している。第2中間ノードe206は、第1子ノードg216、第2子ノードh218、及び第3子ノードi220を有している。第3中間ノードf208は、第1子ノードj222、第2子ノードk224、及び第3子ノードl226を有している。
【0038】
様々な実施形態で、暗号アキュムレータは、ハッシュテーブルにデータを格納し、メンバーシップ認証を実行するために使用されてよい。いくつかの例で、アキュムレータは、RSAベース又は双線形写像アキュムレータである。様々な例で、静的アキュムレータ(固定されたメンバーの組を有する)及び動的アキュムレータ(組内のメンバーの追加又は削除を認める)が使用されてよい。静的双線形写像アキュムレータは、次のように実施されてよい:
、Gを、生成元(generators)g、gによる素数位数(prime order)pの2つの巡回乗法群(cyclic multiplicative groups)とする。また、Φ(g)=gであるような同型写像(isomorphism)Φ:G→Gが存在すると仮定する。位数pの巡回乗法群であるGを考えると、双線形ペアリングは、次の特性を有してe:G×G→Gと定義され得る:
●双線形性(Bilinearity):e(P,Q)=e(P,Q)ab∀P∈G、Q∈G及びa,b∈Z
●非退化形式(Non-degeneracy):(g,g)≠1。
●計算可能性(Computability):e(P,Q)∀P∈G、Q∈Gを計算するための効率的なアルゴリズムが存在する。
【0039】
続く例では、G=G=G及びg=g=gと設定され、ペアリングe:G×G→Gが考えられる。双線形ペアリングに基づく双線形写像アキュムレータは、累積値f’(E)=g(e1’+s)(e2’+s)・・・(en’+s)におけるn個の要素の組E=(e,・・・,e)を累積することができる。累積値はGの要素であり、それはZ の要素を累積する。要素(e’,・・・,e’)∈Gは、組E=(e,・・・,e)∈Gの元の要素の暗号ハッシュであり、すなわち、
【数1】
として、e’=h(e)。
【数2】
は、入力として巡回乗法群Gの要素を取り、出力として
【数3】
の整数を生成する衝突耐性ハッシュ関数である。最後に、sは、秘密を保たれるトラップドア(trapdoor)情報を表す。
【0040】
認証されたデータ構造を用いてデータを効率的に格納するために、集積木が使用される。これは、一般的に、一定の時間更新及び一定サイズ証明を提供する。集積木の使用は、一般的に、通信及び検証コストを下げるだけでなく、全ての可能性があるクエリへの解を予め計算する様々な代替案に対する記憶コストも下げる。
【0041】
様々な実施形態で、集積木は、クエリに関与するサブセットについてハッシュ値の正確さを検証するために使用される。組のための公開ツリーダイジェストはハッシュ値を裏付け、転じて、ハッシュ値は組を妥当性確認する。
【0042】
集積木は、0<ε<1として、T(ε)として表される。T(ε)は、n個のリーフを有する根付き木(rooted tree)に相当し、組Eのn個の要素が格納される。木のレベル数は、
【数4】
として定義され、一方、ノードごとの子ノードの数はO(nε)である。リーフ(すなわち、組要素)は、レベル0により識別される同じレベルにある。
【0043】
e∈[e,・・・,e]を格納する木T(ε)内の各リーフノードvについて、累積値ψ(v)は、その要素自体の値に等しいと定義される:

ψ(v)=e。
【0044】
レベル1<i<l(ここで、l=2)での木T(ε)内の各非リーフノードについて、累積値ψ(v)は、次のように定義される:
【数5】
ここで、C(v)は、ノードvの子ノードの組であり、ψ(u)は、ノードuの双線形局所的ダイジェストである。例えば、図2の集積木の場合に、C(v=d)={a,b,c}である。sは、スキームのトラップドアであり、
【数6】
は、衝突耐性ハッシュ関数である。
【0045】
組Eに属する所与の要素xの場合に、メンバーシップの証明π(x)は、集積木のレイヤごとに1つである証明の順序付けられたシーケンスπ(x)={π,i=1,・・・,l}を有する。証明の各要素は、レベルごとに要素の局所的ダイジェストα及びブランチウィットネスβから成る対に対応する:

π=(α、β),i=1,・・・,l。
【0046】
1<i<lとして、所与のレイヤについて、
【数7】
が成立し、ここで、S(v)は、木T(ε)内のノードvの兄弟(siblings)の組に対応する。例えば、図2の集積木の場合に、兄弟の組は、S(v=d)={e,f}である。
【0047】
所与のレイヤiの場合に、対応する証明要素は、次のコンポーネントを含む:
●根rへ要素xをリンクするノードのパスP(x):x→rで見つけられる前のレイヤ(レイヤi-1)内のノードの双線形ダイジェストを表すα。レイヤ1<i<lの場合に、αは、レイヤi-1に存在する全ての要素について同じである。
●クエリされているノードから木の根へのパスの欠落ノードが信頼できることを証明するウィットネスである“ブランチウィットネス”を表すβ
【0048】
証明は、一般的に、信頼できるパーティによって計算され、ユーザ/プローバ(prover)へ送られる。トラップ情報sは、しばしばプローバに知られていない。しかし、数量
【数8】
は、(一般的にサードパーティによって)公にされる。
【0049】
集積木の全体の大域的な双線形ダイジェストは、d=ψ(r)である。ここで、

ψ(r)=g(h(ψ(d))+s)(h(Ψψ(e))+s)(h(ψ(f))+s)

であり、rは、木の根(root)を示す。
【0050】
検証フェーズにおいて、ユーザは、その証明π(x)を検証は(verifier)へ供給する。gが公にされている場合に、検証者は、
1.α=xであることをチェックし、
2.i=2,・・・,lの場合に、e(α,g)=e(βi-1,gs+h(αi-1))であることを検証する。
【0051】
双線形写像特性を用いて、第2の関係はまた、次の数量を検証することと同等である:
【数9】
この例では、証明は、上記の関係が成立する場合に受け入れられる。
【0052】
本文書中、公開/秘密キー対は、参加者によって供給されたデータを用いて構築された集積木の局所的及び大域的ダイジェストを用いて生成される。キー対は、ブロックチェーンへの包含のためにCoinJoinトランザクションの提出前に参加者によって行われたデポジットをロック(し、後にアンロック)するために使用される。
【0053】
様々な実施形態は、2つのパーティ間の共有秘密(secret)を確立するためにキー共有アルゴリズムを使用する。
【0054】
ディフィー・ヘルマン(Diffie-Hellman)キー共有プロトコルは、2人のユーザが公開情報を交換することによって共有秘密を生成することを可能にするキー共有プロトコルである。いくつかの実施形態で、ディフィー・ヘルマンなどのキー共有アルゴリズムは、暗号通貨とともに使用されるステルスアドレスを生成するために使用されてよい。例えば、ステルスアドレスは、ビットコインプロトコルの匿名性を強化するために使用されてよい。ステルスアドレスが使用される場合に、ファンドの(潜在的な)受け手はシード値を発行し、それからアドレスが導出され得る。暗号通貨は、(受け手の既知の公開アドレスではなく)導出されたアドレスへ送られ、次いで、意図されたい受け手によって請求され得る。シードからアドレスを導出することは困難であるから、匿名性がもたらされる。いくつかの実施形態で、このアプローチは、受け手が正確なビットコイントランザクションを識別するために全ての入来トランザクションTxOutをスキャンする必要がある場合に、制約されることがある。
【0055】
ディフィー・ヘルマンキー共有プロトコルの作業内容の説明がここで示される。それは、楕円曲線上の一般化された離散対数問題の上に構成される。すなわち、楕円曲線ディフィー・ヘルマンキー共有(Elliptic curve Diffie-Hellman key exchange,ECDH)である。
【0056】
ECDHプロトコルは、2人のユーザ、すなわち、送り手及び受け手を含む。送り手は、受け手によって後に回復され得る導出されたアドレスへいくつかのファンドを転送するために共有秘密を使用する。
【0057】
●受け手は、秘密ECキーdと、対応する公開キーQ=d×gを生成する。この公開キーは、広く利用可能にされる。
【0058】
●送り手も、秘密キーeと、その対応する公開キーP=e×gを生成する。
【0059】
●両方の公開キーを交換又は公に利用可能にすることによって、送り手及び受け手は、c=H(e×Q)=H(d×P)として定義された秘密を共有する。ここで、Hは、暗号ハッシュ関数である。
【0060】
●共有秘密とともに受け手の公開キーを使用して、送り手は新しい公開キー:
Q’=Q+c×g
を生成する。ECの準同型性(homomorphic property)を使用して、この新しい公開キーは:
Q’=d×g+c×g=(d+c)×g=s×g
として再配置され得る。ここで、s=d+cは、新しく生成された公開キーQ’に関連する秘密キーである。この新しい公開/秘密キー対の特徴は、送り手及び受け手の両方がQ’を決定可能であるが、受け手しか、関連する秘密キーsを知らないことである。
【0061】
●ステルスアドレスの場合に、送り手は、自身の公開キーを直ぐには送らず、代わりに、新しい公開キーQ’へファンドを送り、値Pが置かれるOP_RETURNトランザクション出力を含める。
【0062】
●受け手は、それらのトランザクションのOP_RETURN出力の夫々に含まれるデータがPであると推測し、c=H(d×P)の共有秘密を計算する。検討中のトランザクションが公開キーQ+(c×g)によって生成されるアドレスへの支払いも有する場合に、そのアドレスのための秘密キーはd+cである。受け手のみが、そのアドレスにあるビットコインを使用する能力を有している。これは、d及びcの両方が受け手によって知られており、他者には一般的に知られていないからである。
【0063】
本文書は、ビットコインユーザによって所有されている入力及び出力アドレスの間のリンクが不明りょうにされるようにブロックチェーン上で複数の独立したCoinJoinトランザクションをブロードキャストすることを有する、アキュムレータに基づくマルチCoinJoinトランザクションサブミッション(Accumulators-based Multi-CoinJoin Transaction Submission,AMCT)について記載する。プロトコルは、参加者の組と、参加者に関する情報を凝縮するよう構築された集積木と、参加者の情報を受け取り、それを使用して、参加者と共有される秘密、並びに局所的及び大域的ダイジェストなどの、集積木から導出された値を構成するディーラーとを含む。参加者は、彼らの出力アドレスをシャッフルし、シャッフルされた出力アドレスの組は、1つ以上のCoinJoinトランザクションを生成するために使用されるサブセットに分けられる。AMCTプロトコルは、参加者が、出力アドレスのサブセットと交わらないサブグループに分けられることを可能にする。例えば、参加者は、2つの異なったCoinJoinトランザクションに含まれる自身の出力及び入力アドレスを有してよい。更に、CoinJoinトランザクションは、攻撃者が容易にそれらを結びつけることを防ぐように生成され得る。様々な例で、集積木から導出された値は、CoinJoinトランザクションがブロックチェーン上でブロードキャストされる前に参加者によって行われたデポジットをロック(し、後にアンロック)するために使用される。ディーラーは、1人以上の参加者が彼らの属するサブグループに関連するCoinJoinトランザクションに署名しない場合に、補償されるよう他の参加者によって必要とされる情報を公開することによって、セーフガードの役割を担ってよい。
【0064】
実施形態において、ディーラーは、信頼できる第三者の役割を担う。参加者は、n人の参加者の組Sであり、ここで、nは、2つの整数の積、n=N×mとして表現可能であり、Nは、組S内のサブグループ(S,・・・,S)の数であり、mは、所与のサブグループ内の参加者の数である。参加者の各サブグループSは、ビットコインブロックチェーン上で1つのCoinJoinトランザクションT をブロードキャストすることに関与する。
【0065】
各参加者は、それらのCoinJoinトランザクションに含まれるべき1つの入力及び1つの出力を有している。参加者は、一般的に、出力アドレスでのファンドの受け手ではない。すなわち、参加者は、そのアドレスの1つから、それが秘密鍵を所有している新しいアドレスへファンドを動かそうと試みていない。この場合に、ファンドは、受け手の署名によりアンロックされ得る。
【0066】
各CoinJoinトランザクションは、m個の入力及びm個の出力を含み、それらの夫々は、xビットコイン(BTC)を支出(アンロック)し又は受け取る。集積木T(ε)は、n人の参加者によって供給された要素(e,・・・,e)を格納するようディーラーによって構築される。
【0067】
集積木の構造は、組Sの間のサブグループ内の参加者の分布を反映している。すなわち、mは、集積木の最下層でのノードごとのリーフの数であり、Nは、最後から二番目の層でのノードの数である(N個の親ノードは、夫々m個のリーフを有する)。
【0068】
参加者の出力アドレスは、シャッフルされ、シャッフルされた出力アドレスの最終的な組は、m個の出力アドレスのN個のサブセットに分けられる。ディーラーは、出力アドレスのサブセットごとにCoinJoinトランザクションを生成する。次いで、ディーラーは、CoinJoinトランザクションを参加者Sのサブグループへ、彼らの各々の入力及び署名の付加のために送る。様々な例で、参加者は、その入力及びその出力を、異なったCoinJoinトランザクションに含まれている。追加の例では、ディーラーは、トランザクションのサイズに対する制限を解消するために、単一の大きいトランザクションを、複数の、より小さいトランザクションに分けてよい。
【0069】
ブロックチェーンでの包含のためのCoinJoinトランザクションの提示の前に、各参加者は、yBTCのデポジットをコミットする。デポジットは、P2SHアドレスへ送られ、2つの顕著な方法においてアンロックされ得る:
- 所与の時点ΔTより前に、全てのCoinJoinトランザクションがブロックチェーンに成功裏に含まれる場合に、集積木から導出された数量を使用する。
- 所与の時点ΔTより前に、全てのCoinJoinトランザクションがブロックチェーンに成功率に含まれない場合に、ディーラーによって示された数量を使用する。
【0070】
N個のCoinJoinトランザクションは独立してかつ準同時にサブミットされるべきであるが、参加者は、その入力を、そのサブグループに割り当てられているCoinJoinトランザクションに加えず、従って、そのトランザクションを不完全なまま/妥当でないままとすることが起こり得る。結果として、サブグループ内の参加者は、彼らの入力をアンロックしない。その間に、ブロックチェーンでの包含のために彼らのCoinJoinトランザクションに署名しサブミットした他のサブグループ内の参加者は、ブロックチェーン上でブロードキャストされなかったトランザクションに彼らの出力アドレスが含まれる場合に、彼らの入力を費やしながら、出力アドレスでコインを受け取らないリストがある。参加者にその役割を果たすよう、つまり、その入力をCoinJoinトランザクションにおいて付加し署名するよう強制することは困難又は不可能なことがある。従って、いくつかの実施形態で、自身の入力を費やしながら、他の参加者の不作法によりコインを受け取らなかった参加者を補償するメカニズムが提供される。CoinJoinトランザクションをブロックチェーンに含めることに成功しなかった参加者は、必ずしも悪意があるとは限らない。例えば、参加者は、プロトコル中に意図せず接続を失う可能性がある。また、1人の参加者がm個の入力/出力を有する1つのCoinJoinトランザクションのプロトコルをドロップした場合でさえ、トランザクションが失敗する可能性がある点に留意されたい。従って、悪意のある参加者と同じサブグループに属している参加者は、他の参加者の不作法に対して罰せられるべきではなく、またその恩恵を受けるべきでもない。
【0071】
AMCTプロトコルは、以下で詳細に記載される。集積木の構成と、参加者とディーラーとの間の情報の交換とについて論じる。それから、出力アドレスをシャッフルするプロセスについて記載する。それから、参加者のデポジットトランザクションの生成及び提示について論じる。次の項は、CoinJoinトランザクションの生成及び提示と、CoinJoinトランザクションの全て又は一部の提示後のリターン/補償請求とについて説明する。
【0072】
本文書にわたって、実施形態は、2人の参加者の2つのサブグループに分けられた4人の参加者に関する簡単な場合を参照して記載される。参加者のランダムな順序(又はシーケンス)U,U,・・・,Uを考える。ここで、n=N×mであり、Nは、組内のサブグループの数であり、mは、所与のサブグループ内の参加者の数である。一例において、n=4、N=m=2である。
【0073】
各参加者Uは、楕円曲線上のランダムな点eを選択し、そのハッシュe’=h(e)をディーラーへ送る。
【数10】
は衝突耐性ハッシュ関数である。ディーラーは、秘密s(トラップドア情報)を選択し、次の通りに集積木の大域的ダイジェストを再構成する:

d=ψ(r)=g(e’1+s)(e’2+s)・・・(e’n+s)
【0074】
トラップドア情報sは、参加者に未知である。しかし、数量g,gs2,・・・,gsnは、公にされる。
【0075】
ディーラーは、局所的ダイジェストψ(v),・・・,ψ(v)を計算する、ここで、v(i∈[1,N])は、集積木の最後から二番目の層にある親ノードの1つである。局所的ダイジェストも大域的ダイジェストも、参加者へ送られない。
【0076】
ディーラーは、ダイジェストdを秘密キーとして使用する。実施形態において、大域的ダイジェストは楕円曲線の点であるから、ディーラーは、それから導出された数vを選択する。例えば、vは、dの1つの座標(x又はy)、若しくはその2つの連結(和)、又はハッシュ関数が入力として楕円曲線からの点をとり、Z 場の数を出力する関数(参加者には未知)である場合に、大域的ダイジェストのハッシングにより得られる数、であることができる。
【0077】
ディーラーは、集積木の大域的ダイジェストに対応する楕円曲線内の点のx座標を使用する。このようにして、v=xが、秘密キーとして、Qが、関連する公開キーQ=v×g(gは、楕円曲線の生成元である)として定義される。
【0078】
ディーラーは、Qを参加者に利用可能にする。
【0079】
各参加者Uは、ランダムな秘密キーyを選択し、対応する公開キーP=y×gを公開する。
【0080】
参加者はまた、Z 場で、彼らがディーラーへ非公開で送る乱数(ソルト)も選択する(例えば、関連する暗号解読キーがディーラーによってのみ知られている参加者が、ディーラーによって公にされた暗号キーを用いて、彼らの乱数をディーラーへ送ってもよい)。ωは、参加者Uによって選択されたソルトとして表され、秘密キーと見なされ得る。ディーラー及び参加者Uの両方が、関連する公開キーW=ω×gを推定することができる。この公開キーは公にされない。
【0081】
本文書では、図3に表されているような、2人の参加者(m=2)の2つのサブグループ(N=2)に分けられたn=4人の参加者に関する簡単な例を用いて、様々な例が説明されている。
【0082】
図3は、実施形態において、各リーフノードが関連する要素e(i=1,・・・,4)を有している集積木の例を表す。示される例では、集積木は、4つの要素及び3つのレベルを有しており、各中間ノードは、2つの子ノードを有している。表されている例では、集積木は、根ノードr302を有している。根ノードr302は、2つの子ノード、すなわち、第1中間ノードa304及び第2中間ノードb306を有している。2つの中間ノードの夫々は、2つの子ノードを有しており、それらの夫々が集積木のリーフノードである。第1中間ノードa304は、第1子ノードe308及び第2子ノードe320を有している。第2中間ノードb306は、第1子ノードe312及び第2子ノードe314を有している。
【0083】
最初の2人の参加者(U,U)は局所的ダイジェストψ(a)を共有し、一方、参加者(U,U)の第2サブグループは局所的ダイジェストψ(b)を共有する。この例の大域的ダイジェストは、次の関係:d=ψ(r)=g(h(ψ(a))+s)(h(ψ(b))+s)によって与えられる。
【0084】
図4は、実施形態において、マルチCoinJoinトランザクションの部分として実行される出力シャッフルの例を表す。実施形態において、参加者によって与えられた出力アドレスの組をシャッフルするプロセスは、2つのフェーズ、すなわち、暗号化フェーズ及び暗号解読フェーズを含む。
【0085】
暗号化フェーズにおいて、各参加者Uは、対応する公開/秘密キー対(E,k)を有し、ここで、E=k×gである(gは、プロトコルによって選択された楕円曲線の生成元である)。公開キーE,E,・・・,Eはディーラーへ送られ、ディーラーは、それらを他の参加者に対して、参加者U,U,・・・,Uの順序が彼らに知られないように利用可能にする。例えば、ディーラーは、公開キーを、順序付きリスト又はアレイの形で利用可能にし得る。
【0086】
暗号化フェーズにおいて、第1参加者Uは、第1参加者の公開キーEにより第1参加者の出力アドレスOを暗号化する。結果として得られた暗号化された出力アドレスは、“シャッフルされた出力の組”(set of shuffled outputs,SSO)を有する。
【0087】
は、次の参加者Uの公開キーであるEでSSOを暗号化し、暗号化されたSSOをUへ転送する。次いで、Uは、kを用いてSSOを暗号解読し、Eを用いてUの出力アドレスOを暗号化し、この新たに暗号化されたアドレスをSSOに加える。Uは、SSO内の暗号化されたアドレスの順序をシャッフルし、シャッフルされたSSOをEで暗号化し、それから、暗号化されたSSOを第3の参加者Uへ転送する。このプロセスは、Uに達するまで続く。ここで、nは、プロトコルにおける参加者の総数である。実例では、例を簡単にするために、n=4が選択される。しかし、一般的に、nの数は、よりずっと大きい方が好ましい。最後の参加者の暗号化された出力アドレスがSSOに加えられた後、Uは最後のシャッフルを実行し、SSOをEで暗号化し、SSOを最初の参加者Uへ送り返す。
【0088】
図4に表されている例では、第1参加者402は、第1参加者の出力アドレス412を暗号化し、アドレスを、シャッフルされた出力の第1の組410に加える。第1参加者402は、第2参加者404の公開キーを用いて、シャッフルされた出力の第1の組410を暗号化し、シャッフルされた出力の暗号化された第1の組を第2参加者404へ供給する。
【0089】
第2参加者404は、第2参加者の出力アドレス418を暗号化し、アドレスを、第1参加者の出力アドレス416を含むシャッフルされた出力の第2の組414に加える。第2参加者404は、第3参加者406の公開キーを用いて、シャッフルされた出力の第2の組414を暗号化し、シャッフルされた出力の暗号化された第2の組を第3参加者406へ供給する。
【0090】
第3参加者406は、第3参加者の出力アドレス426を暗号化し、アドレスを、第1参加者の出力アドレス422及び第2参加者の出力アドレス424を含むシャッフルされた出力の第3の組420に加える。第3参加者406は、第4参加者408の公開キーを用いて、シャッフルされた出力の第3の組420を暗号化し、シャッフルされた出力の暗号化された第3の組を第4参加者408へ供給する。
【0091】
第4参加者408は、第4参加者の出力アドレス436を暗号化し、アドレスを、第1参加者の出力アドレス430、第2参加者の出力アドレス432、及び第3参加者の出力アドレス434を含むシャッフルされた出力の第4の組428に加える。第4参加者408は、第1参加者402の公開キーを用いて、シャッフルされた出力の第4の組を暗号化し、シャッフルされた出力の暗号化された第4の組を第1参加者402へ供給する。
【0092】
図5は、実施形態において、マルチCoinJoinトランザクションの部分として実行される暗号解読動作の例を表す。実施形態において、暗号解読フェーズの部分として、SSOは、n人の元の参加者の夫々へルーティングされる。最初の暗号化シャッフルループの終わりに、第1参加者U 502は、シャッフルされた出力の第1の組540を持っている。シャッフルされた出力の第1の組540は、第1の暗号化された出力アドレス542、第2の暗号化された出力アドレス544、第3の暗号化された出力アドレス546、及び第4の暗号化された出力アドレス548を含む。U 502は、SSOを暗号解読し、SSOから第1参加者の暗号化された出力アドレス542を探し、関連する秘密キーkを用いてアドレスを暗号解読する。
【0093】
その時点で、第1参加者は、SSOにおけるその出力アドレスの新しい位置を知る。暗号解読フェーズ中に、参加者は、彼らの出力アドレスの位置をチェックし、それにより、彼らは、それを含むCoinJoinトランザクションをブロードキャストすることにどのサブグループが関与しているかを後に知る。しかし、参加者は、他の参加者の出力の位置を知らないままである。
【0094】
そのために、ディーラーは、一時的な(ephemeral)公開/秘密キー対(E,k)を生成し、公開キーを参加者に利用可能にする。参加者は、Eを使用して、シャッフルされたSSO内の彼らの出力アドレス(図5では、組510のアドレス512、組520のアドレス522、524、組530のアドレス532、534、536、及び組540のアドレス542、544、546、548として表されている)を暗号化する。
【0095】
暗号解読フェーズが進むにつれて、第1参加者は、その出力アドレスを、関連する秘密キーkを用いて暗号解読し、OをEで再暗号化する。次いで、Uは、新しいSSOを第2参加者の公開キーPで暗号化し、第2の暗号化された組510をU 504へ転送する。第2の暗号化された組510は、第1の暗号化された出力アドレス512、第2の暗号化された出力アドレス514、第3の暗号化された出力アドレス516、及び第4の暗号化された出力アドレス518を含む。第2参加者は、kを用いてSSOを暗号解読し、第2参加者の出力アドレス514を見つけ、それをkで暗号解読し、それをEで再暗号化する。次いで、U 504は、新しいSSOを公開キーPで暗号化し、第3の暗号化された組520をU 506へ転送する。第3の暗号化された組520は、第1の暗号化された出力アドレス522、第2の暗号化された出力アドレス524、第3の暗号化された出力アドレス526、及び第4の暗号化された出力アドレス528を含む。第3参加者は、kを用いてSSOを暗号解読し、第3参加者の出力アドレス514を見つけ、それをkで暗号解読し、それをEで再暗号化する。次いで、U 506は、新しいSSOを公開キーPで暗号化し、第4の暗号化された組530をU 508へ転送する。第4の暗号化された組530は、第1の暗号化された出力アドレス532、第2の暗号化された出力アドレス534、第3の暗号化された出力アドレス536、及び第4の暗号化された出力アドレス538を含む。様々な例で、プロセスは、各参加者がその暗号化された出力アドレスをSSOで見つけ、それをその対応する暗号解読(及びEで暗号化)された値で置き換えるまで続く。
【0096】
最後の参加者508は、SSOをEで暗号化し(それをEで暗号化する代わりに)、暗号化されたSSOをディーラーへ送る。それから、ディーラーは、暗号化された出力の組を持っている。ディーラーのみが秘密キーkを知っているので、組及びその中の各出力アドレスを暗号解読することができる。
【0097】
その時点でのSSO内の出力アドレスの入れ替えは、出力がCoinJoinトランザクションに含まれている最終的な順序を表す。
【0098】
図6は、実施形態において、マルチCoinJoinトランザクションの部分として実行される出力アドレスの並べ替えの例を表す。出力アドレスが上述されたようにシャッフルされた後、各参加者は、シーケンス内の彼らの最初の位置と、彼らの出力アドレスの最終的な位置とを知っている。図5は、4人の参加者の例における出力アドレスのとり得る最終的な順序を表す。この例では、第3参加者Uは、その出力アドレスがSSO内の最初の要素であることを知っている。結果として、Uは、その出力アドレスが最初のCoinJoinトランザクションに含まれることになると知る。
【0099】
この例では、夫々2人の参加者の2つのサブグループに分けられた4人の参加者の組が考えられている。従って、ディーラーは、2つのCoinJoinトランザクション、すなわち、図6に表されているT 602及びT 604を生成すると期待される:
- 第1トランザクションT 602は、第3及び第1参加者(夫々U及びU)の出力アドレス606を含む。
- 第2トランザクションT 604は、第2及び第4参加者(夫々U及びU)の出力アドレス608を含む。
【0100】
ディーラーは、これら2つのCoinJoinトランザクションを生成し、それらを参加者へ送る。参加者は、彼らの入力を付加し、トランザクションに署名し、それらを、ブロックチェーンに含めるためにサブミットする。ディーラーが上記のトランザクションを参加者へ送る前に、各参加者は、プロトコルが全てのCoinJoinトランザクションのブロードキャストの成功で終わる場合に後に再請求可能であるいくらかのコインを彼らがアンロックするトランザクションを生成しブロードキャストする。実施形態において、第1参加者は第1入力610をコミットし、第2参加者は第2入力612をコミットし、第3参加者は第3入力614をコミットし、第4参加者は第4入力616をコミットする。プロトコルが時期尚早に終わる(全てのCoinJoinトランザクションがブロードキャストされるわけではない)場合に、補償メカニズムが考えられる。
【0101】
実施形態において、プロトコルは、プロトコルに関わっているトランザクションがリンク不可能であることを確実にする。これは、攻撃者が、ネットワークへ送られたCoinJoinトランザクションを容易にリンクすることができないことを意味する。その上、デポジットトランザクションとCoinJoinトランザクションとの間にリンクは確立されない。従って、集積木から導出された数量に加えて、ディーラーと参加者との間の共有秘密を用いて、後述されるように、P2SHアドレスが生成される。
【0102】
公に利用可能にされた情報と、ディフィー・ヘルマンキー共有プロトコルとを用いて、ディーラーは、参加者Uごとに秘密cを構成し、当該参加者と共有する:

=H(v×P)=H(Q×y

ここで、Hは、入力として楕円曲線からの点をとり、Z 場の数内の数を出力するハッシュ関数(参加者に知られている)である。
【0103】
参加者は、新しい公開キーを生成するために、この共有秘密を使用する:

=P+Q+c×g

=s×g

なお、s=y+v+cである。sは、Bに関連する秘密キーである。P及びQは公に知られているが、一般的に、ディーラー及び参加者Uしか共有秘密cを知らない。結果として、ディーラー及び参加者Uのみが公開キーBを知っており、一方、誰(参加者又はディーラー)も、関連する秘密キーsを知らない(vはディーラーによってのみ知られており、yは参加者Uによって秘密にされている)。ディーラーは、公開キーBを用いて、Uによって生成されたビットコインアドレスの妥当性を検証することができる。このアドレスへ送られたファンドをアンロックすべく、参加者Uは、秘密キーsを再構成するためにv(すなわち、集積木の大域的ダイジェスト)を計算する必要がある。これはまた、参加者のファンドを盗もうと試みる悪意あるディーラーに対して参加者を守る。
【0104】
各参加者Uは、乱数ωを選択しディーラーへ送る。SSO内の出力アドレスの最初及び最終の順序を知っているので、参加者は次の公開キーを生成する:

i→j=W+P=ci→j×g

なお、ci→j=ω+yである。ここで、iは、出力アドレスの最初のインデックス(シーケンス内の参加者Uの実際の位置)に対応し、jは、シャッフル後の出力のインデックスに対応する。Pは、参加者Uに利用可能にされた公開キーである。ディーラー及び参加者Uの両方が公開キーθ及びPを知っており、このことは、公開キーCi→jから導出された如何なるアドレスの妥当性も検証することをディーラーに可能にするが、ディーラー及び参加者のどちらも、関連する秘密キーci→jを知らない。実際に、プロトコルのその時点で、誰も秘密キーci→jを知らない。最初の部分(ω)は、ディーラー及び参加者Uによって知られており、一方、第2の部分(y)は、参加者Uによってしか知られていない。ディーラーがωを公開すべきであったならば、そのとき初めて、参加者Uは、秘密ci→jを計算し、Ci→jから導出されたアドレスへ送られたファンドをアンロックし得る。
【0105】
図7は、実施形態において、マルチCoinJoinトランザクションの部分としてデポジットのために参加者によって生成されたロッキングスクリプト700の例を表す。
【0106】
妥当性がディーラーよって検証される参加者Uごとに、2つの新しい公開キーB702及びCi→j706が生成される:
- B=s×g(なお、s=y+c)。参加者Uのみが秘密キーsを知っている。
- Ci→j=ci→j×g(なお、ci→j=ω+y)。ディーラー及び参加者Uの両方が公開キーCi→jを知っている。参加者Uは公開キーCi→jを知らない点に留意されたい。しかし、(ある時点で)ディーラーがωiを公開すべきであったならば、その場合に、参加者U(のみ)は、秘密ci→jを計算し得る。
【0107】
これら2つの公開キーを用いて、参加者Uは、図7に示されるように、次のロッキングスクリプト700を生成する。スクリプトは、ブロックチェーンでの包含のためのCoinJoinトランザクションの完成及び提出の前に、各参加者によって作られたyBTCのデポジットをアンロックするために使用される。
【0108】
ロッキング時間パラメータは、オペコードOP_CHECKSEQUENCEVERIFYを用いて定義される。ビットコインスクリプト記述システムのためのこの新しいオペコード(OP_CHECKSEQUENCEVERIFY)は、BIP112で導入された。それは、使用されている出力の経過時間に基づいて、スクリプトの実行経路が制限されることを可能にする。
【0109】
ΔT704は、ブロックチェーン上のトランザクションの確認後の期間に対応し、その間、出力は使用不可能である(このUTXOをアンロックしようとする如何なるトランザクションも、ブロック内の使用済み出力の経過時間又は特定の時間スパンまでマイニングされない)。
【0110】
スクリプト700は、参加者UiによってブロードキャストされたデポジットトランザクションD のUTXOをアンロックするために2つのオプション、すなわち、秘密sに関連する署名を供給することによる任意の時点、又は秘密ci→j706に関連する署名供給することによるΔT704の後、を提示する。
【0111】
図8は、実施形態において、マルチCoinJoinトランザクションにおいて4人の参加者によって生成、署名、及びブロードキャストされたデポジットトランザクション800の例を表す。デポジットトランザクション800は、ブロックチェーンに含めるためにサブミットされる。ブロックチェーンに含まれると、ディーラーは、部分的なCoinJoinトランザクションを参加者へ、ブロードキャスト前の彼らの入力の包含及び署名のために転送することができる。
【0112】
図8に表されている実施形態は、第1デポジットトランザクション802、第2デポジットトランザクション804、第3デポジットトランザクション806、及び第4デポジットトランザクション808を示す。各デポジットトランザクションは、対応する参加者によってサブミットされる。第1デポジットトランザクション802は、yBTCをコミットする第1入力810を含む。第2デポジットトランザクション804は、yBTCをコミットする第2入力812を含む。第3デポジットトランザクション806は、yBTCをコミットする第3入力814を含む。第4デポジットトランザクション808は、yBTCをコミットする第4入力816を含む。
【0113】
実施形態において、各デポジットトランザクションは、yBTCを3つの条件のうちの1つへ支払う出力を含む。第1デポジットトランザクション802は、第1出力スクリプト818を含む。第2デポジットトランザクション804は、第2出力スクリプト820を含む。第3デポジットトランザクション806は、第3出力スクリプト822を含む。第4デポジットトランザクション808は、第4出力スクリプト824を含む。図8に示される実施形態では、各デポジットトランザクションの出力は、3つの方法で請求され得る。出力は、成功したCoinJoinトランザクションの部分として特定の参加者によって請求されてよく、出力は、特定の量の時間ΔTの後にデポジッタ(depositor)によって請求されてよく、あるいは、出力は、ΔTよりも長い第2時間量の後にデポジッタによって請求されてよい。
【0114】
図8に示される実施形態では、デポジットトランザクションにおいてUTXOをアンロックするための第3のオプションが含まれており、このオプションは、時間スパンΔT’>ΔTの後に利用可能である。第3のオプションは、(例えば、ディーラーに対する保護を提供するために、)プロトコルが時期尚早に終わる場合に特定の時点後に参加者が彼らのファンドを償還することを可能にするセーフガードである。この第3のオプションでは、参加者は、(ΔT’後に)ファンドがアンロックされるために、その署名を供給する。図7のスクリプトは、この第3のオプションを含めるよう変更され得る。
【0115】
ブロックチェーンに含まれると、ディーラーは、部分的なCoinJoinトランザクションを参加者へ転送する。
【0116】
図9は、実施形態において、マルチCoinJoinトランザクションにおいて参加者によって生成及び署名された2つのCoinJoinトランザクションの例を表す。
【0117】
この例で、ディーラーは、SSOにおいて与えられた出力アドレスを含めるとともに、OP_RETURN演算子を使用してトランザクションに余分の情報を含めながら、CoinJoinトランザクションT 902及びT 912を生成する。第1CoinJoinトランザクションは、第1入力904、第2入力906、第1出力908、及び第2出力910を含む。第2CoinJoinトランザクションは、第1入力914、第2入力916、第1出力918、及び第2出力920を含む。
【0118】
集積木内の全ての要素のハッシュ及びトラップドア情報sを知っているので、ディーラーは、集積木の局所的ダイジェスト(図3のψ(a)及びψ(b))を計算する。ディーラーは、参加者のサブグループの局所的ダイジェストを、サブグループ内の参加者がブロードキャスト前に完了する必要があるCoinJoinトランザクション内の余分の明白にアンロック可能な出力として付加する。
【0119】
次いで、ディーラーは、各不完全なCoinJoinトランザクションを各サブグループ内の第1参加者へ送る。例として、T がUへ送られ、T がUへ送られる。所与のサブグループ内の参加者は、協働して、彼らの各々の要素のハッシュを交換してよく、それにより、彼らは、彼らの共通の局所的ダイジェストを計算し、ディーラーによってOP_RETURNスクリプトに置かれたデータを検証する。
【0120】
サブグループ内の第1参加者は、彼らの入力を付加し、フラグSIGHASH_ALL|ANYONECANPAYを用いてトランザクションに署名する。次いで、それは、部分的に署名されたトランザクションを次の参加者へ転送する。これは、サブグループ内の最後の参加者がCoinJoinトランザクションに付加及び署名し、完成したCoinJoinトランザクションをブロックチェーン上でブロードキャストするまで続く。
【0121】
図10は、実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによって実行される結果として、マルチCoinJoinトランザクションを実行するプロセスの例を表す。フローチャートは、ブロック1002から開始するプロセス1000を表す。ブロック1004で、ディーラーは、CoinJoinトランザクションを生成するための集積木を生成し、参加者は、ディーラーとのキー共有を実行する。ブロック1006で、参加者は、CoinJoinトランザクションのための最終的な順序付け及びグループ分けを決定するよう彼らの出力アドレスをシャッフルする。ブロック1008で、各参加者は、多数のBTCをコミットするデポジットトランザクションを生成する。
【0122】
決定ブロック1010で、ディーラーは、全ての参加者が彼らのデポジットをブロックチェーンへコミットしたかどうかを判定する。全ての参加者が彼らのデポジットをブロックチェーンへコミットしていない場合には、実行はブロック1012で停止し、CoinJoinプロセスは中止される。全ての参加者が彼らのデポジットをブロックチェーンへコミットしたとディーラーが決定する場合には、実行はブロック1014へ進み、ディーラーはCoinJoinトランザクションを生成し、CoinJoinトランザクションは、必要な署名を得るために参加者の間でルーティングされる。ブロック1016で、ディーラーは、トランザクションが成功裏に署名されブロックチェーンへコミットされたかどうかを判定し、一部又は全てのトランザクションで問題があった場合には、ディーラーは、フィールドトランザクションの適切な参加者に返還又は補償する動作を実行する。
【0123】
実施形態において、時点Tは、全てのCoinJoinトランザクションがその時点に達する前にブロックチェーンに含まれるべきであるように、ディーラーと参加者との間で取り決められる。その時点に達すると、N個全てのCoinJoinトランザクションがブロックチェーンに含まれることになるか、又はそうではない。
【0124】
場合1:Tの前に、N個全てのCoinJoinトランザクションがブロックチェーンに含まれる。
【0125】
CoinJoinトランザクションは全て、Tより前にブロックチェーンに含まれており、参加者は、各OP_RETURNスクリプトのデータを収集する。次いで、参加者は、集積木の大域的ダイジェストを計算することができる。実際に、2つのCoinJoinトランザクションのみがブロードキャストされる例では、大域的ダイジェストは、次のように、局所的ダイジェストの関数として表現され得る:

d=ψ(r)=g(h(ψ(a))+s)(h(ψ(b))+s)
【0126】
【数11】
は公にされていることを思い出されたい。
【0127】
参加者Uは、この場合に、s=v+yを計算することができる。ここで、vは、大域的ダイジェストから導出される。参加者Uは、先立ってブロードキャストしたデポジットトランザクションD において送られたファンドをアンロックすることができる。
【0128】
場合2:Tの前に、N個全てのCoinJoinトランザクションがブロックチェーンに含まれていない。
【0129】
何らかの理由により参加者が、そのサブグループに関連したCoinJoinトランザクションにその入力を付加して署名しない場合に、そのトランザクションは決してブロックチェーンに含まれない。
【0130】
結果として、参加者は、集積木の大域的ダイジェストを再構成することができないので、場合1のように彼らのデポジットで使用されているファンドをアンロックすることができない。
【0131】
この場合に、参加者は、4つのカテゴリに入る。
【0132】
カテゴリ1:自身の入力を使用しており(彼らが署名したCoinJoinトランザクションがブロックチェーンに含まれている)、自身の出力アドレスでコインを受け取った(彼らの出力アドレスが、ブロックチェーンに含まれているCoinJoinトランザクションの1つに含まれている)参加者。そのような参加者は、一部又は全てのCoinJoinトランザクションのブロードキャスト後に-yBTCの差引残高を有している。
【0133】
カテゴリ2:自身の入力を使用したが、自身の出力アドレスでコインを受け取っていない参加者。そのような参加者は、一部のみのCoinJoinトランザクションのブロードキャスト後に-x-yBTCの差引残高を有している。
【0134】
カテゴリ3:自身の入力をアンロックしなかった(彼らが署名した又は署名しなかったトランザクションが送られなかったか又は妥当でなかったために、ブロックチェーンに含まれていない)が、自身の出力アドレスでコインを受け取る参加者。そのような参加者は、一部のみのCoinJoinトランザクションのブロードキャスト後にx-yBTCの差引残高を有している。
【0135】
カテゴリ4:自身の入力をアンロックしておらず、自身の出力アドレスでコインを受け取ってもいない参加者。そのような参加者は、CoinJoinトランザクションの一部のブロードキャスト後又は全くCoinJoinトランザクションがブロードキャストされなかった後、-yBTCの差引残高を有している。
【0136】
場合1は、全ての参加者がカテゴリ1であるシナリオに対応する。
【0137】
ディーラーは、参加者がカテゴリ2に入る場合に、参加者が彼らのデポジットを再請求し、場合によっては補償されるのを助けるよう、時間窓[T,ΔT]を有している。
【0138】
ディーラーは、成功裏にブロックチェーンに含まれているCoinJoinトランザクションにおいて出力アドレスが具現されている参加者のωの値の組を明らかにする。これは、CoinJoinトランザクションに自身の入力を付加し署名した参加者であって、カテゴリ2又は4に入る可能性がある者が正当に補償されることを可能にする。
【0139】
次いで、残りの参加者は、時点t>ΔTで、彼らのデポジットトランザクションにおいて送られたファンドを、それらが補償フェーズ中に他の参加者によって使用されないままである場合に、償還することができる。
【0140】
ディーラーは、時間ΔTが経過する前に、ωの値のサブセットを明らかにすべきである。実際に、1つを除いて全てのCoinJoinトランザクションがブロックチェーンに含まれる場合に、自身に割り当てられているCoinJoinトランザクションをブロードキャストしなかった悪意あるサブグループ内の一部又は全ての参加者は、全ての局所的ダイジェストを知っており、従って、各参加者のデポジットトランザクションで使用されているファンドをアンロックするのに必要な大域的ダイジェストを再構成することができる可能性がある。その場合に、悪意ある参加者が、そのグループに割り当てられているCoinJoinトランザクションにその入力を付加していないのに、他のCoinJoinトランザクションに含まれているその出力アドレスでコインを受け取るシナリオが想像され得る(カテゴリ3)。ΔTの後、そのデポジットトランザクションで送られたUTXOが既に請求されている場合を除いて、その局所的ダイジェストを知っている参加者は、大域的ダイジェストを再構成し、当該UTXOを収集することができる。
【0141】
例えば、4人の参加者に基づく例において、第3参加者がT に署名しない場合を考える。
【0142】
時点T<t<ΔTで、4人の参加者の差引残高は、次の通りである:
【表1】
【0143】
次いで、ディーラーは、値の組{ω,ω}を明らかにする。これは、第1参加者が数量c3→1=y+ωを計算することを可能にし、一方、第2参加者は、C1→2=y+ωを計算する。従って、第1参加者は、D におけるUTXOをアンロックすることができ、一方、第2参加者は、D におけるUTXOをアンロックすることができる。
【0144】
時点ΔT<t<ΔT’で、4人の参加者の差引残高は、次のように変化している:
【表2】
【0145】
ΔT’が経過した後、残り2つのデポジットトランザクションD 及びD におけるUTXOは、それらの元の創作者によって使用され得る。第2及び第4参加者は、彼らのデポジットを再請求する。
【0146】
時点t>ΔT’で、4人の参加者の差引残高は、次のように回復される:
【表3】
【0147】
デポジットトランザクションごとに使用されるビットコインの量、すなわち、yBTCは、CoinJoinトランザクションで混合された量xBTCに極めて近いはずであり、それにより、参加者ごとの総差引残高は、CoinJoinトランザクションが全てブロードキャストされるか否かにかかわらずゼロに近い。CoinJoinトランザクション及びデポジットトランザクションに含まれているマイナーの異なる手数料に起因する小さい差が存在し得る。
【0148】
図11は、実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによって実行される結果として、キー共有を実行し、マルチCoinJoinトランザクションでの使用のために集積木を構築するプロセスの例を表す。フローチャートは、各参加者コンピュータシステムUが要素eを生成し、要素のハッシュh(e)及びソルトwをディーラーへ送るブロック1102から開始するプロセス1100を表す。ブロック1104で、ディーラーは、トラップドア情報sを選択し、集積木を生成する。ブロック1106で、トラップドア情報sは、ディーラーによって秘密に保たれるが、ディーラーは、値がトラップドア情報sから導出された楕円曲線上の点である
【数12】
を公開する。ここで、nは、参加者の数又は木のリーフの数である。ブロック1108で、ディーラーは、公開キーQ=v×gを生成し、公開キーを公開する(v=x)。ブロック1110で、ディーラーは、公開キーE=k×gを公開する。ブロック1112で、各参加者Uは、彼らの公開キーE=k×g及びP=y×gを公開する。
【0149】
図12は、実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによって実行される結果として、マルチCoinJoinトランザクションのために出力アドレスを再配置し、デポジットを生成し、CoinJoinトランザクションを生成するプロセスの例を表す。プロセス1200は、マルチCoinJoinトランザクションの各参加者が、図4に表されているように、彼らの出力アドレスのシャッフルを実行するブロック1202から開始する。ブロック1204で、シャッフルされた出力アドレスの組は、ディーラーコンピュータシステムへ供給される。ブロック1206で、ディーラーは、シャッフルされた出力アドレスを複数のサブセットに分け、各サブセットがビットコイントランザクションになる。ブロック1208で、各参加者は、上述されたように彼らの特定のロッキングスクリプトを生成し、そのデポジットトランザクションにおいてある量のビットコインをコミットして、マルチCoinJoinトランザクションに資金を出す。
【0150】
ブロック1210で、ディーラーは、デポジットが全ての参加者によってコミットされたかどうかを判定する。全ての参加者が彼らのデポジットをコミットしていない場合には、タイムアウト後に、実行はブロック1212へ進み、マルチCoinJoinトランザクションは中止される。ブロック1214で、ディーラーコンピュータシステムは、サブセットごとにCoinJoinトランザクションを生成し、次いで、各トランザクションをそのサブセット内の第1参加者へ送る。ブロック1216で、参加者は、参加者間でトランザクションをルーティングし、各参加者はトランザクションに署名する。ブロック1218で、ディーラーは、何らかの変換又は補償が必要とされるかどうかを判定し、図13で記載されるように、関連する動作を実行する。
【0151】
図13は、実施形態において、ディーラーコンピュータシステム及び1つ以上の参加者コンピュータシステムによって実行される結果として、マルチCoinJoinトランザクションのために返還及び補償を処理するプロセスの例を表す。プロセス1300は、ブロック1302から開始する。決定ブロック1304で、ディーラーコンピュータシステムは、全てのトランザクションがブロードキャストされブロックチェーンにコミットされたかどうかを判定する。全てのトランザクションがブロードキャストされている場合には、実行は決定ブロック1306へ進む。決定ブロック1306で、第1経過時間が経過していない場合には、実行は決定ブロック1304へ戻る。第1経過時間が経過している場合には、実行はブロック1308へ進み、参加者は大域的ダイジェストを決定し、デポジットにおいてコミットされたファンドをアンロックし、そして、実行はブロック1310へ進み、プロセスは完了する。
【0152】
決定ブロック1304で、全てのトランザクションがブロードキャストされブロックチェーンにコミットされていないとディーラーコンピュータシステムが決定する場合には、実行はブロック1312へ進み、ディーラーは、出力アドレスが正常なデポジットに含まれているが、動作に問題があるサブセットに含まれている参加者のためのソルトを公開する。ブロック1314で、トランザクションにおいて差引残高がマイナスである参加者は、彼らの秘密キーを決定し、彼らのデポジットを回収するために支払われる如何なる補償もアンロックする。決定ブロック1316で、システムは、ブロック1318へ進む前に、第1経過時間よりも長い第2経過時間が経過するまで待機する。ブロック1318で、残りの参加者は、彼らのデポジットで使用されているファンドをアンロックし、そして、実行はブロック1310へ進み、プロセスは完了する。
【0153】
図14は、本開示の少なくとも1つの実施形態を実施するために使用され得るコンピュータデバイス1400の実例となる略ブロック図である。様々な実施形態で、コンピュータデバイス1400は、先に例示及び記載されたシステムのいずれかを実施するために使用され得る。例えば、コンピュータデバイス1400は、データサーバ、ウェブサーバ、可搬型コンピュータデバイス、パーソナルコンピュータ、又は任意の電子計算デバイスとしての使用のために構成され得る。図14に示されるように、コンピュータデバイス1400は、1つ以上のプロセッサ1402を含む。実施形態において、プロセッサ1402は、バスサブシステム1404を介して多数の周辺サブシステムと通信するよう構成されかつそれらへ通信上結合されている。いくつかの実施形態で、それらの周辺サブシステムは、メモリサブシステム1408及びファイル/ディスク記憶サブシステム1410を有する記憶サブシステム1406と、1つ以上のユーザインターフェース入力デバイス1412と、1つ以上のユーザインターフェース出力デバイス1414と、ネットワークインターフェースサブシステム1416とを含む。そのような記憶サブシステム1406は、情報の一時的な又は長期の記憶のために使用されてよい。
【0154】
いくつかの実施形態で、バスサブシステム1404は、コンピュータデバイス1400の様々なコンポーネント及びサブシステムが意図されたように互いと通信することを可能にするメカニズムを提供する。バスサブシステム1404は単一バスとして概略的に示されているが、バスサブシステムの代替の実施形態は多数のバスを利用する。いくつかの実施形態で、ネットワークインターフェースサブシステム1416は、他のコンピュータデバイス及びネットワークへのインターフェースを提供する。ネットワークインターフェースサブシステム1416は、いくつかの実施形態において、他のシステムからデータを受信しかつコンピュータデバイス1400から他のシステムへデータを送信するインターフェースとして働く。いくつかの実施形態で、バスサブシステム1404は、詳細、検索語、などのようなデータを送るために利用される。
【0155】
いくつかの実施形態で、ユーザインターフェース入力デバイス1412は、キーボード;組み込みマウス、トラックボール、タッチパッド、若しくはグラフィクスタブレットなどの指示デバイス;スキャナ;バーコードスキャナ;ディスプレイに組み込まれているタッチスクリーン;音声認識システム、マイクロホンなどの音声入力デバイス;及び他のタイプの入力デバイス、などの1つ以上のユーザ入力デバイスを含む。
【0156】
いくつかの実施形態で、コンピュータデバイス1400は、少なくとも1つのローカルクロック1424を含む。ローカルクロック1424は、いくつかの実施形態では、特定の開始日から発生したディックの数を表すカウンタであり、いくつかの実施形態では、コンピュータデバイス1400内に内蔵される。様々な実施形態で、ローカルクロック1424は、コンピュータデバイス1400のプロセッサ及びコンピュータデバイス1400に含まれているサブシステムにおいてデータ転送を特定のクロックパルスで同期させるために使用され、コンピュータデバイス1400とデータセンター内の他のシステムとの間で同期動作を協調させるために使用され得る。他の実施形態では、ローカルクロックは、プログラム可能なインターバルタイマである。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14