(57)【要約】第一の量のトークンを送信者ノードから受信者ノードにブロックチェーンを使って移転するためのトークン移転プロセスに参加するためのコンピュータ実装される方法が開示される。トークン移転プロセスは、複数の参加ノードと、参加ノードの複数ペアの間での一組の間接トークン・トランザクションの実行とを含む。本方法は参加ノードにおいて実装され：前記一組の間接トークン・トランザクションの部分集合を取得するステップであって、該部分集合は、当該参加ノードが入力ノードまたは出力ノードのいずれかであるトランザクションのみを含み、前記一組の間接トークン・トランザクションは、トークンの前記第一の量および前記トークン移転プロセスにおけるトランザクション・ラウンドのあらかじめ決定された数に基づいて生成される、ステップと；前記部分集合内の各間接トークン・トランザクションについて、前記間接トークン・トランザクションに含まれるそれぞれの第二の参加ノードと協働して、当該参加ノードと前記第二の参加ノードとの間の、前記間接トークン・トランザクションのためのコミットメント・チャネルを生成する、ステップと；生成されたコミットメント・チャネルを使って、前記部分集合の前記間接トークン・トランザクションを実行することにおいて、他のすべての参加ノードと協働するステップとを含む。
2020524926.tif 000002
【特許請求の範囲】
【請求項１】
第一の量のトークンを送信者ノードから受信者ノードにブロックチェーンを使って移転するためのトークン移転プロセスに参加するためのコンピュータ実装される方法であって、前記トークン移転プロセスは、複数の参加ノードと、前記参加ノードのうちの複数ペアの間での間接トークン・トランザクションの集合の実行とを含み、前記送信者ノードおよび前記受信者ノードは参加ノードとして前記トークン移転プロセスに含まれ、ある参加ノードにおいて実装される当該方法は：
前記間接トークン・トランザクションの集合の部分集合を取得するステップであって、該部分集合は、当該参加ノードが入力ノードまたは出力ノードのいずれかであるトランザクションを含み、前記間接トークン・トランザクションの集合は、トークンの前記第一の量および前記トークン移転プロセスにおけるトランザクション・ラウンドのあらかじめ決定された数に基づいて生成される、ステップと；
前記部分集合におけるそれぞれの間接トークン・トランザクションについて、その間接トークン・トランザクションに含まれるそれぞれの第二の参加ノードと協働して、当該参加ノードと前記第二の参加ノードとの間の、その間接トークン・トランザクションのためのコミットメント・チャネルを生成する、ステップと；
生成されたコミットメント・チャネルを使って、前記部分集合の前記間接トークン・トランザクションを実行することにおいて、他のすべての参加ノードと協働するステップとを含む、
方法。
【請求項２】
前記間接トークン・トランザクションのためのコミットメント・チャネルを生成することは：
前記第二の参加ノードと協働して：
前記間接トークン・トランザクションの出力アドレスに移転するべく、ある間接量のトークンをコミットするための第一のブロックチェーン・トランザクション（Tc）を生成し；
前記間接トークン・トランザクションの入力アドレスに、コミットされた前記間接量のトークンを返す第二のブロックチェーン・トランザクション（Tr,0）を生成し；
前記間接トークン・トランザクションの出力アドレスへの、コミットされた前記間接量のトークンの移転を実行するための第三のブロックチェーン・トランザクション（Tt）を生成することを含む、
請求項１記載の方法。
【請求項３】
前記第一のブロックチェーン・トランザクション（Tc）は、前記第二のブロックチェーン・トランザクション（Tr,0）が前記間接トークン・トランザクションの出力ノードによって署名された後に、前記ブロックチェーンに提出される、請求項２記載の方法。
【請求項４】
前記第二のブロックチェーン・トランザクション（Tr,0）は、その後には前記第二のブロックチェーン・トランザクションが前記ブロックチェーンへの提出に適格となる時点を指定するトランザクション・パラメータ（nLockTime）を含む、請求項２または３記載の方法。
【請求項５】
第一の秘密鍵（k）の鍵シェア（ki）を取得することであって、前記第一の秘密鍵は前記参加ノードのすべてにとって未知である、ことと；
秘密シェア結合を使って前記第一の秘密鍵（k）に対応する第一の公開鍵（Q）を導出することにおいて協働することとを含む、
請求項２記載の方法。
【請求項６】
前記第三のブロックチェーン・トランザクション（Tt）は、前記第一の秘密鍵（k）に基づく秘密の値（sv）を含むロック解除スクリプトを含む、請求項５記載の方法。
【請求項７】
前記部分集合の前記間接トークン・トランザクションを実行することにおいて他のすべての参加ノードと協働することは、前記鍵シェアを使って前記第一の秘密鍵（k）を導出することにおいて、他のすべての参加ノードと協働することを含む、請求項６記載の方法。
【請求項８】
前記秘密の値は、前記第一の秘密鍵（k）と前記間接トークン・トランザクションの出力ノードによって与えられる乱数との和である、請求項６記載の方法。
【請求項９】
公開検証可能な秘密分散共有方式（PVSS）を使って、前記鍵シェア（ki）の有効性およびその前記第一の公開鍵（Q）との互換性を検証することをさらに含む、請求項５ないし８のうちいずれか一項記載の方法。
【請求項１０】
前記第一の公開鍵（Q）を導出することにおいて協働することは、前記鍵シェアを含む第一のラグランジュ多項式補間の項を計算し、その項を、他のすべての参加ノードによって提供される前記第一のラグランジュ多項式の項と加算することを含む、請求項５ないし９のうちいずれか一項記載の方法。
【請求項１１】
前記間接トークン・トランザクションの集合は、トランザクション・ラウンド当たりのトランザクションのあらかじめ定義された数に基づく、請求項１ないし１０のうちいずれか一項記載の方法。
【請求項１２】
前記参加ノードは、複数の送信者‐受信者ペアを含み、間接トークン・トランザクションの前記集合は、前記複数の送信者‐受信者ペアに関連するトークンのそれぞれの量に基づいて生成される、請求項１ないし１１のうちいずれか一項記載の方法。
【請求項１３】
前記集合のそれぞれの間接トークン・トランザクションについて、その間接トークン・トランザクションについてのトークンの間接量は、移転者によって利用可能にされたトークンのコミットされた量に依存するある閾値より小さい、請求項１ないし１２のうちいずれか一項記載の方法。
【請求項１４】
複数の参加ノードを含むトークン移転プロセスに参加するためのコンピューティング装置であって、当該コンピューティング装置は前記参加ノードの一つであり、当該コンピューティング装置は：
プロセッサ；
メモリ；
ネットワーク接続を提供するネットワーク・インターフェース；および
コンピュータ実行可能命令を含むブロックチェーン・アプリケーションを有しており、該コンピュータ実行可能命令は、前記プロセッサによって実行されると、前記プロセッサに請求項１ないし１３のうちいずれか一項記載の方法を実行させるものである、
コンピューティング装置。
【請求項１５】
複数の参加ノードを含むトークン移転プロセスに参加するためのプロセッサ実行可能命令を記憶している非一時的なプロセッサ読取り可能な媒体であって、前記プロセッサ実行可能命令は、前記参加ノードのうちの一つにおいてプロセッサによって実行されると、該プロセッサに、請求項１ないし１３のうちいずれか一項記載の方法を実行させるものである、媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概括的にはブロックチェーン・トランザクションに関し、より詳細には、一組のトランザクションのセキュリティおよび完全な完了を保証しながらも、出力および入力がリンクされない、トランザクションを構造化および実行するための方法および装置に関する。特に、本願は、信頼性のないネットワーク構造を保持しつつ、複数の入力ノードが協働して、トークンの損失および盗難を防止する安全かつ決定論的な仕方で、トークンを複数の出力ノードに分配するための方法およびシステムを提供する。
【背景技術】
【０００２】
本稿では、「ブロックチェーン」という用語を、あらゆる形の電子的、コンピュータ・ベース、分散型の台帳を含むように使う。これらは、ブロックチェーンおよびトランザクション・チェーン技術、許可制台帳および許可なし台帳、共有台帳およびそれらの変形を含むが、これらに限定されない。ブロックチェーン技術の最も広く知られている応用はビットコイン台帳であるが、他のブロックチェーン実装も提案され、開発されている。本稿では、便宜上、例解のためにビットコインに言及することがあるが、本発明がビットコイン・ブロックチェーンと一緒に使うことに限定されず、代替的なブロックチェーンの実装およびプロトコルも本発明の範囲内にあることを注意しておく。
【０００３】
ブロックチェーンは、コンピュータ・ベースの非中央集中式かつ分散式のシステムとして実装されるコンセンサス・ベースの電子台帳であり、これはブロックから構成され、さらにブロックはトランザクションから構成される。各トランザクションは、ブロックチェーン・システムにおける参加者の間でデジタル資産の管理権の移転をエンコードするデータ構造であり、少なくとも一つの入力および少なくとも一つの出力を含む。各ブロックは直前のブロックのハッシュを含み、それにより諸ブロックは一緒に連鎖されて、ブロックチェーンにその端緒以降に書き込まれたすべてのトランザクションの永続的で変更不可能なレコードを作成する。トランザクションは、その入力および出力中に埋め込まれたスクリプトとして知られる小さなプログラムを含み、それが、トランザクションの出力がどのように、誰によってアクセスされうるかを指定する。ビットコイン・プラットフォームでは、これらのスクリプトはスタック・ベースのスクリプト言語を使って書かれる。
【０００４】
トランザクションがブロックチェーンに書き込まれるためには、「検証済み」でなければならない。ネットワーク・ノード（採掘者）が、各トランザクションが有効であることを保証するための作業を実行し、無効なトランザクションはネットワークから拒否される。ノードにインストールされたソフトウェア・クライアントは、ロックおよびロック解除スクリプトを実行することによって、未使用トランザクション（UTXO）に対するこの検証作業を実行する。ロックおよびロック解除スクリプトが実行されて評価が真になる場合、トランザクションは有効であり、トランザクションはブロックチェーンに書き込まれる。このように、トランザクションがブロックチェーンに書き込まれるためには、そのトランザクションは、ｉ）そのトランザクションを受け取った最初のノードによって検証されなければならない。もし、トランザクションが検証されれば、ノードはそれをネットワーク内の他のノードに中継する。さらにそのトランザクションは、ｉｉ）採掘者によって構築された新しいブロックに追加され、ｉｉｉ）採掘されなければならない。すなわち、過去のトランザクションの公開台帳に追加されなければならない。
【０００５】
トランザクションは、一つのノードから別のノードへの一つまたは複数のトークンの移転に関わる。トークンは、ネットワーク資源の将来の管理権を表わすことがありうる。場合によっては、トークンは資産または価値を表わすことがあるが、必ずしもそうではない。たとえば、場合によっては、トークンは暗号通貨として理解されうる。しかしながら、本願は、暗号通貨の文脈における実装に限定されるものではなく、管理権トークンの分散式の移転のためのブロックチェーン・ネットワークに関連するものとして、より広く理解される。
【０００６】
ビットコインのようなブロックチェーン技術の認識されている利点の一つは、トランザクションの匿名性である。ビットコイン・ユーザーの個人情報は、正式かつ明示的にビットコイン・アドレスに添付されず、ブロックチェーンのビットコイン台帳は、公開アドレス情報のみを含む。しかしながら、副次的なデータ（たとえば、トランザクションを完了するために必要な出荷先アドレス）および分析を使用することで、関心のある第三者は、公に利用可能な情報を組み合わせて、ユーザーの素性を、特定のビットコイン・アドレスに関連付けることができる可能性がある。
【０００７】
ビットコイン・プロトコルにおけるより高いレベルの匿名性を容易にするために、混合解決策が実装されてもよい。中央集中式の混合では、少なくとも一の参加者がブロックチェーン・トークンを一つのアドレスから別のアドレスに移そうとしている場合、一組の参加者が、自分たちのトークンを、混合サービス・プロバイダーによって管轄される中央プールに移転する。次いで、サービス・プロバイダーがそれらのトークンを、中央プールから適切な出力アドレスに分配する。混合プロトコルは、他の参加者の入力‐出力関係の知識をもつサービス・プロバイダーが信頼に足ることに頼っている。この中央集中式の構造は、（１）不誠実な混合サービスがユーザーのトークンを盗もうと試みるかもしれないし、（２）混合サービスが規制機関や他の利害関係者から、入力アドレスと出力アドレスのマッピングを開示するよう圧力をかけられるかもしれないので、問題である場合がある。より一般的には、混合は、複数の入力ノードが複数のトークンに対する管理権を複数の出力ノード間で分配する、特定の型の分配プロトコルである。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
多くのトークン分配サービスおよび潜在的なプロトコルは、貧弱なリンク除去（delinking）または危殆化されたセキュリティのいずれかに悩まされることがありうる。分散式ブロックチェーン・ネットワークのコンテキストにおいて分配プロトコルが効果的であるためには、分配プロトコルは、トークン分配における悪意のあるまたは不均衡な帰結を回避するために、中央集中された権限機関への依存を最小限にし、それでいてすべての参加ノードによる完了を保証するように、設計され運用されなければならない。よって、トークンの紛失または盗難を回避し、かつ、プロセスが「信頼不要」（trustless）であるように実装されることを保証しつつ、トークン分配を容易にするための改善された方法および装置を提供することが望ましい。中央集中された権限機関を使うことなく、そのようなプロセスを分散式ブロックチェーン・ネットワークにおいて実装することは、有意な技術的課題を呈する。多ラウンド・トークン分配プロセスにおいては、規定されたトークン分配が実現されることを保証し、たとえば、プロセスの一つまたは複数のラウンドの間のオフライン参加者ノードに起因する、トークンの意図的なまたは偶発的な割り当てミスを防止することは、特に困難である。
【０００９】
そのような改善された解決策が今、考案された。
【課題を解決するための手段】
【００１０】
このように、本発明によれば、添付の特許請求の範囲に定義される方法および装置が提供される。
【００１１】
本発明は、コンピュータ実装される方法および対応するシステムを提供することができる。方法／システムは、ブロックチェーンで実装される方法／システムとして記述されることがある。本発明は、セキュリティ方法または暗号学的方法／システムとして記述されることがある。本発明は、暗号通貨の一部またはある量のようなデジタル資産の安全な移転を提供することができる。追加的または代替的に、本発明は、暗号通貨の一部またはある量のようなデジタル資産の移転を制御するための制御機構を提供することができる。
【００１２】
本願は、第一の量のトークンを送信者ノードから受信者ノードにブロックチェーンを使って移転するためのトークン移転プロセスに参加するためのコンピュータ実装される方法を記述する。該トークン移転プロセスは、複数の参加ノードと、参加ノードの複数ペアの間での一組の間接トークン・トランザクション〔間接トークン・トランザクションの集合〕の実行とを含む。送信者ノードおよび受信者ノードは参加ノードとしてトークン移転プロセスに含まれる。参加ノードにおいて実装される方法は：前記一組の間接トークン・トランザクションの部分集合を取得するステップであって、該部分集合は、当該参加ノードが入力ノードまたは出力ノードのいずれかであるトランザクションを含み、前記一組の間接トークン・トランザクションは、トークンの前記第一の量および前記トークン移転プロセスにおけるトランザクション・ラウンドのあらかじめ決定された数に基づいて生成される、ステップと；前記部分集合内の各間接トークン・トランザクションについて、前記間接トークン・トランザクションに含まれるそれぞれの第二の参加ノードと協働して、当該参加ノードと前記第二の参加ノードとの間の、前記間接トークン・トランザクションのためのコミットメント・チャネルを生成する、ステップと；生成されたコミットメント・チャネルを使って、前記部分集合の前記間接トークン・トランザクションを実行することにおいて、他のすべての参加ノードと協働するステップとを含む。
【００１３】
いくつかの実装では、前記間接トークン・トランザクションのためのコミットメント・チャネルを生成することは：前記第二の参加ノードと協働して：前記間接トークン・トランザクションの出力アドレスに移転するべく間接量のトークンをコミットするための第一のブロックチェーン・トランザクション（Tc）を生成し；前記間接トークン・トランザクションの入力アドレスに、コミットされた前記間接量のトークンを返す第二のブロックチェーン・トランザクション（Tr,0）を生成し；前記間接トークン・トランザクションの出力アドレスへの、前記コミットされた間接量のトークンの移転を実行するための第三のブロックチェーン・トランザクション（Tt）を生成することを含む。
【００１４】
いくつかの実装では、第一のブロックチェーン・トランザクション（Tc）は、第二のブロックチェーン・トランザクション（Tr,0）が間接トークン・トランザクションの出力ノードによって署名された後に、ブロックチェーンに提出される。
【００１５】
いくつかの実装では、第二のブロックチェーン・トランザクション（Tr,0）は、その後には第二のブロックチェーン・トランザクションがブロックチェーンへの提出に適格となる時点を指定するトランザクション・パラメータ（nLockTime）を含む。
【００１６】
いくつかの実装では、本方法はさらに、第一の秘密鍵（k）の鍵シェア（ki）を取得することであって、前記第一の秘密鍵は前記参加ノードのすべてにとって未知である、ことと、秘密シェア結合を使って第一の秘密鍵（k）に対応する第一の公開鍵（Q）を導出することにおいて協働することとを含んでいてもよい。
【００１７】
いくつかの実装では、第三のブロックチェーン・トランザクション（Tt）は、第一の秘密鍵（k）に基づく秘密の値（sv）を含むロック解除スクリプトを含む。
【００１８】
いくつかの実装では、前記部分集合の前記間接トークン・トランザクションを実行することにおいて他のすべての参加ノードと協働することは、前記鍵シェアを使って第一の秘密鍵（k）を導出することにおいて、他のすべての参加ノードと協働することを含む。
【００１９】
いくつかの実装では、前記秘密の値は、前記第一の秘密鍵（k）と前記間接トークン・トランザクションの出力ノードによって与えられる乱数との和である。
【００２０】
いくつかの実装では、本方法は、公開検証可能な秘密分散共有方式（publicly  verifiable  secret  sharing  scheme、PVSS）を使って、鍵シェア（ki）の有効性およびその第一の公開鍵（Q）との互換性を検証することをさらに含んでいてもよい。
【００２１】
いくつかの実装では、第一の公開鍵（Q）を導出することにおいて協働することは、前記鍵シェアを含む第一のラグランジュ多項式補間の項を計算し、その項を、他のすべての参加ノードによって提供される第一のラグランジュ多項式の項と加算することを含む。
【００２２】
いくつかの実装では、前記一組の間接トークン・トランザクションは、トランザクション・ラウンド当たりのトランザクションのあらかじめ定義された数に基づく。
【００２３】
いくつかの実装では、前記参加ノードは、複数の送信者‐受信者ペアを含み、間接トークン・トランザクションの前記集合は、前記複数の送信者‐受信者ペアに関連するトークンのそれぞれの量に基づいて生成される。
【００２４】
いくつかの実装では、前記集合の各間接トークン・トランザクションについて、その間接トークン・トランザクションについてのトークンの間接量は、移転者によって利用可能にされたトークンのコミットされた量に依存するある閾値より小さい。
【００２５】
本願は、さらに、記載された方法を実行するためのコンピューティング装置を記載する。ここで、コンピューティング装置は、少なくとも一つのプロセッサ、メモリ、ネットワーク・インターフェース、およびプロセッサ実行可能命令を含むブロックチェーン・アプリケーションを含み、該プロセッサ実行可能命令は、実行されると、前記プロセッサに本稿に記載される方法のうち一つまたは複数の方法の記載された動作を実行させるものである。
【００２６】
本願は、さらに、複数の参加ノードの間のトークン移転プロセスに参加するためのプロセッサ実行可能命令を記憶している非一時的なプロセッサ読取り可能な媒体を記載する。ここで、プロセッサ実行可能命令は、前記参加ノードのうちの一つにおいてプロセッサによって実行されると、該プロセッサに、本稿に記載される方法のうち一つまたは複数の方法の動作を実行させるものである。
【００２７】
本願は、さらに、ブロックチェーンを使って、複数ペアの送信者ノードとそれぞれの受信者ノードとの間でトークンのそれぞれの第一の量を移転するためのトークン移転プロセスを開始するためのコンピュータ実装される方法を記載する。本方法は：トークン移転プロセスにおけるトランザクション・ラウンドの数を決定するステップと；トークンの前記それぞれの第一の量およびトランザクション・ラウンドの数に基づいて間接トークン・トランザクションの集合（TT）を生成するステップであって、前記集合内の間接トークン・トランザクションのすべての実行の結果、前記送信者ノードからそれぞれの受信者ノードへの前記それぞれの量のトークンの正味の移転がなされ、間接トークン・トランザクションの前記集合は、送信者ノードおよび受信者ノードのランダム化されたペア形成を含み、各ノードは特定の間接トークン・トランザクションのための入力ノードまたは出力ノードでありうる、ステップと；前記送信者ノードおよび受信者ノードのそれぞれについて、間接トークン・トランザクションの前記集合の部分集合をそのノードに送信するステップであって、該部分集合は、そのノードが前記入力ノードまたは前記出力ノードのいずれかであるトランザクションを含む、ステップとを含む。
【００２８】
いくつかの実装では、間接トークン・トランザクションの前記集合は、ランダムに生成されたトランザクションの第一のグループを含み、前記第一のグループにおける各トランザクションは、ランダムに選択された一対の参加ノード間の移転のためにそれぞれの間接トークン量を指定する。
【００２９】
いくつかの実装では、前記間接トークン量はランダムに選択される。
【００３０】
いくつかの実装では、前記間接トークン量は確率分布から決定される。
【００３１】
いくつかの実装では、前記間接トークン量は閾値量以下である。
【００３２】
いくつかの実装では、間接トークン・トランザクションの前記集合は、さらに、前記第一のグループのトランザクションから帰結する正味のトークン移転を、送信者ノードと受信者ノードとの間の前記第一の量のトークンの正味の移転と調和させるための第二のグループのトランザクションを含む。
【００３３】
いくつかの実装では、前記参加ノードに前記部分集合を送信することは、前記参加ノードに前記部分集合を含む暗号化されたメッセージを送信することを含み、前記メッセージは、前記参加ノードに関連する公開鍵を使って暗号化される。
【００３４】
いくつかの実装では、間接トークン・トランザクションの前記集合は、ラウンド当たりのトランザクションの数（q）に基づいて生成される。
【００３５】
本願は、さらに、複数の参加ノードを含むトークン移転プロセスを開始するためのコンピューティング装置を記載し、コンピューティング装置は、メモリ、ネットワーク接続性を提供するためのネットワーク・インターフェース、および本稿に記載される方法を実行するよう構成されたプロセッサを含む。
【００３６】
本願は、さらに、複数の参加ノードの間でトークン移転プロセスを開始するためのプロセッサ実行可能命令を記憶している非一時的プロセッサ読取り可能媒体を記載し、プロセッサ実行可能命令は、プロセッサによって実行されると、該プロセッサに、本稿に記載される方法のうちの一つまたは複数の方法の動作を実行させる。
【００３７】
本発明の一つの側面または実施形態に関係して記載される任意の特徴は、一つまたは複数の他の側面／実施形態に関しても使用されうる。本発明のこれらおよび他の側面は、本稿に記載される実施形態から明白となり、それを参照して解明されるであろう。ここで、本発明のある実施形態を、単に例として、添付の図面を参照して説明する。
【図面の簡単な説明】
【００３８】
【図１】ノードの例示的なブロックチェーン・ネットワークを示す。
【図２】支払者ノードと被支払者ノードとの間で確立されたコミットメント・チャネルの概略図を示す。
【図３】本願のある実施形態による、移転者‐被移転者ペアの間でトークンを移転するためのトークン移転プロセスに参加する例示的な方法をフローチャートの形で示す。
【図４】本願のある実施形態による、移転者‐被移転者ペアの間でトークンを移転するためのトークン移転プロセスに参加する別の例示的な方法をフローチャートの形で示す。
【図５】間接匿名移転プロトコルにおける、移転ノードと被移転ノードとの間のコミットメント・チャネルを構築するための別の例示的なプロセスをフローチャートの形で示す。
【図６】簡略化された参加ノードのブロック図を示す。
【発明を実施するための形態】
【００３９】
本願において、用語「および／または」は、挙げられた要素のうちの任意のもの単独、任意のサブコンビネーション、または全部の要素を含む、挙げられた要素のあらゆる可能な組み合わせおよびサブコンビネーションを、必ずしも追加的な要素を排除することなくカバーすることが意図されている。
【００４０】
本願において、句「……または……の少なくとも一つ」は、挙げられた要素のうちの任意のもの単独、任意のサブコンビネーション、または全部の要素を含む、挙げられた要素のうちの任意の一つまたは複数をカバーすることが意図されており、必ずしも追加的な要素を除外することはなく、また必ずしも要素のすべてを必要とすることはない。
【００４１】
まず、ブロックチェーンに関連する例示的なブロックチェーン・ネットワーク100をブロック図の形で示す図１を参照する。ブロックチェーン・ネットワークはピアツーピアのオープン・メンバーシップ・ネットワークであり、誰でも、招待なしに、または他のメンバーからの同意なしに、参加することができる。ブロックチェーン・ネットワーク100がそのもとで動作するブロックチェーン・プロトコルのインスタンスを実行する分散式の電子装置が、ブロックチェーン・ネットワーク100に参加してもよい。そのような分散式の電子装置は、ノード102と称されてもよい。ブロックチェーン・プロトコルは、たとえば、ビットコイン・プロトコル、または他の暗号通貨であってもよい。
【００４２】
ブロックチェーン・プロトコルを実行し、ブロックチェーン・ネットワーク100のノード102をなす電子装置は、たとえば、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、サーバー、スマートフォンのようなモバイル・デバイス、スマートウォッチのようなウェアラブル・コンピュータといったコンピュータまたは他の電子装置を含むさまざまな型のものでありうる。
【００４３】
ブロックチェーン・ネットワーク100のノード102は、有線および無線の通信技術を含みうる好適な通信技術を使って互いに結合される。多くの場合、ブロックチェーン・ネットワーク100は、少なくとも部分的にインターネット上に実装され、個々のノード102のいくつかは、地理的に分散した位置に配置されてもよい。
【００４４】
ノード102は、ブロックチェーン上のすべてのトランザクションのグローバルな台帳を維持する。グローバル台帳は分散式台帳であり、各ノード102は、グローバル台帳の完全なコピーまたは部分的なコピーを記憶することができる。グローバル台帳に影響するノード102によるトランザクションは他のノード102によって検証され、それによりグローバル台帳の有効性が維持される。ビットコイン・プロトコルを使用するもののようなブロックチェーン・ネットワークの実装および動作の詳細は、当業者には理解されるであろう。
【００４５】
各トランザクションは、典型的には、一つまたは複数の入力および一つまたは複数の出力を有する。入力および出力に埋め込まれたスクリプトが、トランザクションの出力が誰によってどのようにアクセスされることができるかを指定する。トランザクションの出力は、トランザクションの結果としてトークンが移転される先のアドレスであってもよい。すると、それらのトークンは、利用可能なトランザクション出力としてその出力アドレスに関連付けられる。ビットコインのような暗号通貨の文脈では、利用可能なトランザクション出力は、未使用トランザクション出力（unspent  transaction  output、UTXO）と呼ばれることがある。次いで、その後のトランザクションは、それらのトークンを一つまたは複数の他のアドレスに移転するために、そのアドレスを入力として参照しうる。
【００４６】
トランザクションは、ブロックチェーン台帳上のトランザクションに個人情報が含まれていない点で擬似匿名であるが、トランザクションのチェーンにおけるトークンの移転を追跡し、場合によっては、外部データを使ってトークンを個人にリンクすることが可能である。匿名性を高めるために、混合トランザクションを使用して、多様な源からの入力をプールし、次いで、プールされたトークンを分割し、諸出力に割り当てることができる。すべての入力および出力が同じサイズであれば、特定の入力を特定の出力に関連付けることは難しい。しかしながら、そのようなトランザクションでは、少なくとも一つの参加ノードが、別の参加ノードによって指定された入力アドレスと出力アドレスとの間のリンクを認識する。ビットコイン・プロトコルにおけるCoinJoin演算のようなそのような混合トランザクションでは、複数の入力と複数の出力を有する単一のトランザクションが、トークンを混合するために使用される。
【００４７】
いくつかの他の匿名化技法が、入力と出力の間のリンクを開示するのを避けようとして使用される。リング署名やステルス・アドレスといったものだが、その効果はさまざまである。ステルス・アドレスは、トークンが送られる出力アドレスを特定のユーザーから切り離そうとする。リング署名は、可能な署名者のグループのうちどの一人が特定のトランザクションに署名した／特定のトランザクションを認可した者であったことも、同じくらい確からしくしようとすることによって、源を追跡不可能にしようとする。残念ながら、リング署名は、ビットコインのようないくつかのプロトコルにおいては実装することに問題があることが判明している。Moneroのような他のいくつかの暗号通貨は、リング署名を可能にするために特別に設計されている。
【００４８】
本開示は、プロトコルの参加者間の一組の間接トークン・トランザクションを使用することによって、移転者と被移転者との間のトークンの移動を偽装するためのトークン移転プロトコルを提供する。具体的には、記載されるセキュリティ機構は、トークン移転プロトコルの間接トークン・トランザクションの集合が、それらのトランザクションのいずれかが実行できるようになる前に、プロトコルのすべての参加ノードによって有効確認されることを要求する。そのようなセキュリティ機構は、一つまたは複数の悪意のある参加ノードがプロトコルの下で割り当てられた動作を実行しない場合に残りの参加ノードが悪影響を受けることを防ぐ。間接トークン・トランザクションの集合は、プロトコルの参加ノードの種々のランダム化されたペアの間でのさまざまな量の複数の移転を含む。プロトコルによって規定された間接トークン・トランザクションが完了すると、指定されたトークンは、移転者から被移転者に間接的に移転されたことになる。
【００４９】
より一般には、本開示は、複数の移転者‐被移転者ペアの間で所望のトークン移転を実施するために実装されうるプロトコルを提供する。プロトコルは、複数の参加ノードを含んでいてもよく、各参加ノードは、他の参加ノードに一つまたは複数のトークン移転を行なったり、他の参加ノードから一つまたは複数のトークン移転を受けたりする。移転者‐被移転者ペアについてのトークンの所望の移転は、プロトコルにおける参加ノードのさまざまなペア間の間接トークン・トランザクションの集合を使って実装されうる。間接トークン・トランザクションは、プロトコルの完了を保証し、それらの移転の一部のみが行なわれた後のプロトコルの失敗を避けるような仕方で実装され、それにより、適切なトークン移転がそれぞれの意図された宛先に到着することを保証する。いくつかの実装では、間接トークン・トランザクションを容易にするためにコミットメント・チャネルが使用される。以下に記述されるように、参加ノードは、プロトコル要件に従ってコミットメント・チャネルが構築されたことをチェックすることができてもよい。このようにして、プロトコルは、プロトコルが部分的に完了し、その結果、トークンの所望される最終的な割り当てを実現できなくなるリスクなしに、完全に実装されることを確実にする安全な仕方を提供する。
【００５０】
本稿の記述では、「入力ノード」、「出力ノード」、「参加ノード」、「入力アドレス」および「出力アドレス」という用語が使用されることがある。ノードの「アドレス」への言及は、物理ノードのネットワーク・アドレスを指すことは意図されない。代わりに「アドレス」は、その物理ノードがトランザクション上の署名に対応する鍵をもつことによって所有権を主張できるトークンの割り当てをもつ、ブロックチェーン上のトランザクションにおいて指定されたアドレスである。この意味で、「出力アドレス」は、参加ノードのアドレスではなく、参加出力ノードに所有されるか、または関連付けられているブロックチェーン・トランザクション出力アドレスである。同様に、「入力アドレス」は、参加する入力ノードに所有されているか、または関連付けられている利用可能なトランザクション出力（暗号通貨の用語ではUXTO）のアドレスである。
【００５１】
コミットメント・チャネル
ビットコインのようなさまざまなブロックチェーン技術は、時に、参加ノード間のペアごとのトランザクションの構築において「コミットメント・チャネル」を利用することがある。コミットメント・チャネルは、トランザクションのすべてをブロックチェーンにコミットすることなく、諸ノードが複数のトランザクションを行なうことができるように設計されている。ひとたびコミットメント・チャネルが一対の参加ノードの間に確立されると、それらのノードは、所与の時間期間内に望むだけの任意の数のトランザクションに従事することができ、それらのトランザクションのうちの二つのみが最終的にブロックチェーンに追加される。結果として、コミットメント・チャネルの利用は、ブロックチェーンに追加される必要のあるトランザクション数の減少および関連するトランザクション・コストの削減につながる可能性がある。コミットメント・チャネルはまた、特定の基準が被移転者ノードによって満たされない場合、または移転者または被移転者ノードのいずれかがある一組の移転後にプロセスを終了することを決定した場合に、トークンを返してもらう柔軟性を移転者ノードに提供する。
【００５２】
コミットメント・チャネル実装の少なくとも一つの実施形態では、一対の参加ノードUAおよびUBが協働して、三つのブロックチェーン・トランザクション、すなわち、コミットメント・トランザクション（commitment  transaction）（Tc）、返却トランザクション（return  transaction）（Tr,0）、および移転トランザクション（transfer  transaction）（Tt）を生成する。図２は、移転者ノードUAと被移転者ノードUBとの間のコミットメント・チャネルUA→UBの概略図を示している。コミットメント・トランザクションTcは、コミットメント・チャネルのコミットメント・コンポーネントであり、移転者UAが、UBへの移転のために、指定されたトークンの集合xを送信／コミットする。いくつかの実施形態では、コミットメント・トランザクションは、2/2（2-of-2）のマルチ署名式のスクリプトハッシュへの支払い（pay-to-script-hash、P2SH）トランザクションでありうる。返却トランザクションTr,0は、被移転者ノードUBが割り当てられた時間内にコミットメント・トランザクションのための所定の基準を完了できない場合に、以前にコミットされたトークンxをUAに戻すトランザクションである。返却トランザクションは、特定の時点nLockTimeが満了した後、ブロックチェーンへの提出に適格になる。返却トランザクションが正常に実行されるためには、移転者ノードUAと被移転者ノードUBの両方の署名が必要になる。移転トランザクションTpayは、コミットされたトークンxを被移転者ノードUBに実際に送るトランザクションである。移転トランザクションが実行されるのは、ある種の条件が被移転者ノードUBによって満たされる場合にのみである。たとえば、移転トランザクションが成功裏にブロックチェーンに提出されるためには、少なくとも被移転者ノードUBのデジタル署名を必要としてもよい。
【００５３】
秘密分散共有
秘密の鍵をシェア〔持ち分〕に分割し、それらのシェアを一組の参加ノードの間で分配することを可能にするために、「秘密分散共有（secret  sharing）」と呼ばれる技法が開発されている。この技法では、参加ノードの集合のどの部分集合も、その部分集合の要素数〔カーディナリティ〕が指定された閾値tより大きい限り、秘密を再構成することができる。部分集合の要素数がt未満の場合は、秘密に関する情報は明かされない。これは、共有される秘密を使って署名するために、少なくともt個の参加ノードが協働しなければならないことを意味する。参加ノード間での鍵シェアの分配は、鍵シェアを割り当てる中央ディーラーを使用して、またはディーラーなし分配システムを通じて行なってもよい。それぞれの解決策には利点と欠点があり、分配方法の間で選択する際に、実装されるシステムの要件を慎重に検討する必要がある。
【００５４】
少なくとも一つの実施形態では、この技法は、秘密を次数tの多項式に埋め込むことに関わっていてもよい。n個の参加ノードのそれぞれは、その時点で未知の多項式上の、ある点を割り当てられ、その結果、t＋1個の参加ノードがあればラグランジュ多項式補間を使って前記多項式を正確に再構成できる。
【００５５】
個々の鍵シェアを所有しているn個のうちm個の参加ノードが協力して暗号学的な計算を実行することができる閾値署名方式と呼ばれるアプリケーションが開発されている。ここで、個々の参加ノードのいずれに対しても秘密は再構成／開示されず、署名を生成するためには2t＋1個の参加ノードを要する。
【００５６】
閾値署名方式は、いくつかの場合には、ラグランジュ多項式補間に依拠していてもよい。ラグランジュ多項式補間は次数tの関数f(x)がt＋1個の点p＝｛(x1,f(x1)),(x2,f(x2)),…,(xt+1,f(xt+1))｝を用いて再構成できることを教えてくれる。
【数１】
2020524926.tif 000003
【００５７】
楕円曲線および双線形ペアリングまたは行列投影を使うもののようなさまざまな他の技法が、閾値署名方式における使用に好適でありうることを注意しておくべきである。
【００５８】
閾値署名計算の一つの要素はx×Gの決定である。ここで、xは秘密鍵であり、Gは楕円曲線上の点である。秘密鍵xが与えられ、その鍵シェアがn個の参加ノードの間で「分割」される場合：
任意の秘密xは多項式f(x)上の点f(0)である
（鍵xの）シェアx1,x2,…,xnはf(x1),f(x2),…,f(xn)に対応する
f(x)がt次多項式であれば、秘密xは
【数２】
2020524926.tif 000004
によって補間されることができ、ここで、πはシェアxa,xb,…,xt,xt+1のサイズt＋1の部分集合であり、bはラグランジュ多項式補間との関連で上述したラグランジュ係数である。
【００５９】
πは個々のシェアxiを明かすことなくx×Gを計算するために協働するt＋1個の参加者のグループである。xはt次多項式上のx＝0点である。
・各参加者iが部分bi,πxi×Gを計算する。
・πの中のすべての参加者がそれらの部分を足し合わせて（ラグランジュ補間により秘密xを再構成）、
【数３】
2020524926.tif 000005
を与える。
【００６０】
このプロセスは「秘密シェア結合（Secret  Share  Joining）」と称される。
【００６１】
間接匿名移転プロトコル
本願は、一または複数の移転者‐被移転者ペア間でトークンを移転するための方法および装置を記述する。特に、本願は、トランザクションの部分的完了のリスクを回避しつつ、プロトコルの参加ノードの複数の異なるペアの間の間接トランザクションの集合を使用することによって、移転者‐被移転者関係を偽装しようとするトークン移転プロトコル（Indirect  Anonymous  Transfer  Protocol［間接匿名移転プロトコル］またはIATP）を提案する。間接トランザクションは、移転者と関連する被移転者との間のつながりがブロックチェーン・データから容易に識別できないように設計される。前記間接トランザクションの集合は、実行されれば、結果として、参加する移転者‐被移転者ノード・ペアについて、トークンのもともとの所望された配分（すなわち、プロトコルの開始時に合意されたトランザクション）が生じる。
【００６２】
IATPは、複数の参加ノードを含み、各参加ノードは、移転者‐被移転者ペアに属する。特に、IATPは、三つ以上の参加ノードのグループがあって、グループ内の少なくとも一つのノードがグループ内の別のノードへの一つまたは複数のトークン移転を行なうか、または別のノードから一つまたは複数のトークン移転を受ける場合に好適である。以下の説明において曖昧さを避けるために、用語「送信者」および「受信者」がそれぞれIATPに参加する移転者ノードおよび関連する被移転者ノードを指すために使用されることがある。
【００６３】
ここで、図３を参照する。図３は、フローチャートの形で、ある量のトークンを送信者ノードから受信者ノードへブロックチェーンを使って移転するトークン移転プロセスに参加するための例示的な方法200を示している。複数の送信者‐受信者ペアに対応する複数のノードがIATPに参加する。それらのノードは、合計n個のノードについて、U1,U2,…,Unとして示される。「ノード」は、本稿では、メンバーまたは参加者または参加ノードと称されることがある。いくつかの実装では、各ノードは、財布または他のそのようなブロックチェーン実体である。
【００６４】
簡単のため、IATPの記述は、ある量Δ*のトランザクションを行なうことを望む単一の送信者‐受信者ペアの例であって、該トランザクションはn個の参加ノードの間の複数の間接トークン・トランザクションを介して行なわれる、例を使用する。以下で説明するように、この論理は、複数の送信者‐受信者ペアに容易に拡張される。すなわち、単一ペアの参加ノード間の移転Δ*を実施するIATPの使用事例は、複数ペアの参加ノード間の移転Δi *を行なうことに容易に一般化可能である。
【００６５】
方法200は、IATPに参加するノードによって実装される。参加するノードの集合は、送信者ノードと受信者ノードの少なくとも一つのペアと、該送信者ノードおよび受信者ノードとは異なる複数のノードとを含み、これらが、前記少なくとも一つの送信者‐受信者ペアの間の意図される移転を偽装するために、複数のペアごとの間接トークン・トランザクションを行なうために使用される。特に、送信者ノードおよび受信者ノードの挙動は、IATPにおける他の任意の参加ノードと同じ仕方で支配される。
【００６６】
方法200は、動作202においてノードがトークン移転プロセスに参加することをもって始まる。参加プロセスは、本稿では詳述しておらず、非中央集中式に、または、参加ノードの好適なグループを集める中央当局を通じて実装されてもよい。これは少なくとも部分的には、グループ内の十分な数のノードと、互いの間でトークンを移転することを望む一または複数の送信者‐受信者ペアとを確実に含めることに基づく。いくつかの実施形態では、複数の送信者‐受信者ペアが、協働してIATPに参加するために、一緒に参加することができる。
【００６７】
動作204では、参加ノードは、該参加ノードが入力ノードまたは出力ノードのいずれかである間接トークン・トランザクションのリストを取得する。すなわち、参加ノードは、関与する間接トークン・トランザクションについて通知される。参加ノードによって取得されるリストは、IATPの一部として生成されるすべての間接トークン・トランザクションの集合の部分集合である。
【００６８】
ここで、意図された量のトークンが送信者‐受信者ペア間で転送される間接トークン・トランザクションの集合を構築するためのプロセスについて説明する。IATPは、送信者‐受信者ペア間のトークンの移転を、これらの移転を「間接トークン・トランザクション（indirect  token  transaction）」の集合を通じて間接的に生起させることによって偽装または混合するという概念に基づいている。ここで、該「間接トークン・トランザクション」の集合は、種々のペアの参加ノード間の、トークンのさまざまな量をもつ。特に、間接トークン・トランザクションは、送信者から受信者への所望量のトークンの直接転送とは異なる少なくとも二つのトランザクションを含む。すなわち、間接トークン・トランザクションの集合は、少なくとも二つのトランザクションを含み、そのそれぞれは、その入力および／または出力ノードがそれぞれ前記送信者および受信者ノードと異なる。
【００６９】
間接トークン・トランザクションのこの集合を構築するプロセスは、IATPの参加ノードによってランダムに選択されうる開始者U0によって実装される。プロトコルの一つまたは複数の参加ノードは、以下を定義する：
・プロトコルのラウンド数rおよびラウンド当たりのトランザクション数q
・プロトコルにおいて使うために利用可能なトークンの初期量。これはベクトル
【数４】
2020524926.tif 000006
として記憶され、Mはプロトコルにコミットされたトークンの総数
・参加ノードが置かれる最終状態
【数５】
2020524926.tif 000007
すなわち、送信者‐受信者ペア（たとえばmAとmB）間でなされるトークンの最終的な配分
初期状態および最終状態は、ベクトルの形で、または他の任意の適切なデータ構造で記憶されうる。
【００７０】
参加ノードの一つであってもよい開始者ノードは、参加ノードの一つまたは複数によって設定されたプロトコルのパラメータ（r、q、m(0)、およびm(Tr)）を受け取り、受け取ったパラメータに基づいて、参加ノードの複数の異なるペア間の間接トークン・トランザクションの集合を生成する。この構築手順のある例示的な実施形態を下記に詳述する。
【００７１】
第一フェーズ
t＝1,…,r−1について:
ａ．開始者ノードがq個のペア（i,j）をランダムに選択する。ここで、i≠j
ｂ．Uiに対応するトークン量miが、0＜Δi≦min(mi(t),mj(t))という条件で、確率分布Φiからのランダムな増分Δiによって増大させられる
ｃ．UjはΔj＝Δiだけ減少させられる
ｄ．各ステップで、ベクトルm(t)＝(m1(t),…,mn(t))が更新される。
【００７２】
第一フェーズでは、開始者ノードは、参加ノードの複数ペア間でのトークンの移転につながる複数のまたは第一のグループのランダム・トランザクションを生成する。プロトコルの各ラウンド（すなわちラウンド1からr−1）について、q対の参加ノードがランダムに生成され、q対のそれぞれが、ペア間でのトークンのある量または間接トークン量（indirect  token  quantity）Δiの移転につながるトランザクションに従事する。各ラウンド後、各参加ノードに割り当てられたトークンの量は、それらq個の移転トランザクション（すなわち、間接トークン・トランザクション）を反映するよう更新される。q個のペアの各ペアの間でラウンドにおいて移転されるトークンの量Δiは、規定された範囲内に制限される。特に、条件0＜Δi≦min(mi(t),mj(t))は、q個のペアのうちの各ペアについて、移転される量が（１）正であり、（２）そのペアのノードに関連するトークンの割り当てられている量の小さいほうより小さいことを保証するよう設計されている。このようにして、IATPの参加ノードに割り当てられたトークンの量は、諸プロトコル・ラウンドを通じて正のままである。Δi値は、確率分布（たとえば、離散一様分布）から選択される。一般性を損なうことなく、プロトコルのすべての参加ノードについて同じ確率分布が使われてもよい。
【００７３】
第二フェーズ
最終ラウンドt＝rについては、到達すべき送信者‐受信者ペア間の所望されるトークン移転を反映する最終条件を強制する一連のまたは第二のグループの「最終トランザクション」が生成される。プロトコルを完了するために必要な最終トランザクションのシーケンスを生成するために、開始者ノードは：
ａ．差
【数６】
2020524926.tif 000008
を計算する
ｂ．ベクトルDの最小要素と最大要素を取り合わせ（match）、関連する参加ノード間の第一のトランザクションを構築する
たとえば、max(D)＝D1、min(D)＝D4、D4＜0であるとすると、ノード1がノード4に量Aを移転する。ここで、
【数７】
2020524926.tif 000009
ｃ．ベクトルDが更新される。すなわち、D'＝(D1−A,D2,…,D4＋A,…,Dn)となる。次いで、このプロセスは、D＝0、すなわち、すべての参加ノードが所望される最終段階に到達するまで、繰り返される。
【００７４】
第二フェーズでは、プロトコルの最後から二番目のラウンドからのベクトルm(r−1)の値を、所望される最終状態m(r)と調和させるために、「最終トランザクション」のシーケンスが生成される。すなわち、トランザクションの第二のグループは、トランザクションの第一のグループから生じる正味のトークン移転を、送信者および受信者ノード・ペアの間でのトークンの所望される量の正味の移転と調整するために使用される。最終状態では、少なくとも一つの送信者‐受信者ペアに属するすべての参加ノードは、その割り当てられたトークン量を、もともと規定された量だけ増加または減少させられる。すなわち、IATPにおけるすべての参加ノードが送信者および／または受信者である場合、参加ノードに関連する（所有されている）割り当てられたトークンは、所望されるトークン移転の結果値に従って調整される。最終状態における送信者‐受信者ノードに関連するトークン量は、送信者‐受信者ペアの間での所望されるトークン移転を反映する。特に、送信者‐受信者ペアの間の転送のためのトークンの所望量は、最終状態に反映され、よって、この量は、最終トランザクションを生成する際に考慮される。すなわち、間接トークン・トランザクションの集合は、少なくとも部分的には、送信者‐受信者ペア間で転送されるべきトークンの所望量に基づいて生成される。
【００７５】
参加ノード間の複数の送信者‐受信者ペアの場合、最終トランザクションは、それらの送信者‐受信者ペアの間で転送されるそれぞれのトークン量に依存することになる。より具体的には、最終状態m(r)は、複数の送信者‐受信者ペアについての転送を反映する。
【００７６】
現実の場面では、各参加ノードがもつトークンを「追跡」することは不可能であり、むしろブロックチェーン上でブロードキャストされるトランザクションを監視することによって、プロトコル・ステップごとの利得または損失を追跡することが可能であることを注意しておくべきである。記述中の「記憶される」または「割り当てられる」トークンへの言及は、プロトコル・ステップの例解における明確のためである。IATPを使用すると、送信者‐受信者ペアは、複数ラウンドの過程を通じて、参加ノードの複数ペアを通して、ランダム化されたトークン量Δiを移動させることによって、互いの間で間接的にある量のトークンを移転することができる。
【００７７】
間接トークン・トランザクションの集合が開始ノードによって生成された後、各参加ノードは、それらが関与するトランザクションについて通知される。特に、IATPの各参加ノードについて、開始者ノードは、その参加ノードが入力ノード（すなわち移転者）または出力ノード（すなわち被移転者）のいずれかであるトランザクションのみを含む、すべての間接トークン・トランザクションの集合の部分集合を決定する。開始者ノードは、トランザクションの部分集合を同定するメッセージを、それぞれの参加ノードに送る。いくつかの実施形態では、開始ノードは、参加ノードの公開鍵を使って、トランザクションの前記部分集合を含むメッセージを暗号化してもよい。
【００７８】
IATPでは、間接トークン・トランザクションはプロトコルのr個のラウンドを通して逐次的に生成され、一つまたは複数のトランザクションを含むベクトルの順序付けられたシーケンスとして表現されることができるが、トランザクションはランダムな順序で完了されることができる。それらのベクトルの順序およびベクトル内のトランザクションが実行される順序は、各参加者についての所望される最終的な正味のトークン割り当てに影響しない。本質的には、参加者間でトークンを移動するために実行される間接トランザクションは、任意の順序で行なうことができる。送信者‐受信者ペアの間での正しい移転の唯一の要件は、IATPの一部として生成される間接トークン・トランザクションのすべてが実行されることである。
【００７９】
図２に戻ると、動作206において、参加ノードによって取得された部分集合において同定されている各間接トークン・トランザクションについて、そのノードは、それぞれの第二の参加ノードと協働して、自身と第二の参加ノードとの間のトランザクションのためのコミットメント・チャネルを生成する。換言すれば、その参加ノードが関与する各間接トークン・トランザクションについて、該トランザクションを容易にするためにコミットメント・チャネルが構築される。コミットメント・チャネルは、間接トークン・トランザクションの集合について、参加ノードのペア間の安全な個別トランザクションを容易にするために、IATPにおいて使用される。動作208において、ノードは、生成されたコミットメント・チャネルを使用して、それが関与する間接トークン・トランザクションを実行するために、IATPの他のすべての参加ノードと協働する。トークン・トランザクションを実行するための全参加ノードの間のこの協働は、あるノードが途中でトランザクションのいずれかを取り消したり否定したりできるようにすることなく、すべての対応するコミットメント・チャネルが適正に作成され、完了されることを保証する助けとなる。間接トークン・トランザクションを実行するために協働するための技法は、図４を参照して以下に詳述される。
【００８０】
ここで、図４を参照する。図4は、フローチャートの形で、送信者‐受信者ペアの間である量のトークンを移転するためのトークン移転プロセスに参加するための例示的な方法300を示している。方法300は、本稿に記載されるIATPのような間接的な匿名転送のためのプロトコルに参加するノードによって実施される。動作302および304は、図３に示される方法200の動作202および204に対応する。具体的には、動作302では、ノードはトークン移転プロセスに参加し、動作304では、ノードは、それが関与する間接トークン・トランザクションのリスト／部分集合を（たとえば、プロトコルの開始者ノードから）取得する。
【００８１】
方法300は、IATPの間接トークン・トランザクションの作成および実行を支配するセキュリティ・プロトコルを組み込む。上述のように、IATPは、参加ノード間の複数のペアごとのトークン移転に関わる。プロトコルの諸トランザクションが実行される際、一部の参加者は、そのノードによってプロトコルにコミットされたトークンの初期量に対して、割り当てられたトークンにおける一時的な利得をもたらすトークンを受け取ることがありうる。すなわち、ある参加ノードは、プロトコルの実行中に、その初期状態（すなわち、コミットされたトークンの初期量）よりも、管理権トークンの所有に関して、「局所的に」、より恵まれていることがありうる。参加ノードが局所的なトークン余剰をもつ瞬間（単数または複数）に参加ノードがプロトコルを離脱することを防ぐために、IATPは、プロトコルの各参加ノードが、必要なコミットメント・チャネルが生成されたことを該参加ノードが確認するまで、間接トークン・トランザクションの集合の実行を妨げる能力をもつ機構を含んでいる。
【００８２】
このセキュリティ機構を可能にするために、コミットメント・チャネルに対応する各間接トークン・トランザクションは、Q＝kGとなる秘密の値kの公開鍵Qによって保護される。ここで、Gは楕円曲線上の基底点である。プロトコルによって必要とされるコミットメント・チャネルを作成する前には、値kはどの参加者にも知られていない。その代わり、各ユーザーには、鍵kの秘密のシェアkiが与えられる。こうして、動作306では、参加ノードは、秘密鍵kの鍵シェアを取得する。鍵シェアは、秘密の値kを生成する関数において利用される。特に、参加ノードの鍵シェアkiの全部が、値kを生成するために必要とされる。公開鍵Qは、コミットメント・チャネルを作成するときに参加ノードによって使用され、それにより、すべての参加者が協働して秘密の値kを再構築するときにのみ、コミットメント・チャネルがロック解除できる。IATPでは、任意のランダムな秘密がt次多項式f(x)におけるf(0)として格納され、参加者iのみがそのシェアf(xi)を計算できる。n参加者のうちt＋1が協働する場合、たとえばラグランジュ多項式補間を使って、f(x1),f(x2),…,f(xn)に対応するシェアk1,k2,…,knを用いて、f(x)上の任意の点を再構築することができる。
【００８３】
動作308では、参加ノードは、プロトコルの他のすべてのノードと協働して、秘密シェア結合を使って、秘密鍵kに対応する公開鍵Qを生成する。前述のように、公開鍵Qは、間接トークン・トランザクションの生成において使用される。Qの計算は、どの参加者ノードもその個別の鍵シェアを明かすことなく、かつ、参加者がまず協働して秘密鍵kを見出すことなく、達成される。
【００８４】
IATPでは、プロトコルの参加者は、コミットメント・チャネルを作成するために使用される公開鍵と整合する、正しい鍵シェアkiを与えられていることを検証することができる。整合しないシェアが参加ノード間で分配される場合、参加者は、プロトコルによって要求される秘密kを再構築することができなくなる。少なくともいくつかの実施形態では、公開検証可能な秘密分散共有（Publicly  Verifiable  Secret  Sharing、PVSS）方式が、参加者の鍵シェア検証のために用いられてもよい。PVSS方式では、各参加者Uiは解読関数Diを有し、これは、対応する公開暗号化関数で暗号化された情報にアクセスすることができる。次いで、ディーラーは公開暗号化関数を使ってシェアを分配し、それらを
Ki＝Ei(ki)、      i＝1,…,n
の形で公開する。暗号化されたシェアは、任意の関心のある個人によって公開で検証されることができる；（単に参加者自身だけではなく）誰でも参加者が正しい鍵シェアを受け取ったことを検証することができる。
【００８５】
いったん公開鍵Qが得られると、プロトコルの参加ノード間の間接トークン・トランザクションをセットアップすることができる。参加ノードの異なるペア間の間接的な移転は、コミットメント・チャネルの使用を通じて達成される。IATPでは、「コミットメント・チャネル」は、三つの別個のトランザクション、すなわち、コミットメント・トランザクションTc、返却トランザクションTr,0、および移転トランザクションTtによって定義される。すなわち、一般性を損なうことなく、移転者ノードUAと被移転者ノードUBとの間で行なわれる各間接的な移転について、三つのブロックチェーン・トランザクションが作成される：
・コミットメント・トランザクションTcは、2/2のマルチ署名P2SHトランザクションであり、UAはこれを利用して、トークンの量xをUB（すなわち、トランザクションの出力アドレス）への移転のためにコミットする。
・返却トランザクションTr,0は、コミットされたトークン量xをUA（すなわち、トランザクションの入力アドレス）に戻す。
・移転トランザクションTtは、コミットされたトークン量xをUB（すなわち、トランザクションの出力アドレス）に実際に移転する。
【００８６】
IATPの一部として生成される各コミットメント・チャネルは、秘密の値によって「ロック」される。IATPの少なくとも一つの実装では、コミットメント・チャネルUA→UBのための秘密の値はk＋kBであり、ここで、kは公開鍵Qに対応する秘密鍵であり、kBは被移転ノードUBによって選択される乱数である。以下に説明するように、秘密の値svB＝k＋kBの暗号化された値QBが、移転者ノードUAによって計算され、コミットメント・チャネルUA→UBの構築中に使用されることができる。
【００８７】
コミットメント・チャネルUA→UBを構築するための例示的なプロセス400が、図５に示されている。
１．動作402：UBが乱数kBを選択する。各コミットメント・チャネルは異なる乱数を利用してもよい。部外者が、一組のトランザクションを、IATPの同じインスタンスの要素として関連付けられることをより難しくするためである。特に、ブロックチェーンにおいて見える異なるトランザクションをIATPの共通のインスタンスに結びつけられることは、それらのトランザクションがすべて同じ秘密でタグ付けされているわけではないので、より複雑にできる。
２．動作402：UBがkBの値をUAに通信する。
３．動作404：UAが関係式
QB＝(k＋kB)G＝kG＋kBG＝Q＋kBG
を使ってQBを計算する。ここで、Qは（秘密シェア結合によって）協働的に取得され、秘密鍵kの暗号化と考えられる。
４．動作406：UAは暗号化された値QBを利用し、コミットメント・トランザクションTcを作成する。該コミットメント・トランザクションは、（１）UAおよびUB両者の署名または（２）svBおよびUBの署名のいずれかによってのみ消費できるトークンの量xをコミットする。
５．動作408：UAは返却トランザクションTr,0を作成する。該返却トランザクションは、コミットされたトークン量xの全体（一つまたは複数のトークンを消費しうるトランザクション・コストがあればそれを差し引く）をUAに返す。返却トランザクションは、パラメータnLockTimeを含んでいる。これは、返却トランザクションがブロックチェーンへの提出に適格になる時点を指定する。
６．動作410：UBが返却トランザクションに署名する。
７．動作412：UAがコミットメント・トランザクションに署名し、それをブロックチェーンに提出する。
８．動作414：移転トランザクションTtが、移転者UAまたは被移転者UBのいずれかによって作成される。該移転トランザクションは、コミットメント・トランザクションのコミットされたトークン量xをUBに移転する。該トランザクションがブロックチェーンに正常に提出されるなら、該移転トランザクションのためのロック解除スクリプトまたは<scriptSig>が値svBを含む必要がある。
【００８８】
よって、動作310において、参加ノードについての間接トークン・トランザクションの部分集合に含まれる各トランザクションについて、ノードは、トランザクション内のその対応相手と協働してコミットメント・チャネルを構築する。具体的には、参加ノードがトランザクションにおける移転者である場合、該ノードは、（１）UB（当該トランザクションにおける対応相手）によって通信されるランダム値kBを使ってコミットメント・トランザクションを作成し、（２）コミットされたトークンを該ノードに返す返却トランザクションを作成する。
【００８９】
IATPインスタンスのすべての必要なトランザクションについてすべてのコミットメント・チャネルが作成された後、動作312で、ノードは、プロトコルにおける他のすべての参加ノードと協働して、自らの鍵シェアおよび好適な秘密分散共有方式（たとえば、シャミルの秘密分散共有）を使って、秘密鍵kを回復する。いったんkの値が決定されると、参加ノードがコミットメント・チャネルの被移転者である場合、該ノードは、トークンの移転される量を得るために、対応する移転トランザクションの<scriptSig>内の秘密の値sB＝k＋kBを利用する。次いで、IATPインスタンスの移転トランザクションTtのすべてがブロックチェーンに提出されることができる。それらの移転トランザクションは、構造化されていない仕方でブロードキャストされてもよく、ランダム順またはトランザクションを提出する諸参加ノードによって決定される任意の順序であってもよい。トランザクションがブロードキャストされる順序におけるランダムさは、プロトコルの最終段階と初期段階を追跡し認識することをより困難にする助けとなりうる。
【００９０】
IATPの少なくともいくつかのインスタンスでは、参加ノードによって提供される、該ノードが関わる間接移転トランザクションのための入力アドレスおよび出力アドレスのそれぞれは一意的である。すなわち、ノードのアドレスは、入力アドレスであろうと出力アドレスであろうと、IATPプロトコルのどの時点においても再利用されない。換言すれば、いくつかの場合には、IATPの参加ノードに対して制約が課されてもよく、ノードUiがni1個の間接移転トランザクションにおいては入力ノードとして、ni2個の間接移転トランザクションにおいては出力ノードとして機能する場合、Uiは少なくともni1＋ni2個の別個のアドレスと、IATPに加入する前に入力として機能していたアドレスにおいてすでに利用可能な十分なファンドとをもつことを要求される。これらの複数の「切断された（disconnected）」アドレスは、参加者の複数のコミットメント・チャネルを同時並行して存在させることを容易にし、また、部外者が参加ノードへの、および参加ノードからのトークンの流れを追跡することを一層困難にすることによって、参加ノードが関与するトランザクションに対して、向上した匿名性を提供することができる。
【００９１】
ここで図６を参照する。図６は、参加ノード500の簡略化された例をブロック図の形で示している。ノード500は、入力ノードでも出力ノードでもよい。ノード500は、一つまたは複数のマイクロプロセッサ、特定用途向け集積チップ（ASIC）、マイクロコントローラ、または類似のコンピュータ処理装置を含みうるプロセッサ502を含む。ノード500はさらに、値、変数、および場合によってはプロセッサ実行可能なプログラム命令を記憶するための、持続的および非持続的メモリを含みうるメモリ504と、有線または無線ネットワークを介してネットワーク接続を提供するネットワーク・インターフェース506とを含む。
【００９２】
ノード500は、プロセッサ実行可能命令を含むプロセッサ実行可能なブロックチェーン・アプリケーション508を含み、該プロセッサ実行可能命令は、実行されると、プロセッサ502に、本明細書に記載の機能または動作の一つまたは複数を実行させる。
【００９３】
ここに記載される装置およびプロセス、ならびに参加ノードを構成するための記載される方法／プロセスを実装する任意のモジュール、ルーチン、プロセス、スレッド、アプリケーション、または他のソフトウェア・コンポーネントは、標準的なコンピュータ・プログラミング技法および言語を使用して実現されうることが理解されよう。本願は、特定のプロセッサ、コンピュータ言語、コンピュータ・プログラミング規約、データ構造、および他のそのような実装詳細に限定されない。
【００９４】
上述の実施形態は、本発明を限定するものではなく例解するものであり、当業者は、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく、多くの代替実施形態を設計することができることを注意しておくべきである。請求項において、括弧内に置かれた参照符号があったとしても、請求項を限定するものと解釈してはならない。「含む」および「有する」等の語は、いずれかの請求項または明細書全体に挙げられているもの以外の要素や段階の存在を除外しない。本明細書において、「含む」とは、「含む、またはからなる」ことを意味し、「有する」とは、「有する、またはからなる」ことを意味する。要素の単数形での言及は、そのような要素の複数形参照を除外するものではなく、その逆もまた同様である。本発明は、いくつかの別個の要素を含むハードウェアによって、および好適にプログラムされたコンピュータによって実装されうる。いくつかの手段を列挙する装置請求項において、これらの手段のいくつかは、同一のハードウェア項目によって具現されてもよい。ある種の施策が互いに異なる従属請求項に記載されているというだけの事実が、これらの施策の組み合わせが有利に使用できないことを示すものではない。
【図１】
2020524926.tif 000010
【図２】
2020524926.tif 000011
【図３】
2020524926.tif 000012
【図４】
2020524926.tif 000013
【図５】
2020524926.tif 000014
【図６】
2020524926.tif 000015
【国際調査報告】
2020524926.tif 000016
2020524926.tif 000017
2020524926.tif 000018