(57)【要約】本願のある実装は、複数の参加ノードからの参加を含む、ブロックチェーン実装されるトランザクションのセキュリティを高めるための、コンピュータに実装される方法を提供する。各参加ノードは、メッセージ発信者、セレクター、およびプロパゲーターとして参加してもよい。ある参加ノードにおいて実装されるこの方法は、先行ノードから暗号文を受信し；当該参加ノードが先行ノードから受信された前記暗号文のためのセレクター・ノードであるかどうかを判定することを含む。当該参加ノードが前記暗号文のためのセレクター・ノードである場合、当該方法は、前記暗号文の部分集合を選択し、前記暗号文の選択された部分集合を解読して選択暗号文を提供し、前記選択暗号文を次のノードに送信することを含む。当該参加ノードが前記暗号文のためのセレクター・ノード以外である場合、当該方法は、先行ノードから受信された前記暗号文を解読し；解読された暗号文を次のノードに送信することを含む。
2020533859.tif 000002
【特許請求の範囲】
【請求項１】
ブロックチェーン実装されるトランザクションのセキュリティを高めるための、コンピュータに実装される方法であって、前記トランザクションは複数の参加ノードからの参加を含み、各参加ノードは、自身の公開鍵と秘密鍵を有し、各参加ノードは、メッセージ発信者、セレクター、およびプロパゲーターとして参加し、当該方法は：
先行ノードから暗号文を受信する段階と；
参加ノードが前記先行ノードから受信された前記暗号文についてのセレクター・ノードであるかどうかを判定する段階と；
前記参加ノードが前記暗号文についてのセレクター・ノードである場合：
前記暗号文の部分集合を選択し；
前記暗号文の選択された部分集合を、前記参加ノードの秘密鍵を使って解読し、次のノードに伝搬させるための選択暗号文を提供し；
前記選択暗号文を次のノードに送信する段階と；
前記参加ノードが前記暗号文についてのセレクター・ノード以外である場合：
前記参加ノードの秘密鍵を用いて、前記先行ノードから受信された前記暗号文を解読し；
解読された暗号文を次のノードに送信する段階とを含む、
方法。
【請求項２】
前記参加ノードがセレクター・ノードである場合、前記暗号文は、2つ以上の暗号化されたメッセージを含み、前記暗号文の部分集合を選択することは、前記2つ以上の暗号化されたメッセージのうちの一つを選択することを含む、請求項１記載の方法。
【請求項３】
暗号文を発生させることをさらに含み、暗号文を発生させることは：
前記トランザクションが第1の値を割り当てる一つの出力アドレスを有する第1のメッセージと、前記トランザクションがそれぞれの出力アドレスに第2の値および第3の値を割り当てる2つの出力アドレスを有する第2のメッセージとを含む、少なくとも2つのメッセージを生成する段階であって、前記第2の値および前記第3の値の和は前記第1の値である、段階と；
前記少なくとも2つのメッセージのそれぞれを暗号化して暗号文を提供する段階であって、前記少なくとも2つのメッセージのそれぞれがトランザクション・オプションである、段階と；
前記暗号文を次のノードに送信する段階とを含む、
請求項１記載の方法。
【請求項４】
前記少なくとも2つのメッセージのそれぞれを暗号化して暗号文を提供することが：
トランザクション公開鍵および公開鍵の順序付けられたリストをディーラー・ノードから受信する段階であって、公開鍵の前記順序付けられたリストは、前記複数の参加ノードにおける各参加ノードに関連付けられた公開鍵を含み、公開鍵の前記順序付けられたリストは降順で、次のノードに関連付けられた公開鍵が、公開鍵の前記順序付けられたリストにおける最後の公開鍵である、段階と；
前記少なくとも2つのメッセージのそれぞれを、前記トランザクション公開鍵を用いて、その後、前記順序付けられたリストの公開鍵を用いて暗号化する段階であって、各暗号化されたメッセージは、そのメッセージのネストされた暗号化である、段階とを含む、
請求項３記載の方法。
【請求項５】
前記複数の参加ノードのそれぞれが、少なくとも一つの指定されたフォーマットおよび少なくとも一つの指定されたトランザクション値を有するトランザクション・オプションを生成しうる、請求項３記載の方法。
【請求項６】
前記参加ノードが、前記複数の参加ノードにおける別のノードから発信される暗号文のためのプロパゲーター・ノードであるとの指標をディーラー・ノードから受信する段階と；
トランザクション公開鍵およびトランザクション秘密鍵を生成する段階と；
暗号文を発信する前記別のノードへの送信のために前記トランザクション公開鍵を前記ディーラー・ノードに送信する段階とをさらに含む、
請求項１ないし５のうちいずれか一項記載の方法。
【請求項７】
前記参加ノードが前記暗号文のためのプロパゲーター・ノードである場合、前記参加ノードの秘密鍵を使って前記暗号文を解読した後：
前記トランザクション秘密鍵を使用して、解読された前記暗号文を解読して、前記選択暗号文に関連付けられたセレクター・ノードによって提供された前記選択暗号文に対応する、暗号化されていない選択されたメッセージを提供する段階と；
前記暗号化されていない選択されたメッセージが第1の出力アドレスを含む場合、前記第1の出力アドレスおよび関連付けられている第1のトランザクション値を前記参加ノードの公開鍵を用いて暗号化して、プロパゲーター出力を提供する段階と；
前記暗号化されていない選択されたメッセージが第2の出力アドレスおよび第3の出力アドレスを含む場合、前記第2の出力アドレスおよび前記第3の出力アドレスのそれぞれを、それぞれ関連付けられている第2のトランザクション値および第3のトランザクション値と一緒に、前記参加ノードの公開鍵を用いて暗号化して、前記プロパゲーター出力を提供する段階と；
前記プロパゲーター出力を、前記複数の参加ノードのそれぞれからのプロパゲーター出力を混合するために、後続ノードに転送する段階とをさらに含む、
請求項１ないし６のうちいずれか一項記載の方法。
【請求項８】
前記参加ノードが、別の参加ノードから発信される暗号文のためのセレクター・ノードであるという指標をディーラー・ノードから受信する段階をさらに含み、前記参加ノードは、前記ディーラー・ノードによってランダムにセレクター・ノードとして指定される、請求項１ないし７のうちいずれか一項記載の方法。
【請求項９】
ディーラー・ノードが、前記複数の参加ノードのうちの一つをプロパゲーター・ノードとして、前記複数の参加ノードのうちの一つを前記暗号文に関連付けられるセレクター・ノードとして指定し、前記プロパゲーター・ノード、前記セレクター・ノード、および前記暗号文を発生させる参加ノードは、前記複数の参加ノードにおける異なる参加ノードである、請求項１ないし８のうちいずれか一項記載の方法。
【請求項１０】
ディーラー・ノードが、前記複数の参加ノードのそれぞれを、前記複数の参加ノードにおける一つの他の参加ノードのためのプロパゲーター・ノードとして指定する、請求項１ないし９のうちいずれか一項記載の方法。
【請求項１１】
前記複数の参加ノードが少なくとも4つの参加ノードを含む、請求項１ないし１０のうちいずれか一項記載の方法。
【請求項１２】
前記参加ノードが、それぞれ関連する暗号文についてのメッセージ発信者、セレクター、およびプロパゲーターとして同時並行して参加してもよく、前記複数の参加ノードにおける各参加ノードが、その参加ノードがプロパゲーター・ノードとして指定されている関連する暗号文についてのプロパゲーター出力を提供する、請求項１ないし１１のうちいずれか一項記載の方法。
【請求項１３】
ブロックチェーン実装されるトランザクションのセキュリティを高めるためのコンピューティング装置であって、当該コンピューティング装置は複数の参加ノードのうちの一つであり、当該コンピューティング装置は、暗号文を発生させるメッセージ発信者、別の参加ノードで発生する暗号文についてのセレクターおよびさらに異なる参加ノードで発生する暗号文についてのプロパゲーターとして参加し、当該コンピューティング装置は：
プロセッサと；
メモリと；
前記複数の参加ノードにおける少なくとも一つの他の参加ノードにネットワーク接続性を提供するネットワーク・インターフェースと；
前記プロセッサによって実行されたときに請求項１ないし１２のうちいずれか一項記載の方法を前記プロセッサに実行させるコンピュータ実行可能命令を含むブロックチェーン・アプリケーションとを有する、
コンピューティング装置。
【請求項１４】
複数の参加ノードの間でブロックチェーン実装されるトランザクションのセキュリティを高めるためのプロセッサ実行可能命令を記憶している非一時的なプロセッサ可読な媒体であって、前記プロセッサ実行可能命令は、前記参加ノードの一つにおけるプロセッサによって実行されたときに請求項１ないし１２のうちいずれか一項記載の方法を前記プロセッサに実行させるものである、媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概括的には、ブロックチェーン・トランザクションに関し、より詳細には、ブロックチェーン実装されたトランザクションのセキュリティを高めるための方法および装置に関する。
【背景技術】
【０００２】
本稿では、「ブロックチェーン」という用語は、あらゆる形の電子的な、コンピュータベースの、分散台帳を含むものとして使用する。これらは、コンセンサスに基づくブロックチェーンおよびトランザクション・チェーン技術、許可式および非許可式台帳、共有台帳、およびそれらの変形を含むが、これらに限定されない。ブロックチェーン技術の最も広く知られている応用はビットコイン台帳であるが、他のブロックチェーン実装が提案され、開発されている。本稿では便宜上、また、例解のために、ビットコインに言及することがあるが、本発明が、ビットコイン・ブロックチェーンとともに使用することに限定されず、代替的なブロックチェーン実装およびプロトコルが、本発明の範囲内にはいることに注意しておくべきである。
【０００３】
ブロックチェーンは、諸ブロックから構成されるコンピュータベースの非中央集中式の分散システムとして実装される、コンセンサスベースの電子台帳であり、そのブロックがトランザクションから構成される。各トランザクション（Tx）は、ブロックチェーン・システムの参加者間でのデジタル資産または価値の制御権の移転をエンコードするデータ構造であり、少なくとも一つの入力および少なくとも一つの出力を含む。各ブロックは直前のブロックのハッシュを含み、そのため、諸ブロックがチェーン状に連鎖されて、そのブロックチェーンの発端以降にそのブロックチェーンに書き込まれたすべてのトランザクションの永続的で変更不可能なレコードを作成する。トランザクションは、その入力および出力に埋め込まれたスクリプトとして知られる小さなプログラムを含んでおり、それが、トランザクションの出力が、どのように、誰によってアクセスされることができるかを指定する。ビットコイン・プラットフォームでは、これらのスクリプトはスタックベースのスクリプト言語を使用して書かれる。
【０００４】
新しいトランザクションを受信するネットワーク・ノードは、すぐにそのトランザクションを、ネットワーク内の他のノードにプッシュしようとする。新しいトランザクションを他のノードに送信する前に、それは「検証される」（validated）ことがある。つまり、そのトランザクションが適用可能なブロックチェーン・プロトコルに従って適正なトランザクションの基本要件を満たすことを保証するために、一組の基準に対してチェックされてもよい。
【０００５】
トランザクションがブロックチェーンに書き込まれるために、トランザクションは、ブロックに組み込まれる。これは、トランザクションを収集してそれらをブロックに形成するよう設計されたマイニング・ノード（「採掘者」）によって行なわれる。次いで、採掘者は、ブロック（特にブロック・ヘッダ）に関して「プルーフ・オブ・ワーク〔作業証明〕」を完成させようとする。ブロックチェーン・ネットワークじゅうの採掘者は、最初にトランザクションのブロックを組み立て、そのブロックについての関連する作業証明を完成させようと競争する。成功した採掘者は、その確認済みのブロックをブロックチェーンに追加し、そのブロックはネットワークを通じて伝搬させられる。それにより、そのブロックチェーンのコピーを維持する他のノードが記録を更新できる。ブロックを受け取るノードも、そのブロックがプロトコルの正式な要件に従っていることを保証するため、そのブロックおよびその中のすべてのトランザクションを「検証」する。
【０００６】
記載されているように、ブロックチェーン・トランザクションは、一つまたは複数の入力および一つまたは複数の出力を有していてもよい。入力および出力に埋め込まれたスクリプトが、トランザクションの出力が、どのように、誰によってアクセスされることができるかを指定する。トランザクションの出力は、そのトランザクションの結果としてトークン値が移転されうる移転先のアドレスであってもよい。そのトークン値は、次に、未使用トランザクション出力としてその出力アドレスに関連付けられてもよい。その後、後続のトランザクションは、その価値を消費するまたは分散するために、そのアドレスを入力として参照してもよい。
【０００７】
ブロックチェーン・トランザクションの認識された利点の一つは、トークン値を一つまたは複数のアドレスに関連付けることによってトークン値を移転できることである。しかしながら、これらのアドレスはブロックチェーン台帳上で公に公開され、よって、ブロックチェーン・トランザクションに参加していてもいなくてもいいノードによって、未使用トランザクション出力に関する情報が監視されうるリスクがありうる。
【０００８】
たとえば、ブロックチェーン台帳のためのコイン・ミックス・サービスの開発は、モニタリング・ノードが入出力アドレス間のリンクを識別することを防ぐことに焦点を当てている。しかしながら、そのようなコイン・ミックス操作は、アドレス間のトークンの動きを識別またはトレースすることをより困難にしうるものの、モニタリング・ノードは依然として、公に利用可能なデータに対してデータマイニングおよび機械学習動作を実行して、ブロックチェーン・トランザクションについての入力と出力の間の関連付けを決定し、よって、トークン値とアドレスの間の関連付けをトレースすることができることがありうる。一部のコイン・ミックス動作がコイン・ミックスに関わるという事実は、サードパーティーのコーディネーターが危殆化されうるという追加的なセキュリティ上の脆弱性を作り出し、そうなると、ブロックチェーンから本来公に利用可能であるよりも多くのデータを曝露する結果となりうる。
【０００９】
たとえサードパーティー・コーディネーターが必ずしも危殆化されなくても、ブロックチェーン上の公に利用可能な情報は、一組のアドレスに関連付けられた特定のソースに帰すことのできるパターンを検出するのに十分なデータをモニタリング・ノードに提供することがありえ、それによりモニタリング・ノードが、トランザクションの混合に関わる特定の一組のアドレスが共通の所有者に関連付けられていることを判別することができる可能性がある。公のブロックチェーン・データにおけるこの潜在的なパターン情報は、機械学習アルゴリズム等を用いたビッグデータ解析を通じて識別可能でありうる。これは、たとえセキュリティおよびプライバシーを高めるためにコインまたは価値混合操作が使用される場合でも、既存のブロックチェーン技術のセキュリティおよびプライバシーの脆弱性を表わす。
【００１０】
システムのエントロピーとは、システムにおける無秩序または不確実性を指してもよく、モニタリング・ノードが、いくつかのブロックチェーン・トランザクションを観察した後に、トランザクション・アドレスに関する情報を推論しうる確率に関連することがありうる。システムの最大エントロピーは、参加者数Nに応じた2を底とする対数によって与えられてもよい：
【数１】
2020533859.tif 000003
モニタリング・ノードによる観察後のシステムのエントロピーは次のように表わしてもよい：
【数２】
2020533859.tif 000004
ここで、piは、ユーザーi∈{1,2,…,N}がメッセージの発信者でありうる確率である。最適シナリオ（最大のエントロピー――システムに関する最小の情報が知られうる）では、メッセージをN個のノードをもつシステム内の特定のノードに関連付ける確率は1/Nでありうる。
【００１１】
ブロックチェーン・トランザクションは、公の台帳に提出されることができるので、モニタリング・ノードは、トランザクション・トラフィック解析またはタイミング解析によって、システム内の特定のノードに異なる確率を帰属させることができる。匿名性の度合いdは、モニタリング・ノードが知る情報に関連していてもよく、エントロピーの正規化された変化として測定されてもよい：
【数３】
2020533859.tif 000005
最大の匿名度（d＝1）は、モニタリング・ノードが、システム内の各ノードまたはノードの部分集合を、メッセージの発信者であることが同じくらい確からしいと観察する場合に達成されうる。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
セキュリティおよびプライバシーを向上させ、複数のトランザクションのデータにおいて潜在的なパターンを露出させる確率を低下させるために、システムのエントロピーを増大させる方法および装置を提供することが有利であろう。
【課題を解決するための手段】
【００１３】
ブロックチェーン実装されるトランザクションを介してトークン値を分配するためのそのような改良された方法および装置が、今や考案された。
【００１４】
本明細書に記載される方法は、本明細書に記載される課題および欠点のいくつかを改善するためのブラインド化された帰結多様化（Blinded  Outcome  Diversification、BOD）方法の動作に関する。いくつかの実装では、BOD方法の動作は、モニタリング・ノードが値混合トランザクションにおける入力アドレスと出力アドレスとの間のリンクを判別しうる確率を減少させることによって、セキュリティを高めうる。それらの方法は、モニタリング・ノードがアドレス間の関連付けを判別し、複数のトランザクションのデータ内のパターンを識別する能力を低下させるように、システムのエントロピーを増加させる。それらの方法は、ブロックチェーン・トランザクションに参加する参加ノードにおいて実装されてもよい。複数の参加ノードにおける各参加ノードは、共通のトランザクション・オプションおよびトランザクション値に基づいて暗号文を生成するまたは発生させてもよい。ディーラー・ノードが、複数の参加ノードからセレクター・ノードをランダムに指定してもよく、セレクター・ノードは、ブロックチェーン・トランザクションに含めるトランザクション・オプションの一つを選択してもよい。セレクター・ノードは、特定のトランザクションのために、前記ブロックチェーン・トランザクションに含めるためのトランザクション・オプションを選択するために、参加ノードからランダムに選択されてもよく、また、ブロックチェーン・トランザクションに含めるための出力アドレスの数は入力アドレスの数を超える可能性があるため、システムのエントロピーが増加し、モニタリング・ノードがアドレス間の関連付けをうまく識別する能力は低下する。
【００１５】
このように、本発明によれば、添付の特許請求の範囲に定義される方法および装置が提供される。
【００１６】
ある側面では、本願は、複数の参加ノードからの参加を含む、ブロックチェーン実装されるトランザクションのセキュリティを高めるための、コンピュータに実装される方法を記述しうる。各参加ノードは、自身の公開鍵と秘密鍵を有していてもよい。各参加ノードは、メッセージ発信者、セレクター、およびプロパゲーターとして参加してもよい。この方法は、先行ノードから暗号文を受信するステップと；当該参加ノードが先行ノードから受信された前記暗号文のためのセレクター・ノードであるかどうかを判定するステップと；当該参加ノードが前記暗号文のためのセレクター・ノードである場合：前記暗号文の部分集合を選択し、前記暗号文の選択された部分集合を、当該参加ノードの秘密鍵を使って解読して、次のノードに伝搬させるための選択暗号文を提供し；前記選択暗号文を次のノードに送信するステップと；当該参加ノードが前記暗号文のためのセレクター・ノード以外である場合：当該参加ノードの秘密鍵を用いて、先行ノードから受信された前記暗号文を解読し；解読された暗号文を次のノードに送信するステップとを含んでいてもよい。
【００１７】
いくつかの実装では、参加ノードがセレクター・ノードである場合、前記暗号文は、2つ以上の暗号化されたメッセージを含んでいてもよく、前記暗号文の部分集合を選択することは、前記2つ以上の暗号化されたメッセージのうちの一つを選択することを含んでいてもよい。
【００１８】
いくつかの実装では、本願は、暗号文を発生させる動作を提供してもよく、これは：トランザクションが第1の値を割り当てるべき一つの出力アドレスを有する第1のメッセージと、トランザクションがそれぞれの出力アドレスに第2の値および第3の値を割り当てるべき2つの出力アドレスを有する第2のメッセージとを含む、少なくとも2つのメッセージを生成するステップであって、第2の値および第3の値の和は第1の値である、ステップと；前記少なくとも2つのメッセージのそれぞれを暗号化して暗号文を提供するステップであって、前記少なくとも2つのメッセージのそれぞれがトランザクション・オプションである、ステップと；前記暗号文を次のノードに送信するステップとを含んでいてもよい。
【００１９】
いくつかの実装では、本願は、前記少なくとも2つのメッセージのそれぞれを暗号化して暗号文を提供することが：トランザクション公開鍵および公開鍵の順序付けられたリストをディーラー・ノードから受信するステップであって、公開鍵の順序付けられたリストは、前記複数のノードにおける各参加ノードに関連付けられた公開鍵を含み、公開鍵の順序付けられたリストは降順で、次のノードに関連付けられた公開鍵が、公開鍵の順序付けられたリストの最後の公開鍵である、ステップと；前記少なくとも2つのメッセージのそれぞれを、トランザクション公開鍵を用いて、その後、公開鍵の順序付けられたリストを用いて暗号化するステップであって、各暗号化されたメッセージは、そのメッセージのネストされた暗号化である、ステップとを含むことを提供してもよい。
【００２０】
いくつかの実装では、本願は、複数の参加ノードのそれぞれが、少なくとも一つの指定されたフォーマットおよび少なくとも一つの指定されたトランザクション値を有するトランザクション・オプションを生成しうることを提供してもよい。
【００２１】
いくつかの実装では、本願は、当該参加ノードが、前記複数の参加ノードにおける別のノードから発信される暗号文のためのプロパゲーター・ノードであるとの指標をディーラー・ノードから受信し；トランザクション公開鍵およびトランザクション秘密鍵を生成し；暗号文を発信する前記別のノードへの送信のために前記トランザクション公開鍵をディーラー・ノードに送信する動作を提供してもよい。
【００２２】
いくつかの実装では、当該参加ノードが前記暗号文のためのプロパゲーター・ノードである場合、当該参加ノードの秘密鍵を使用して前記暗号文を解読した後、本願は、トランザクション秘密鍵を使用して、解読された前記暗号文を解読して、前記選択暗号文に関連付けられたセレクター・ノードによって提供された前記選択暗号文に対応する、暗号化されていない選択されたメッセージを提供し；前記暗号化されていない選択されたメッセージが第1の出力アドレスを含む場合、前記第1の出力アドレスおよび関連付けられている第1のトランザクション値を当該参加ノードの公開鍵を用いて暗号化して、プロパゲーター出力を提供し；前記暗号化されていない選択されたメッセージが第2の出力アドレスおよび第3の出力アドレスを含む場合、前記第2の出力アドレスおよび前記第3の出力アドレスのそれぞれを、それぞれ関連付けられている第2のトランザクション値および第3のトランザクション値と一緒に、当該参加ノードの公開鍵を用いて暗号化して、前記プロパゲーター出力を提供し；前記プロパゲーター出力を、前記複数の参加ノードのそれぞれからのプロパゲーター出力を混合するために、後続ノードに転送するその後の動作を記述しうる。
【００２３】
いくつかの実装では、本願は、当該参加ノードが、別の参加ノードから発信される暗号文のためのセレクター・ノードであるという指標をディーラー・ノードから受信する動作を提供してもよい。ここで、当該参加ノードは、ディーラー・ノードによってセレクター・ノードとしてランダムに指定される。
【００２４】
いくつかの実装では、本願は、前記複数の参加ノードのうちの一つをプロパゲーター・ノードとして、前記複数の参加ノードのうちの一つを前記暗号文に関連付けられるセレクター・ノードとして指定するディーラー・ノードを提供してもよく、前記プロパゲーター・ノード、前記セレクター・ノード、および前記暗号文を発信する参加ノードは、前記複数の参加ノードにおける異なる参加ノードである。
【００２５】
いくつかの実装において、本願は、前記複数の参加ノードのそれぞれを、前記複数の参加ノードにおける一つの他の参加ノードのためのプロパゲーター・ノードとして指定するディーラー・ノードを記述してもよい。
【００２６】
いくつかの実装では、本願は、前記複数の参加ノードが少なくとも4つの参加ノードを含むことを提供してもよい。
【００２７】
いくつかの実装では、本願は、当該参加ノードが、それぞれ関連する暗号文についてのメッセージ発信者、セレクター、およびプロパゲーターとして同時に参加してもよく、前記複数の参加ノードにおける各参加ノードが、その参加ノードがプロパゲーター・ノードとして指定されている関連する暗号文についてのプロパゲーター出力を提供することを提供してもよい。
【００２８】
一つの側面または諸実装に関連して上述した特徴は、任意の他の側面または実装と組み合わせて使用されてもよい。本方法の各実装について、その方法を実装するように構成された対応するコンピューティング装置が提供される。本方法の実装に関連して記載される特徴は、対応するコンピューティング装置にも適用可能であり、その逆も成り立つ。
【００２９】
追加的または代替的な側面では、本願は、ブロックチェーン実装されるトランザクションのセキュリティを高めるプロセッサ実行可能命令を記憶している非一時的なプロセッサ可読媒体を提供してもよく、プロセッサ実行可能命令は、プロセッサによって実行されると、該プロセッサに本明細書に記載される方法のいずれか一つまたは複数を実行させる。
【００３０】
本発明のこれらおよび他の側面は、本明細書に記載した実施形態から明白となり、それを参照して解明されるであろう。ここで、本発明の実施形態を、単に例として、添付の図面を参照して説明する。
【図面の簡単な説明】
【００３１】
【図１】ブロックチェーンに関連する例示的なブロックチェーン・ネットワークからのブロック図である。
【図２】本明細書に記載される方法を実行する例示的サイクルCiからのノードを示す。
【図３】参加ノードによって生成されうる例示的なメッセージの例を示す。
【図４】図3の2つ以上のメッセージのそれぞれのネストされた暗号化を示す。
【図５】本願による、サイクルCiについての、暗号文のネストされた解読およびトランザクション・オプションの選択の例示的な実装を示す。
【図６】本願による、ブロックチェーン・トランザクションに参加する参加ノードにおいて実装される例示的な方法をフローチャートの形で示す。
【図７】本願による、プロパゲーターとして指定されうる参加ノードにおいて実装される例示的な方法をフローチャートの形で示す。
【図８】本願による、サイクルC1についての、プロパゲーターとして指定された参加ノードからの例示的なプロパゲーター出力を示す。
【図９】本願による、ブロックチェーン・トランザクションへの参加ノードを示し、各参加ノードがそれぞれのサイクルCiからプロパゲーター出力を提供している。
【図１０】本願による、例示的なコイン混合方法に基づくプロパゲーター・ノード出力の暗号化フェーズを示す。
【図１１】本願による、図10の例示的なコイン混合方法のための解読フェーズを示す。
【図１２】本願による、本明細書に記載された方法の動作に続く、参加ノードの数の関数としての出力アドレスの組み合わせの数の分布を示す。
【図１３】本願による、参加ノードの簡略化された例をブロック図の形で示す。
【発明を実施するための形態】
【００３２】
本願において、用語「および／または」は、リストされた要素の任意の一つだけ、任意のサブコンビネーション、またはすべての要素を含む、リストされた要素のあらゆる可能な組み合わせおよびサブコンビネーションをカバーすることが意図されており、必ずしも追加的な要素を排除するものではない。
【００３３】
本願において、フレーズ「…または…の少なくとも一つ」は、リストされた要素の任意の一つだけ、任意のサブコンビネーション、またはすべての要素を含む、リストされた要素の任意の一つまたは複数をカバーすることが意図されており、必ずしも追加的な要素を排除するものではなく、必ずしもすべての要素を要求するものでもない。
【００３４】
ここで、ブロックチェーンに関連するブロックチェーン・ネットワーク100の例をブロック図の形で示す図1を参照する。ブロックチェーン・ネットワーク100はピアツーピアのオープンメンバーシップ・ネットワークであり、誰でも、招待なしに、または他のメンバーからの同意なしに、参加することができる。ブロックチェーン・ネットワーク100が動作するもとになるブロックチェーン・プロトコルのインスタンスを実行する分散した諸電子装置は、ブロックチェーン・ネットワーク100に参加しうる。そのような分散した電子装置は、ノード102と称されてもよい。ブロックチェーン・プロトコルは、たとえば、ビットコイン・プロトコルまたは他の暗号通貨プロトコルであってもよい。
【００３５】
ブロックチェーン・プロトコルを実行しうるノード102およびブロックチェーン・ネットワーク100のノード102は、たとえばコンピュータ、たとえばデスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、サーバー、スマートフォンのようなモバイル・デバイス、スマートウォッチのようなウェアラブル・コンピュータ、または他の電子デバイスを含むさまざまな型のものでありうる。
【００３６】
ブロックチェーン・ネットワーク100のノード102は、有線または無線通信技術を含みうる好適な通信技術を使用して互いに結合されうる。いくつかの場合には、ブロックチェーン・ネットワーク100は、少なくとも部分的にインターネット上に実装され、個々のノード102のいくつかは、地理的に分散された位置に配置されてもよい。
【００３７】
ノード102は、ブロックチェーン上のすべてのトランザクションの一般台帳を維持しうる。グローバル台帳は、分散された台帳であってもよく、各ノード102は、グローバル台帳の完全なコピーまたは部分的なコピーを記憶してもよい。グローバル台帳に影響するトランザクションは、グローバル台帳の有効性が維持されるよう、他のノード102によって検証されてもよい。ビットコイン・プロトコルを使用するもののようなブロックチェーン・ネットワークの実装および運用の詳細は、当業者には理解されるであろう。
【００３８】
各トランザクションは、一つまたは複数の入力および一つまたは複数の出力を有していてもよい。入力と出力に埋め込まれたスクリプトは、トランザクションの出力にどのように、誰がアクセスできるかを指定する。トランザクションの出力は、トランザクションの結果として価値が移転される移転先のアドレスであってもよい。そして、その価値は、未使用のトランザクション出力として、その出力アドレスに関連付けられてもよい。その後、後続のトランザクションは、その価値を消費または分散するために、そのアドレスを入力として参照しうる。
【００３９】
トランザクションは、ブロックチェーン台帳上のトランザクションに個人情報が含まれないという意味で擬似匿名的でありうるものの、理論的には、モニタリング装置が、トランザクションのチェーンにおける価値の移転を追跡または関連付けし、場合によっては、外部データを使用して、移転された価値を特定のエンティティに関連付けることが可能でありうる。外部データは、参加ノードに関連付けられた特定のユーザーに関する、たとえばインターネット・ブログ・サイト、ソーシャルメディア、または他のサードパーティーシステムから抽出される情報を含みうる。ブロックチェーン台帳のためのコイン混合サービスの開発は、モニタリング装置が、あるエンティティから別のエンティティへのデジタル資産の移転を関連付けるためにトランザクションの入力および出力アドレスを簡単に関連付けることを防止することに焦点を当てている。たとえば、コイン混合システムは、資産（たとえば、ビットコイン）を一緒にプールし、その後、プールされた資産を代替装置アドレスに分配する装置群を含むことができる。これらのコイン混合システムは、モニタリング装置がトランザクション入出力アドレスを関連付ける困難を高めうる。
【００４０】
記載されているように、いくつかのコイン混合システムは、ブロックチェーン・トランザクションについて、入力アドレスを出力アドレスから関連付け解除するために、シャッフル動作を利用しうる。しかしながら、一般的なシャッフル動作は、アドレスの順序をシャッフルするために擬似ランダム・プロセスを利用することがあり、擬似ランダム・プロセスは、本来的に、確定的な数学的演算から導出されうる。よって、モニタリング装置は、ブロックチェーン・トランザクションへの一つまたは複数の参加ノードに関する情報を推論するために、「力づく」型の攻撃を試みることができる。
【００４１】
なお、本明細書においては、「参加ノード」およびその「出力アドレス」という表現が使われることがある。参加ノードの「出力アドレス」への言及は、物理的なノードのネットワーク・アドレスを指すことを意図したものではなく、「出力アドレス」は、未使用の価値を有するブロックチェーン上のトランザクションにおいて指定されるアドレスである。その未使用の価値に対して、物理的なノードは、そのトランザクション上の署名に対応する鍵を有することにより、所有権を主張できる。この意味で、「出力アドレス」は、参加ノードのアドレスではなく、参加ノードに関連付けられたブロックチェーン・トランザクション出力アドレスである。本明細書における参加ノードの「出力アドレス」へのいかなる言及も、そのように理解されるべきである。
【００４２】
本願は、複数の参加者によって実行される方法を記述することがある。たとえば、複数の参加ノードは少なくとも4つの参加ノードを含んでいてもよい。ずっと多くの参加ノードが、本明細書に記載されるブロックチェーン・トランザクションに参加してもよい。
【００４３】
各参加ノードは、ブロックチェーン・トランザクションに参加するコンピューティング装置であってもよい。コンピューティング装置は、メッセージを生成し、その後該メッセージを暗号化するメッセージ発信者として参加してもよい。コンピューティング装置はまた、暗号文の部分集合を選択するセレクターとして参加してもよい。ここで、該部分集合は、複数の参加ノードにおける別の参加ノードによって生成されたものであってもよい。コンピューティング装置はまた、複数の参加ノードにおけるさらに別の参加ノードから発信されたものであってもよい暗号文のためのプロパゲーターとして参加してもよい。
【００４４】
本願は、公開鍵および秘密鍵を分配するためのディーラー・ノードを記述する。いくつかの実装では、ディーラー・ノードは、参加ノード以外のノードであってもよく、ディーラー・ノードは、ある参加ノードから別の参加ノードに公開鍵を移転してもよい。さらに、ディーラー・ノードは、参加ノードに対して特定の役割を指定してもよい。たとえば、各参加ノードはメッセージ発信者であってもよい。さらに、ディーラー・ノードは、各参加ノードを、別の参加ノードから発信される暗号文についてのセレクターとして、また、さらに別の参加ノードから発信される暗号文のプロパゲーターとして、指定してもよい。発信者、セレクター、プロパゲーターのそれぞれの動作については本稿で後述される。
【００４５】
ここで、図2を参照する。図2は、本願による、例示的なサイクルCiについての参加ノードの部分集合を図的に示している。サイクルCiは、一般に、あるブロックチェーン・トランザクションについての複数の参加ノードによって実行される動作によって定義されてもよい。ディーラー・ノード210は、特定の参加ノードをセレクター・ノードとして、特定の参加ノードをプロパゲーター・ノードとしてランダムに指定してもよい。
【００４６】
ディーラー・ノード210はまた、サイクルCiについての複数の参加ノード間の各参加ノードの順序または位置を定義してもよい。各参加ノードは、公開鍵および秘密鍵と関連付けられてもよく、各参加ノードの公開鍵は、他の各参加ノードと共有されてもよい。いくつかの例示的な実装では、ディーラー・ノード210は、（1）各参加ノードの順序または位置を指定し、（2）サイクルCiについての各参加ノードの順序または位置に基づいて、公開鍵の順序付けられたリストを各参加ノードに送ってもよい。いくつかの例において、サイクルCiについての参加ノード間の各参加ノードの順序または位置は、ランダムに、または他の任意の仕方で決定されてもよい。
【００４７】
ディーラー・ノード210は、複数の参加ノードのうちの一つをプロパゲーター・ノードとして、複数の参加ノードのうちの一つをセレクター・ノードとして指定してもよい。すなわち、ディーラー・ノード210は、それぞれ発信者220からのメッセージを選択し、準備するためのセレクター230およびプロパゲーター240を指定することができる。サイクルCiにおいて、発信者220、セレクター230、およびプロパゲーター240は、それぞれ、そのサイクルCiについての別個の参加ノードであってもよい。たとえば、サイクルC1は、複数の参加ノードによって実行されるBOD動作を示してもよく、ここで、メッセージがノードU1によって生成されてもよく、トランザクション・オプションがノードUjによって選択されてもよく、選択トランザクション・オプションはノードUnによって伝搬させられてもよく、nは参加ノードの数を表わしてもよく、1＜j＜nである。
【００４８】
ディーラー・ノード210は、発信者220から発信されたメッセージを解読するよう前記プロパゲーター240を指定してもよい。解読されたメッセージは、ブロックチェーン・トランザクションに含まれるべきトランザクションであってもよい。いくつかの例では、ブロックチェーン・トランザクションは、コイン混合動作のためのトランザクションであってもよい。プロパゲーター240は、サイクルCiのためのトランザクション公開鍵／秘密鍵（PiD/ViD）ペアを生成することができる。いくつかの実装では、発信者220がメッセージを生成し、メッセージを暗号化する前に、プロパゲーター240は、トランザクション公開鍵（PiD）をディーラー・ノード210に送信してもよく、ディーラー・ノード210は、そのトランザクション公開鍵（PiD）を発信者220に送信してもよい。サイクルCiについては、ディーラー・ノード210は、トランザクション公開鍵（PiD）を発信者220に送信してもよい。
【００４９】
ディーラー・ノード210は、セレクター230をランダムに指定してもよい。セレクター230は、複数の参加ノードのいずれであってもよい。後述するように、セレクター230は、先行参加ノードから暗号文を受け取り、受け取った暗号文の部分集合を選択し、セレクター230の秘密鍵を使用して暗号文の選択された部分集合を解読して、サイクルCi内の次のノードに伝搬させるための選択暗号文を提供することができる。本明細書に記載する諸方法から明白なように、セレクター230は、ディーラー・ノード210によってランダムに選択されてもよく、また、参加ノードのそれぞれからの選択機構が異なる可能性があるため、ブロックチェーン・トランザクションによるトークン値の分配は、本明細書に記載されるセキュリティ上の欠点のいくつかを改善するために、それほど決定論的ではない方法で提供されてもよい。
【００５０】
ここで、図3を参照する。図3は、任意の参加ノードによって生成されうる例示的なメッセージを図的に示している。参加ノードが暗号文を発信する発信者220（図2）として指定されうる場合、参加ノードは、トランザクションが第1の値を割り当てるべき一つの出力アドレスを有する第1のメッセージと、トランザクションがそれぞれの出力アドレスに第2の値および第3の値を割り当てるべき2つの出力アドレスを有する第2のメッセージとを含む少なくとも2つのメッセージを生成することができる。第2の値と第3の値の和は、第1の値に等しくてもよい。さらに、参加ノードは、前記少なくとも2つのメッセージのそれぞれを暗号化して、暗号文を提供してもよく、前記少なくとも2つのメッセージのそれぞれはトランザクション・オプションであってもよい。次いで、参加ノードは、生成された暗号文を次のノードに送信してもよい。
【００５１】
例解すると、発信者220は、第1のメッセージ（r1）350および第2のメッセージ（r2）360を生成することができる。第1のメッセージ350は、第1の出力アドレス356を含んでいてもよい。第2のメッセージ360は、第2の出力アドレス366および第3の出力アドレス368を含んでいてもよい。この例では、発信者220は、（i）トランザクションのための入力値（たとえば、10ビットコイン）を2つの同一の値（たとえば、5ビットコイン）に分割するオプションであって、前記2つの値のそれぞれがそれぞれの出力アドレスに関連付けられてもよい、オプション、または（ii）入力値の全体（たとえば、10ビットコイン）を単一の出力アドレスに送信するオプションを含む2つのトランザクション・オプションを生成する。2つのメッセージ・オプションのうちの一つの選択は、ランダムに指定されたセレクター230（図2）によって行なわれてもよい。セレクター230は、発信者が誰であるかを知らずにオプションを選択してもよい。後述するように、メッセージ・オプションのそれぞれは、トランザクション公開鍵および複数の参加ノードの公開鍵によるネストされた暗号化を受けるので、2つ以上のメッセージ・オプションのうちの一つの選択は、メッセージ内容（たとえば、トークン値および出力アドレス）を全く知らずに、セレクター230によって行なわれてもよい。
【００５２】
メッセージ・オプション・フォーマットがサイクルCiについて定義されてもよく、そして、暗号文を発信する動作を実行する各参加ノードは、そのサイクルCiについての該規定されたメッセージ・オプション・フォーマットに従ってメッセージを生成してもよい。すなわち、いくつかの実装では、複数の参加ノードのそれぞれは、少なくとも一つの指定されたフォーマットおよび少なくとも一つの指定されたトランザクション値を有する諸トランザクション・オプションを生成することができる。たとえば、図3において、規定されたメッセージ・オプション・フォーマットは、第1のトランザクション値352（たとえば、10ビットコイン）および第1の出力アドレス356を有する第1のメッセージ350を含んでいてもよい。メッセージ・オプション・フォーマットはまた、第2のトランザクション値362（たとえば、5ビットコイン）および第3のトランザクション値364（たとえば、5ビットコイン）を有する第2のメッセージ360を含むように規定されてもよく、第2のトランザクション値362は、第2の出力アドレス366と関連付けられてもよく、第3のトランザクション値364は、第3の出力アドレス368と関連付けられてもよい。これらのメッセージ・オプションのそれぞれが、サイクルCiについてのトランザクション・オプションでありうる。
【００５３】
発信者220は、それらのメッセージ・オプションを暗号化して、暗号文を提供してもよい。たとえば、発信者220は、ディーラー・ノード210からトランザクション公開鍵および公開鍵の順序付けられたリストを受信してもよい。公開鍵の順序付けられたリストは、複数の参加ノードにおける各参加ノードに関連付けられた公開鍵を含んでいてもよい。公開鍵の順序付けられたリストは、逆順または降順であってもよく、次のノードに関連付けられた公開鍵が公開鍵の順序付けられたリストの最後の公開鍵である。さらに、発信者220は、各メッセージ・オプションを、トランザクション鍵を用いて、その後、公開鍵の順序付けられたリストを用いて暗号化してもよい。それぞれの暗号化されたメッセージがそのメッセージのネストされた暗号化である。
【００５４】
上記の例では、参加ノードは、前記第2のメッセージを2つの出力アドレスをもって生成してもよいが、いくつかの実装では、第2のメッセージは、トランザクションがそれぞれの出力アドレスに値を割り当てる3つ以上の出力アドレスを含んでいてもよく、割り当てられた値の合計は第1の値に等しくてもよい。たとえば、第2のメッセージは、トランザクションがそれぞれの出力アドレスに第2の値、第3の値、および第4の値を割り当てる3つの出力アドレスを含んでいてもよく、第2の値、第3の値、および第4の値の合計は第1の値に等しくてもよい。すなわち、いくつかの実装では、第2のメッセージは、値と関連付けるための任意の数の出力アドレスを含みうる。
【００５５】
ここで、図4を参照する。図4は、サイクルCiのために発信者220（図2）によって生成された2つ以上のメッセージのそれぞれの、ネストされた暗号化を図的に示している。2つ以上のメッセージのそれぞれのネストされた暗号化は、トランザクション公開鍵と、サイクルCiについての降順の参加ノードの公開鍵の順序付けられたリストとを使用する暗号化動作を含んでいてもよい。
【００５６】
具体的には、図4は、第1のメッセージ（r1）350（図3）のネストされた暗号化450を示す。発信者220は、（1）トランザクション公開鍵（たとえば、ディーラー・ノード210によって提供され、そのサイクルCiのためにプロパゲーター240によって生成されたもの）を使って、その後、（2）逆順の公開鍵の順序付けられたリストを使って、第1のメッセージ（r1）350を暗号化してもよい。
【００５７】
たとえば、サイクルCiが5つの参加ノードを含む場合、発信者220は、（1）トランザクション公開鍵を使用して第1のメッセージ（r1）を暗号化し、その後、（2）第5の参加ノード、第4の参加ノード、第3の参加ノード、および第2の参加ノードに関連付けられた公開鍵を使用して逐次、暗号化してもよい。
【００５８】
同様に、図4は、第2のメッセージ（r2）360（図3）のネストされた暗号化460も示している。発信者220は、（1）トランザクション公開鍵を使用して第2のメッセージ（r2）を暗号化し、その後、（2）第5の参加ノード、第4の参加ノード、第3の参加ノード、および第2の参加ノードに関連付けられた公開鍵を使用して逐次、暗号化してもよい。第1のメッセージ（r1）および第2のメッセージ（r2）のネストされた暗号化の組み合わせは、そのサイクルCiのための発信者220に関連付けられた暗号文であってもよく、発信者220は、複数の参加ノードにおける次のノードにその暗号文を送信してもよい。図3および図4を参照して説明した例は、2つのメッセージ・オプションまたはトランザクション・オプション（たとえば、第1のメッセージ（r1）および第2のメッセージ（r2））を含むが、いくつかの例示的実装では、発信者220は、サイクルCiのための3つ以上のトランザクション・オプションを生成してもよい。
【００５９】
第1のメッセージ（r1）および第2のメッセージ（r2）のネストされた暗号化は、ディーラー・ノード210によって指定された順序に従って、サイクルCiについての参加ノードに逐次、送信される。逐次の参加ノードが自身の秘密鍵を使って、受信された暗号文を解読するにつれて、第1のメッセージ（r1）および第2のメッセージ（r2）のネストされた暗号化は逐次、暗号化を解かれていく。暗号文が最終的にプロパゲーター240（たとえば、サイクルCiについての参加ノードの最後のノード）に送信されるとき、プロパゲーター240は、プロパゲーター240の秘密鍵を使用して暗号文を解読し、その後、結果として得られる暗号文を、トランザクション秘密鍵を使用して解読してもよい。トランザクション秘密鍵は、サイクルCiの発信者220に送信するために、プロパゲーター240が事前にディーラー・ノード210に送信したトランザクション公開鍵に対応しうる。
【００６０】
ここで、図5を参照する。図5は、本願による、サイクルCiのための、暗号文のネストされた解読およびトランザクション・オプションの選択を図的に示している。サイクルCiは、一般に、複数の参加ノードによって実行される動作によって定義されてもよい。サイクルCiは、8つの参加ノード502を有していてもよい。解説を容易にするために、個々の参加ノード502は、「U1」、「U2」、「U3」、「U4」、「U5」、「U6」、「U7」、および「U8」として同定されてもよい。図5に示すサイクルについての参加ノードは8つの参加ノードを含むが、任意の数のノードがサイクルCiについてのブロックチェーン・トランザクションに参加してもよい。いくつかの実装では、参加ノードの数は、3より大きい任意の数であってもよい。図5はサイクルC1を示しており、ここで、ノードU1がメッセージを発信し、暗号文を生成してもよい。さらに、ディーラー・ノードは、ノードU6をセレクター・ノードとして指定してもよく、ノードU8をプロパゲーター・ノードとして指定してもよい。
【００６１】
ディーラー・ノードは、ノード順序またはノード位置を指定してもよい。図5において、ディーラー・ノードは、U1からU8のような昇順のノード識別子順序に従ってノード順序を指定してもよい。しかしながら、いくつかの例では、ディーラー・ノードは、いかなる他の仕方でノード順序を指定してもよく、ノード順序は、昇順ノード識別子順序に従わなくてもよい。
【００６２】
一般に、発信者220（図2）は、サイクルCiについての第1の参加ノードであってもよい。プロパゲーター240は、最後の参加ノードUnであってもよい。セレクター230は、中間的に位置された参加者Ujであってもよく、ここで、nは参加ノードの数であり、1＜j＜nである。ディーラー・ノードは、ノードU6をセレクター・ノード230として指定してもよい（図2）。よって、図5において、発信者220はノードU1であってもよく、セレクター230はノードU6であってもよく、プロパゲーター240（図2）はノードU8であってもよい。ノードU6はセレクター230として指定されるが、セレクター230は、発信者でなくプロパゲーターでない他の任意のノードであってもよい。図5において、ディーラー・ノードは、ノードU2、ノードU3、ノードU4、ノードU5、またはノードU7のいずれかをセレクター230としてランダムに指定することもできる。
【００６３】
サイクルC1の動作を実行する前に、ノードU8は、ディーラー・ノード210から、ノードU8が発信者220から発信される暗号文のためのプロパゲーター240である旨の指標を受信してもよい。いくつかの実装では、プロパゲーター240は、どの参加ノードが発信者220であるかを知らなくてもよいことが理解されるべきである。さらに、プロパゲーター240は、どの参加ノードが発信者220であるかを知る必要がなくてもよい。プロパゲーター240は、自分が複数の参加ノードにおける別の参加ノードから発信された暗号文のためのプロパゲーターの動作を実行しうることを知る必要があるだけでよい。ノードU8は、トランザクション公開鍵およびトランザクション秘密鍵を生成し、トランザクション公開鍵を、発信者220への送信のためにディーラー・ノード210に送信してもよい。
【００６４】
ディーラー・ノードはまた、公開鍵の順序付けられたリストを発信者220に送信することもできる。図5の例では、ディーラー・ノード210は、公開鍵の順序付けられたリスト（たとえば、ノードU8、U7、U6、U5、U4、U3、U2に関連する公開鍵）を送信してもよい。送信される公開鍵の順序は、ディーラー・ノード210によって指定される参加ノード順序に基づいてもよい。図5の例では、公開鍵の順序付けられたリストは、公開鍵の降順の順序付けられたリスト、すなわち、ノードU8、U7、U6、…、U3、U2に関連付けられた公開鍵であってもよい。本明細書の説明から明白なように、ノードU1がメッセージ・オプションを生成し、ネストされた暗号化動作を使用してメッセージ・オプションを暗号化して暗号文を提供するとき、暗号文は逐次、順序付けられた参加ノード内の次のノードに送信され、よって、各「次のノード」に関連付けられたそれぞれの秘密鍵を使用して逐次、解読される。
【００６５】
図5において、ノードU1は、第1のメッセージおよび第2のメッセージを含む少なくとも2つのメッセージを生成してもよい。第1のメッセージは、トランザクションが第1の値を割り当てる第1の出力アドレスを含む第1のメッセージ・オプションであってもよい。第2のメッセージは、トランザクションが第2の値を割り当てる第2の出力アドレスと、トランザクションが第3の値を割り当てる第3の出力アドレスとを含む第2のメッセージ・オプションであってもよい。これら2つのメッセージがサイクルC1のために提供されるとき、ノードU1は、図4を参照して簡単に説明したネストされた暗号化動作を使用して、それぞれ、第1のメッセージ（r1）および第2のメッセージ（r2）を暗号化してもよい。ネストされた暗号化された第1のメッセージ（r1）とネストされた暗号化された第2のメッセージ（r2）の組み合わせは暗号文であってもよく、ノードU1はノードU2に暗号文を送信してもよい。
【００６６】
ここで、本願による、ブロックチェーン・トランザクションに参加する参加ノードに実装された例示的な方法600をフローチャートの形で示す図6を同時に参照する。方法600は、ブロックチェーン・トランザクションの参加ノードの一つにおいて一つまたは複数のプロセッサによって実行されうる動作を含んでいてもよい。本実装は、動作を実行する参加ノードが、受信された暗号文の発信ノードではないとする。
【００６７】
例示するために、図6の方法600の動作を実行する参加ノードはノードU2であるとする。動作610において、プロセッサは、先行ノードから暗号文を受信してもよい。本例では、先行ノードはノードU1であってもよく、暗号文は、ネストされた暗号化された第1のメッセージ（r1）とネストされた暗号化された第2のメッセージ（r2）の組み合わせを含んでいてもよい。ネストされた暗号化されたメッセージの組み合わせが、前記暗号文であってもよい。
【００６８】
動作620において、プロセッサは、当該参加ノードが、先行ノードから受信された前記暗号文のためのセレクター・ノードであるかどうかを判定してもよい。図5において、ノードU6が指定されたセレクター・ノードであってもよい。動作620において、プロセッサは、ノードU2がノードU1から受信された前記暗号文についてのセレクター・ノードではないと判定してもよい。つまり、参加ノードは、ノードU1から受信された前記暗号文についてのセレクター・ノード以外である。
【００６９】
プロセッサが、当該参加ノードが、受信された暗号文についてのセレクター・ノード以外であると判定した場合、動作660において、プロセッサは、当該参加ノード（たとえば、ノードU2）の秘密鍵を使用して、受信された暗号文を解読してもよい。ノードU1（発信者）は、指定されたノード順序に対応する一連の公開鍵を使用して、ネストされた暗号化メッセージを生成する動作を実行したため、ノードU2は、ノードU1から受信される暗号文504の「現在の」状態を解読してもよい。
【００７０】
プロセッサは、その後、解読された暗号文を次の参加ノード（たとえば、ノードU3）に送信してもよい。ノードU2がノードU2の秘密鍵を使用して暗号文504の「現在の状態」を解読すると、もともと生成された第1のメッセージ（r1）およびもともと生成された第2のメッセージ（r2）は解読され、暗号文の「その後の現在の状態」（図5では参照符号506で示されている）は、その暗号文の暗号化されていないバージョンを提供するのに必要とされうる公開鍵の数が少なくなるようなものである。図5に示されるように、ひとたびノードU2が暗号文504の「現在の」状態を解読すると、解読された暗号文は、暗号文の暗号化されていないバージョンを提供するために使用されるべき公開鍵の残りのリストを必要とするネストされた暗号化であってもよい。
【００７１】
動作620では、プロセッサが当該参加ノードが前記暗号文についてのセレクター・ノードであると判定した場合、動作630において、プロセッサは前記暗号文の部分集合を選択してもよい。例解すると、ここで、図6の方法600の動作を実行する参加ノードはノードU6であるとする。ディーラー・ノードは、ノードU6をセレクターとして指定していてもよいので、動作630において、プロセッサは、ネストされた暗号化された第1のメッセージ（r1）およびネストされた暗号化された第2のメッセージ（r2）のうちの一つを選択してもよい。動作を実行する参加ノードがノードU6である場合、先行ノードから受信された暗号文は、図5において参照符号508で同定される暗号文として示される。この暗号文は、トランザクション公開鍵と、ノードU8、ノードU7、ノードU6のそれぞれに関連付けられた秘密鍵とで暗号化された、第1のメッセージ（r1）および2番目のメッセージ（r2）の両方を含む。図6において、セレクター・ノードは、ネストされた暗号化された第2のメッセージ（r2）を前記暗号文の部分集合として選択してもよい。いくつかの実装では、第1のメッセージ（r1）または第2のメッセージ（r2）の選択は、セレクター・ノードで受信された入力に基づいてもよいが、選択は、他の任意の仕方で行なわれてもよい。
【００７２】
動作640において、プロセッサは、ノードU6に関連付けられた秘密鍵を使用して、前記暗号文の前記選択された部分集合を解読して、選択暗号文を提供してもよい。たとえば、プロセッサは、ノードU6の秘密鍵を使用して、ネストされた暗号化された第2のメッセージ（r2）を解読して、選択暗号文510を提供してもよい。
【００７３】
動作650において、プロセッサは、選択暗号文510を次の参加ノードに送信してもよい。図5に示されるように、ノードU6は、選択暗号文510をノードU7に伝搬させる。プロセッサは、第1のメッセージ（r1）に対応するネストされた暗号化された暗号文を選択しなかったので、第1のメッセージ（m1）は、サイクルC1のためのいかなる後続の参加ノードにも伝搬されない可能性がある。すなわち、第1のメッセージ（r1）に対応するネストされた暗号化された暗号文は、プロパゲーター・ノードU8でいつまでたっても受信されない可能性がある。
【００７４】
いくつかの例示的な実装では、たとえ第1のメッセージ（r1）に対応するネストされた暗号化された暗号文が最終的にノードU7に伝搬されるとしても、ノードU6は、ノードU6の秘密鍵を使って、第1のメッセージ（r1）に関連付けられた選択されなかった暗号文を解読しないため、後続の参加ノードは、暗号化／解読のネストされた順序に従って、ネストされた暗号化された暗号文を正常に解読できない可能性がある。
【００７５】
さらに説明するために、図6の方法600の動作を実行する参加ノードはノードU7であるとする。動作610において、プロセッサは、ノードU6から暗号文を受信してもよい。本例では、受信された暗号文は、選択暗号文510であってもよい。選択暗号文510は、暗号文の「現在の状態」であってもよく、暗号文の「現在の状態」は、トランザクション公開鍵と、第8の参加ノードおよび第7の参加ノードに関連付けられた公開鍵とで暗号化された第2のメッセージ（r2）であってもよい。
【００７６】
動作620において、プロセッサは、当該参加ノード、ノードU7が、受信された暗号文のセレクター・ノード以外であると判断してもよい。第1のサイクルC1において、セレクター・ノードはノードU6であってもよく、ノードU7はノードU6に後続する位置にされていてもよい。
【００７７】
動作660において、プロセッサは、ノードU7に関連付けられた秘密鍵を使用して、受信された選択暗号文510を解読して、ノードU8に伝搬させるための解読された暗号文を提供してもよい。本例では、解読された暗号文は、トランザクション公開鍵とノードU8に関連付けられた公開鍵とで暗号化された第2のメッセージ（r2）であってもよい。すなわち、解読された暗号文は、図5に示されるように、プロパゲーター前の暗号文512であってもよい。よって、動作660において、プロセッサは、プロパゲーター前の暗号文512をプロパゲーター・ノード、ノードU8に送信してもよい。
【００７８】
ここで、本願による、参加ノードにおいて実装される例示的な方法700をフローチャートの形で示す図7を参照する。参加ノードは、（1）セレクター230（図2）以外の、（2）ディーラーによってプロパゲーター240（図2）として指定されたものであってもよい。方法700は、サイクルCiにおけるブロックチェーン・トランザクションの参加ノードの一つにおいて一つまたは複数のプロセッサによって実行されうる動作を含んでいてもよい。本実装は、動作を実行する参加ノードは、サイクルCiについての受信された暗号文の発信ノードではないとしている。
【００７９】
動作760において、プロセッサは、当該参加ノードの秘密鍵を使用して、受信された暗号文を解読して、解読された暗号文を提供してもよい。図7に示される動作760は、図6に示される動作660に対応してもよい。
【００８０】
動作710において、プロセッサは、当該参加ノードがプロパゲーター240（図2）であるかどうかを判定してもよい。当該参加ノードがプロパゲーター240でない場合、プロセッサは、動作750において、解読された暗号文を次のノードに送信してもよい。例解すると、現在の参加ノードはセレクター以外の参加ノードであり、プロパゲーター以外の参加ノードであるとする。たとえば、参加ノードは、図5の第2の参加ノード、ノードU2であるとする。動作750において、プロセッサは、解読された暗号文506を、サイクルCiについての当該参加ノードの次のノード、たとえばノードU3に送信してもよい。
【００８１】
動作710において、プロセッサが、当該参加ノードがサイクルCiについてのプロパゲーター240であると判定した場合、動作720において、プロセッサは、解読された暗号文を、トランザクション秘密鍵を使用して解読して、セレクター・ノードによって提供された選択暗号文に対応する暗号化されていない選択されたメッセージを提供してもよい。
【００８２】
例解すると、図7の方法700の動作を実行する参加ノードはノードU8であるとする。動作760において、プロセッサは、ノードU8の秘密鍵を使用して、受信された暗号文を解読して、解読された暗号文を提供してもよい。さらに、動作720において、参加ノードが解読された暗号文のためのプロパゲーター・ノードである場合、プロセッサは、解読された暗号文を、トランザクション秘密鍵を使用して解読して、選択暗号文に関連付けられたセレクター・ノードによって提供された選択暗号文に対応する暗号化されていない選択されたメッセージを提供してもよい。本明細書に記載される動作は、所与のサイクルCiについてプロパゲーターに：（1）そのプロパゲーター・ノードに関連付けられた秘密鍵、および（2）トランザクション秘密鍵を用いて解読を実行することを要求する可能性があるため、どの参加ノード（たとえば並行してモニタリング・ノードとして動作しているもの）にとっても、プロパゲーターを（よってプロパゲーター出力（単数または複数）を）発信者と関連付けるためにサイクルCiについての複数の参加ノードの間の参加ノードのチェーンを推論することは、より困難である可能性がある。
【００８３】
図5の本例のサイクルC1では、セレクター、ノードU6は、ノードU1から発信される暗号文の部分集合を選択した。暗号文の選択された部分集合は、ネストされた暗号化された第2のメッセージを含んでいた。第2のメッセージ（r2）360（図3）は、第2のトランザクション値362（たとえば、5ビットコイン）と関連付けられた第2の出力アドレス366（図3）と、第3のトランザクション値364（たとえば、5ビットコイン）と関連付けられた第3の出力アドレス368（図3）とを含んでいてもよいことを想起されたい。暗号化されていない選択されたメッセージが2つの出力アドレスを含むので、動作740において、プロセッサは、暗号化されていない出力アドレスおよび関連付けられた値のそれぞれを、参加ノード（たとえば、ノードU8）の公開鍵を用いて暗号化して、プロパゲーター・ノード出力を提供してもよい。
【００８４】
しかしながら、暗号文の選択された部分集合が、ネストされた暗号化された第1のメッセージ（図5には示されていない）を含んでいた場合、動作730において、プロセッサは、暗号化されていない出力アドレスおよび関連付けられた値を、当該参加ノード（たとえば、ノードU8）の公開鍵を用いて暗号化して、プロパゲーター・ノード出力を提供してもよい。
【００８５】
本明細書に記載される方法では、発信者220は、サイクルCiについての参加ノードの順序付けの知識を有していてもよい。しかしながら、発信者220は、どの参加ノードがセレクター230でありうるかの知識を有さなくてもよい。発信者220は、どの参加ノードがプロパゲーター240であるかの知識を有していてもよいが、トランザクション公開鍵はディーラー・ノード210を通じて発信者220に送信されるため、プロパゲーター240は、どの参加ノードが発信者220であるかの知識を有さないこともありうる。発信者220は、どの参加ノードがプロパゲーター240であるかの知識を有していてもよく、トランザクション秘密鍵をプロパゲーター240から要求することができるが、そうすることは、本明細書に記載される方法によって提供される利点を否定することになろう。すなわち、発信者220が、本明細書に記載されるサイクルCiについての動作をバイパスしようとした場合、選択プロセスを特定の参加ノードから取り去ることによって実現される利点は否定されるであろう。
【００８６】
ここで、本願による、ノードU8からの可能なプロパゲーター・ノード出力を示す図8を参照する。動作730または動作740のそれぞれからの可能なプロパゲーター・ノード出力を示すために、図8は、図5に示されたサイクルC1のノードU8からの可能なプロパゲーター・ノード出力を図的に示している。
【００８７】
セレクター（たとえば、ノード6）が、ネストされた暗号化された第1のメッセージ（r1）（図5には示さず）を含む暗号文の部分集合を選択する場合、動作720（図7）において、プロセッサは、図8に示される、第1の暗号化されていない選択されたメッセージ（r1）880を提供することができる。
【００８８】
セレクター（たとえば、ノード6）が、ネストされた暗号化された第2のメッセージ（r2）を含む暗号文の部分集合を選択した場合、動作720（図7）において、プロセッサは、図8に示される、第2の暗号化されていない選択されたメッセージ（r2）890を提供することができる。
【００８９】
動作730では、暗号化されていない選択されたメッセージが第1の出力アドレスを含む場合、プロセッサは、第1の出力アドレスおよび関連付けられた第1のトランザクション値を、ノードU8の公開鍵を用いて暗号化して、プロパゲーター出力を提供してもよい。すなわち、第1の暗号化されていない選択されたメッセージ（r1）880は、一つのトランザクション値に関連付けられた一つの出力アドレスを含んでいてもよい。動作730において、プロパゲーター出力は、第1のプロパゲーター出力885であってもよい。
【００９０】
動作740では、暗号化されていない選択されたメッセージが第2の出力アドレスおよび第3の出力アドレスを含む場合、プロセッサは、第2の出力アドレスおよび関連付けられた第2のトランザクション値を、U8の公開鍵を用いて暗号化し、第3の出力アドレスおよび関連付けられた第3のトランザクション値をノードU8の公開鍵を用いて暗号化して、プロパゲーター出力を提供してもよい。すなわち、第2の暗号化されていない選択されたメッセージ（r2）890は、それぞれがトランザクション値に関連する2つの出力アドレスを含んでいてもよい。動作740において、プロパゲーター出力は、2つの出力を含む第2のプロパゲーター出力895であってもよい。それぞれの出力は、分割されたトランザクション値を表わしていてもよい。たとえば、セレクター（たとえば、ノード6）が、トランザクション出力を2つの出力に分割する（たとえば、10ビットコインを2つの5ビットコイン・メッセージに分割する）ことに関連付けられた暗号文の部分集合を選択した場合、動作740において、プロパゲーターは2つの出力を含むことになる。
【００９１】
よって、サイクルCiの終わりには、セレクター・ノードによってなされたメッセージ・オプション選択に依存して、プロパゲーターは、一つの出力アドレスを有する1ライン・プロパゲーター出力、または2つの出力アドレスを有する2つの1ライン・プロパゲーター出力のいずれかを生成しうる。記載されるように、図5に示される例示的なサイクルC1において、プロパゲーター（たとえばノードU8）は、図8に示される第2のプロパゲーター出力895のような、2つの1ライン・プロパゲーター出力を提供する。
【００９２】
図5に示された第1のサイクルC1に加えて、追加的なサイクルCiに関連付けられた動作が、参加ノードによって実行されてもよい。たとえば、サイクルC2が生成されてもよく、ここでノードU2が発信者であってもよく、ディーラー・ノードはサイクルC2についてのセレクターおよびプロパゲーターをランダムに指定してもよい。同様に、サイクルC3、C4、…、およびC8が生成され、それぞれノードU3、ノードU4、…、およびノードU8が発信者であってもよく、ディーラー・ノードは、それぞれのサイクルについて、セレクターおよびプロパゲーターをランダムに指定してもよい。ディーラー・ノードは、各サイクルCiについて、参加ノードの間でセレクター・ノードをランダムに指定してもよい。各サイクルCiについてのセレクター・ノードはランダムに指定されるので、本明細書に記載される方法は、モニタリング・ノードが決定パターンを推定する可能性をますます制限しうる。
【００９３】
本明細書に記載される方法は、モニタリング・ノードが、トークン移転が追跡されうるよう、一つまたは複数の出力アドレスを特定のエンティティに関連付けることに関心をもちうると想定している。しかしながら、参加ノードに知られうる出力アドレスは、そのノードがプロパゲーターである出力アドレスだけでありうる。本明細書に記載される方法では、プロパゲーターは、所与のサイクルCiについての発信者の知識を有していなくてもよい。モニタリング・ノードが、所与のサイクルCiにおいてどの参加ノードがセレクターでありうるかを推定しうる可能性を制限するために、ディーラー・ノードは、ランダムに、ある参加ノードをセレクターとして指定してもよい。ここで、あるサイクルにおけるランダム指定は、別のサイクルのためのその参加ノードのいかなる指定とも無関係である。本明細書に記載された方法によれば、第1の参加ノードは、いくつかのサイクルのCiにおいてセレクターとして指定されてもよく、第2の参加ノードは、どのサイクルのCiにおいてもセレクターとして指定されなくてもよい。
【００９４】
いくつかの実装では、複数の参加ノード内の各参加ノードは、高々1サイクルについてプロパゲーターとして指定されうる。たとえば、ひとたびノードU8がサイクルC1（たとえば、ノード1が発信者）のためのプロパゲーターとして指定されると、ノードU8は、他のどのサイクルについても、プロパゲーターにはなりえない（たとえば、ノードU8は、サイクルC2、C3、…、またはC8のためのプロパゲーターではなくてもよい）。
【００９５】
いくつかの実装では、N個の参加ノードでは、N個のサイクルがありうる。ディーラー・ノード（単数または複数）が特定の諸参加ノードをNサイクルの各サイクルについてのセレクターおよびプロパゲーターとして指定し、公開トランザクション鍵および参加ノード公開鍵が先験的に交換される（たとえば、図2を参照）ことを条件として、N個のサイクルは並行して実行されてもよい。
【００９６】
ここで、図9を参照する。図9は、Nサイクルにわたって諸参加ノード902によって実行された動作が本願に従って完了し得た後のプロパゲーター・ノード出力904を図的に示している。図9の示される例では、ブロックチェーン・トランザクションに参加する8つの参加ノードがあってもよい。よって、8サイクル（たとえば、サイクルC1、C2、…およびC8）があってもよい。
【００９７】
図9において、参加ノードのそれぞれは、ある発信者から発信される暗号文のためのプロパゲーターとして指定されていてもよい。発信者は、指定されたプロパゲーターとは異なる参加ノードであってもよい。図9において、各参加ノードUiがプロパゲーターであってもよく、他の参加ノードUjによって発信されたメッセージに基づいて、1ライン・プロパゲーター出力または2つの1ライン・プロパゲーター出力のいずれかを提供してもよい。
【００９８】
例解すると、ノードU8がノードU1から発信されるメッセージのプロパゲーターとして指定されている場合（たとえば、図5に示されているサイクルC1）、ノードU8は、プロパゲーター出力r1αおよびr1βのような2つの1ライン・プロパゲーター出力を提供してもよい。
【００９９】
別の例では、ノードU1がノードU7から発信されるメッセージについてのプロパゲーターとして指定されている場合、ノードU1は、プロパゲーター出力r7αおよびr7βのような2つの1ライン・プロパゲーター出力を提供してもよい。
【０１００】
別の例では、ノードU2がノードU6から発信されるメッセージについてのプロパゲーターとして指定されている場合、ノードU2は、図9に示されるプロパゲーター出力r6αのような、1ライン・プロパゲーター出力を提供してもよい。
【０１０１】
本明細書に記載される例示的な実装では、Nサイクルの終わりには、各参加ノードが、プロパゲーター出力を提供しうる。Nサイクルのための提供されるプロパゲーター出力の数は、参加ノードの数よりも大きい可能性がある。というのも、Nサイクルの各サイクルについてのセレクターが入力値を分割（たとえば、本明細書に記載される例では10ビットコインを2つの5ビットコイン・メッセージ出力に分割）しないトランザクション・オプションを選択することは、統計的にありそうもない可能性があるためである。
【０１０２】
よって、複数の参加ノードが関与しうるブロックチェーン・トランザクションを構築するために、プロパゲーター・ノード出力がランダムな順序でアセンブルされるように、プロパゲーター出力をマージするためのシャッフル技術が実行されてもよい。セレクターが入力値を分割するためのトランザクション・オプション（たとえば、本明細書に記載される例では、10ビットコインを2つの5ビットコイン・メッセージ出力に分割）を選択しうるシナリオにおいて、プロパゲーター出力がシャッフルされ、マージされた後、分割された入力値（たとえば、それぞれ5ビットコイン）に関連付けられた2つの出力アドレスは、シャッフルされた／マージされたプロパゲーター出力集合においてもはや隣接していないことがありうる。
【０１０３】
プロパゲーター出力値をシャッフルおよびマージするための動作を例解するために、ここで図10および図11を参照する。これは、本稿に記載されるように、参加ノードのプロパゲーター・ノード出力をシャッフルおよびマージしてブロックチェーン・トランザクションにするための例示的なサークルシャッフル（CircleShuffle）動作を図的に示している。CircleShuffle動作は、出力アドレスのシャッフルおよびマージの一例でありうるが、他の任意のコイン混合方法または動作が、本明細書に記載されるBOD動作と組み合わせて使用されうる。
【０１０４】
図10は、CircleShuffle動作のための暗号化フェーズを示す。図11は、CircleShuffle動作のための解読フェーズを示す。解説の簡単のために、図10および図11を参照して記載される例示的なCircleShuffle動作は、4つの参加ノードのグループを想定するが、本明細書に記載される動作の利点を理解するには、4つより多い参加ノードが望まれることがありうる。
【０１０５】
図10のCircleShuffle動作のための暗号化フェーズは、4つの参加ノード1002を含む。解説の簡単のために、個々の参加ノードは「U1」、「U2」、「U3」、「U4」として同定されうる。特に、ノードU1は、トークン値が分割されなくてもよいノードU3のトランザクションの指定されたプロパゲーターであってもよい。ノードU2は、トークン値が分割されなくてもよいノードU1のトランザクションの指定されたプロパゲーターであってもよい。ノードU3は、トークン値が分割されてもよいノードU4のトランザクションの指定されたプロパゲーターであってもよい。ノードU4は、トークン値が分割されてもよいノードU2のトランザクションの指定されたプロパゲーターであってもよい。例解用の例として、入力値は10ビットコインであってもよく、参加ノードが入力値を分割することを選択する場合、2つの5ビットコイン値が、それぞれ、出力値に関連付けられてもよい。入力値が分割されうる場合、セレクター230（図2）は、2つの1ライン・プロパゲーター出力を提供するためのメッセージ・オプションを選択していてもよい。すなわち、2つの1ライン・プロパゲーター出力は、2つの出力アドレスであってもよく、各出力アドレスがトランザクション値に関連付けられてもよい（たとえば、図3の第2メッセージ（r2）360を参照）。
【０１０６】
図10において、各参加ノード1002は、シャッフルされたオプションの集合（a  set  of  shuffled  options、SSO）1004を、次のノードの公開鍵を用いて暗号化してもよい。例解すると、ノードU1は、ノードU1のプロパゲーター出力（たとえば、r3α）を、ノードU1に関連付けられた公開鍵を用いて暗号化し、シャッフルされたオプションの集合（たとえば、暗号化されたプロパゲーター出力r3αを含む）をノードU2の公開鍵を用いて暗号化してもよい。いくつかの実装では、プロパゲーター出力は、トランザクション値および該トランザクション値に関連付けられた出力アドレスに関連付けられてもよい。ノードU1は、前記SSOを、ノードU2の公開鍵で暗号化してもよい。それにより、暗号化されたSSOがノードU2に送信されるとき、ノードU2はそのSSOを解読しうる。すなわち、ノードU2に関連付けられる秘密鍵を持たないノードは、そのSSOを解読できない可能性がある。
【０１０７】
ノードU2がノードU1から暗号化されたSSOを受信すると、ノードU2は、（i）受信された暗号化されたSSOを解読し；（ii）U2のプロパゲーター出力を、ノードU2の公開鍵を使って暗号化し；（iii）SSOに含まれる暗号化されたプロパゲーター出力の順序をシャッフルしてもよい。ひとたび暗号化されたプロパゲーター出力がシャッフルされると、シャッフルされたSSOは、ノードU3に関連付けられた公開鍵を使って暗号化されてもよい。ノードU2は、更新され暗号化されたSSOを次のノードに転送してもよい。
【０１０８】
いくつかの実装では、SSO内の暗号化されたアドレスの順序をシャッフルするための動作を遂行するとき、参加ノードは任意の好適な擬似ランダム・プロセスを利用しうる。アドレスをシャッフルするための擬似ランダム・プロセスは、本来的に、確定的な数学的手順によって生成されうることが認識されうる。
【０１０９】
ノードU3は、ノードU2から暗号化されたシャッフルされたSSOを受信すると、同様の動作を実行してもよく、同様に、更新されたシャッフルされたSSOを、ノードU4の公開鍵を用いて暗号化してもよい。ノードU3は、更新され暗号化されたSSOを次のノード、ノードU4に転送してもよい。同様に、ノードU4は、ノードU3から暗号化されたシャッフルされたSSOを受信すると、動作を実行してもよく、更新されたシャッフルされたSSOをノードU1の公開鍵を用いて同様に暗号化してもよい。ノードU4は、更新され暗号化されたSSOを次のノード、ノードU1に転送してもよい。
【０１１０】
図10に示される暗号化／シャッフル動作に続いて、図11において、ノードU1はシャッフルされた出力の集合を受信する。ノードU1は、受信されたSSOを、ノードU1の秘密鍵を使用して解読し、SSO内でノードU1の暗号化された出力アドレスを検索してもよい。ノードU1がノードU1の暗号化されたプロパゲーター出力を取得する時、ノードU1はノードU1の秘密鍵を使用してプロパゲーター出力を解読し、その後、ノードU1の公開鍵を使用してプロパゲーター出力を再暗号化してもよい。ノードU1は、次の利用可能な参加ノード、ノードUiに関連付けられた公開鍵を用いて、更新されたSSOを暗号化してもよい。次に利用可能な参加ノードであるノードUiは、必ずしもノードU2でなくてもよく、参加ノードのうちの別のノードであることができる。
【０１１１】
その後、ノードUiは、受信された暗号化され更新されたSSOを解読し、ノードUiに関連付けられたプロパゲーター出力を検索し、ノードUiに関連付けられた秘密鍵を使用してそのプロパゲーター出力を解読し、ノードU1の公開鍵を用いてそのアドレスを再暗号化する、同様の動作を実行してもよい。ノードUiは、更新されたSSOを、別の参加ノードの公開鍵（たとえば、集合{U1,U2,…,Un}の参加ノード）を用いて暗号化してもよい。
【０１１２】
ひとたび各参加ノードが、受信されたSSO内のその暗号化されたプロパゲーター出力を検索し、（i）見出し、それをその対応する解読された値で置き換え、出力アドレスをノードU1の公開鍵で再暗号化したら、最終的な更新され暗号化されたSSOがノードU1に送信されてもよい。例示的実装では、最終的な更新され暗号化されたSSOは、ノードU1の公開鍵で暗号化された諸出力アドレスを含んでいてもよい。
【０１１３】
ひとたびノードU1が最終的な更新され暗号化されたSSOを受信すると、ノードU1は、諸出力アドレスを提供するために、該SSOを、ノードU1に関連付けられた秘密鍵を使って解読してもよい。最終的なSSOの諸出力アドレスの入れ換え〔パーミュテーション〕は、ターゲットとされるブロックチェーン・トランザクションに諸出力が含まれる最終的な順序付けに対応してもよい。
【０１１４】
いくつかの実装では、ノードU1は、最終的な更新されたSSOからの諸出力アドレスを有するブロックチェーン・トランザクションを生成してもよい。ノードU1入力からの入力は、SIGHASH_ANYONECANPAY署名スクリプトを使用してブロックチェーン・トランザクションに追加されてもよく、他の任意の参加ノードが該トランザクションに逐次反復的に入力を追加してもよい。ノードU1は、そのトランザクションを次の参加ノードに送信してもよく、次の参加ノードは、前記ノードの対応する出力情報が正しいことをチェックし、それ自身の入力を追加し、該トランザクションに署名し、該トランザクションをさらなる次の参加ノードに転送してもよい。参加ノードの最後のノードが該トランザクションに署名し、該トランザクションをブロックチェーンに提出するまで、同様の動作が、任意の数の残りの参加ノードによって実行される。
【０１１５】
同じ値を有する価値を移転するためのN個の参加ノード（たとえば、N個の参加ノードのそれぞれが、一つまたは複数の出力アドレスに関連付けられた10ビットコインを移転する）のためのブロックチェーン・トランザクションを生成するとき、モニタリング・ノードは、時間を追って入力アドレスおよび出力アドレスを観察し、価値の移転を特定のトランザクション・アドレスに正しく関連付けようとしうることが理解されうる。
【０１１６】
しかしながら、N個の参加ノードについて本明細書に記載したBOD動作と組み合わせてコイン混合動作を使ってブロックチェーン・トランザクションを生成するとき、m個の参加ノードは、複数の出力アドレスに価値を移転させることを選択してもよい。モニタリング・ノードが、データマイニングおよび機械学習動作に基づいて、入力アドレスを諸出力アドレスの対応する正しい組み合わせ（または単一の出力アドレス）に正しく関連付ける確率は、プロパゲーター出力の数が増加するにつれて低下しうる。たとえば、m個の参加ノードがブロックチェーン・トランザクションを介してトークンを複数の出力アドレスに移転することを選択しうる場合、N−m個の参加ノードは価値を単一の出力アドレスに移転してもよく、m個の参加ノードは価値をk個の量に分割してもよい。よって、コイン混合トランザクションに含まれる出力アドレスの数は、次のようなものでありうる。
【数４】
2020533859.tif 000006
さらに、モニタリング・ノードが入力アドレスを一つの出力アドレスに正しく関連付ける確率は、次のようなものでありうる。
【数５】
2020533859.tif 000007
いくつかの実装では、モニタリング・ノードが入力アドレスを出力アドレスに正しく関連付ける確率を決定するときに、追加的な場合が考慮されてもよい：
・移転される価値の分割が均等でありうるとき、k個の出力量は等しくてもよい。たとえば、価値が等しく分割されるとき、k個の出力量は等しくてもよい（50/50）。
・移転される価値の分割が半端であるとき、移転される値の出力量は等しくなくてもよい（たとえば、75/25、80/20など）。
【０１１７】
価値の移転が均等に分割されうる場合には、移転される価値をk個の量に分割するm参加者間の可能な組み合わせの数は、次式で与えられてもよい。
【数６】
2020533859.tif 000008
価値の移転が均等に分配されないことがありうる場合には、移転される価値をk個の量に分割するm参加者間の可能な組み合わせの数は、次式で与えられてもよい。
【数７】
2020533859.tif 000009
【０１１８】
いくつかの実装では、モニタリング・ノードが一つまたは複数の出力アドレスを参加装置に正しく関連付ける確率は、以下のように与えられてもよい。
・ある出力アドレスに関連付けられた移転された値が入力（最大）量に等しい場合、確率は次式によって与えられてもよい：
Pa＝1/(N−m)
・ある出力アドレスに関連付けられた移転された値が入力（または最大）量未満でありうる場合、その出力をある入力アドレスに関連付ける確率は、次式によって与えられてもよい：
P1＝1/(km)
・ある出力アドレスに関連付けられた移転された値が入力（または最大）量未満でありうる場合、移転された値の和が入力（最大）量に等しくなるようにいくつかの出力アドレスを関連付ける確率は、次式によって与えられてもよい：
Pk＝1/(nC)
よって、いくつかの実装では、モニタリング・ノードが単一の出力アドレスを単一の入力アドレスに正しく関連付けの確率は、次式によって与えられてもよい：
【数８】
2020533859.tif 000010
さらに、モニタリング・ノードが一つまたは複数の出力アドレスを単一の入力アドレスに正しく関連付け、それによって参加ノードの完全な移転される値を関連付ける確率は、次式によって与えられてもよい：
【数９】
2020533859.tif 000011
【０１１９】
よって、本明細書に記載されるBOD動作が実行されるとき、トークンを移転するための出力アドレスの組み合わせの数は、コイン混合方法がそれ自身として実行されうる場合よりも多くなりうる。すなわち、本明細書に記載されるBOD動作が実行される場合、モニタリング・ノードが一つまたは複数の出力アドレスを入力アドレスに正しく関連付けうる確率は、コイン混合方法がそれ自身として実行されうる場合よりも低い可能性がある。よって、本明細書に記載される方法は、システムの全体的なエントロピーを増加させ、入力アドレスを出力アドレスに関連付ける確率を減少させるために、従来ほど決定論的ではない仕方でトークン値を分配することに向けられる。
【０１２０】
例解すると、10の参加ノードと、（a）価値の均等な分割が移転されうる場合、および（b）価値の半端な分割（たとえば、不均等な分割）が移転されうる場合の2つのシナリオとを考える。参加ノードのうち5つのノードについてのプロパゲーター出力が、トークン値を2つの出力アドレス（たとえば、k＝2）に分割（たとえば、10ビットコインを2つの5ビットコイン出力アドレスに分割）する結果になり、残りの5つの参加ノードについてのプロパゲーター出力がトークン値の分割をもたらさない場合、N＝10、m＝5、k＝2の場合の組み合わせの数は、以下のように与えられてもよい：
（a）価値の均等分割が移転されうる場合：
【数１０】
2020533859.tif 000012
（b）価値の半端な分割が移転されうる場合：
【数１１】
2020533859.tif 000013
【０１２１】
どちらの例でも、トランザクション・オプションが使用されない場合に比べて、組み合わせの数は多くなりうる。モニタリング・ノードが一つまたは複数の出力アドレスを入力アドレスに正しく関連付ける確率は、それ自身として実行される既知のコイン混合方法の動作と比較して、低くなりうる。
【０１２２】
ここで、図12を参照する。図12は、出力アドレスの可能な組み合わせの数を、m＝N/2のとき、kのさまざまな値について、均等なまたは半端な分割について、参加者の数の関数として、グラフの形で示している。組み合わせの数が多いほど、モニタリング・ノードが正しく関連付けをなしうる確率が小さくなることが理解されうる。すなわち、いくつかの実装では、一つまたは複数の出力アドレスを入力アドレスに正しく関連付ける確率は、図12に示される分布の逆数として与えられてもよい。半端な分割の場合は、均等分割の場合よりも可能な組み合わせが少なくなりうるが、それぞれの場合は、自身で既知のコイン混合システムの動作を実行するときに提供されるよりも、多くの組み合わせを提供しうることが理解されうる。
【０１２３】
図12において、第1の曲線1210は、既知のコイン混合方法の動作を実行する間の、出力アドレスの可能な組み合わせの数を参加者の数の関数として示している。第2の曲線1220は、移転される値の半端な分割が実装され、移転される値が2つの量（たとえば、k＝2）に分割されうる場合の出力アドレスの可能な組み合わせの数を示す。第3の曲線1230は、移転される値の半端な分割が実装され、移転される値が3つの量（たとえば、k＝3）に分割されうる場合の出力アドレスの可能な組み合わせの数を示す。
【０１２４】
さらに、第4の曲線1240は、移転される値の均等な分割が実装され、移転される値が2つの量（たとえば、k＝2）に分割されうる場合の出力アドレスの可能な組み合わせの数を示す。第5の曲線1250は、移転される値の均等な分割が実装され、移転される値が3つの量（たとえば、k＝3）に分割されうる場合の出力アドレスの可能な組み合わせの数を示す。
【０１２５】
本明細書に記載されたブラインド化された帰結多様化（Blinded  Outcome  Diversification、BOD）方法の動作は、公開台帳上でトークン値を分配することに関連するいくつかの欠点またはセキュリティ・リスクを緩和する可能性がある。本稿に記載される動作は、いかなる集中化されたエンティティにも依拠しない。特に、本稿に記載される動作は、サイクルCiのための参加ノードによって実行され、各サイクルのためにプロパゲーター出力が提供される。各サイクルCiのためにランダムに参加ノードをセレクターとして指定することによって、BOD法の動作は、システムのエントロピーを増加させ、任意のノード固有バイアスをよりランダムに分布させることができ、それにより、モニタリング・ノードが機械学習動作を利用して、入力アドレスと出力アドレスとの間の関連を明らかにする複数のトランザクションを横断するパターンを推定しうる確率を低下させることができる。いくつかの実装では、BOD法の動作は、可能なメッセージ・オプションのフォーマットおよびトークン分割値が、ブロックチェーン・トランザクションへの参加ノードの間でN個のサイクルのための動作の開始前に指定される必要がありうることを要求しうることが理解されうる。
【０１２６】
いくつかの実装では、モニタリング・ノードは、本明細書に記載される方法およびコンピューティング装置に従って、サイクルCi内の参加ノードであることがありうる。たとえば、モニタリング・ノードは、ブロックチェーン・トランザクションのための参加ノードであってもよく、本明細書に記載の方法に従って動作を実行したり、あるいは、単に、参加ノードから参加ノードに送信されたメッセージまたは暗号文を観察したりしてもよい。さらに、モニタリング・ノードは、ブロックチェーン・ノードであってもよく、これは、サイクルCiにおける参加ノードではなくてもよい。しかしながら、プロパゲーター出力がブロックチェーンへの提出のためにブロックチェーン・トランザクションに追加されうる前に、各参加ノードは、生成されたメッセージに対応する出力が正しいかどうかを検証するためにトランザクションに署名してもよい。よって、複数の参加ノード内の各参加ノードがトランザクションに署名しない限り、トランザクションは、ブロックチェーンへの提出のために検証されない可能性がある。動作を実行したり、および／またはメッセージ／暗号文を観察したりするモニタリング・ノードの影響は、各サイクルに従って実行される動作が無駄になることがありうるということでありうる。いくつかの実装では、モニタリング・ノードとして作用する参加装置に対抗するために、参加ノードは、それらの入力アドレスおよび出力アドレスを周期的に変更してもよい。
【０１２７】
ここで、参加ノード1300の簡略化された例をブロック図の形で示す図13を参照する。参加ノード1300は、プロセッサ1302、ネットワーク・インターフェース1304、およびメモリ1306を含んでいてもよい。参加ノード1300は、ネットワーク接続性と、本明細書に記載の機能を実行するのに十分な処理およびメモリ資源とを有する、任意の好適なコンピューティング・ハードウェアを使用して実装されてもよい。参加ノードは、本明細書に記載の機能を実装するためのプロセッサ実行可能命令を含んでいてもよい。いくつかの実装では、プロセッサ実行可能命令は、ブロックチェーン・アプリケーション1320と称されてもよいが、該命令は、ハードウェアおよびオペレーティングシステムに依存して、一つまたは複数のモジュール、アプリケーション、スクリプト、または他のプログラミング構造で実装されてもよいことが理解されよう。プロセッサ1302は、プロセッサ、マルチコアプロセッサ、および／または複数プロセッサを含んでいてもよい。メモリ1306は、この例示的実装では本稿に記載される動作のデータを含むデータを記憶してもよい。
【０１２８】
本明細書に記載された装置およびプロセス、ならびにブロックチェーン・トランザクションに参加するために、記載された方法／プロセスを実装する任意のモジュール、ルーチン、プロセス、スレッド、アプリケーション、または他のソフトウェア・コンポーネントは、標準的なコンピュータ・プログラミング技術および言語を用いて実現されうることが理解されよう。本願は、特定のプロセッサ、コンピュータ言語、コンピュータ・プログラミング規約、データ構造、または他のそのような実装の詳細に限定されない。
【０１２９】
上述の実施形態は、本発明を限定するものではなく、例解するものであり、当業者は、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく、多くの代替実施形態を設計できるであろうことを注意しておくべきである。請求項においては、括弧内に置かれた参照符号があったとしても、請求項を限定するものと解釈してはならない。「含む」および「有する」等の語は、いずれかの請求項または明細書全体に列挙されたもの以外の要素またはステップの存在を除外するものではない。本明細書において、「含む」は「…を含むまたは…からなる」を意味し、「有する」は「…を含むまたは…からなる」を意味する。要素の単数形での言及は、そのような要素の複数の言及を除外するものではなく、その逆もまた同様である。本発明は、いくつかの別個の要素を含むハードウェアによって、および好適にプログラムされたコンピュータによって実装されうる。いくつかの手段を列挙する装置請求項においては、これらの手段のいくつかは、同一のハードウェア項目によって具現されてもよい。ある種の施策が相互に異なる従属請求項に記載されているというだけの事実が、これらの施策の組み合わせが有利に利用できないことを示すものではない。
【図１】
2020533859.tif 000014
【図２】
2020533859.tif 000015
【図３】
2020533859.tif 000016
【図４】
2020533859.tif 000017
【図５】
2020533859.tif 000018
【図６】
2020533859.tif 000019
【図７】
2020533859.tif 000020
【図８】
2020533859.tif 000021
【図９】
2020533859.tif 000022
【図１０】
2020533859.tif 000023
【図１１】
2020533859.tif 000024
【図１２】
2020533859.tif 000025
【図１３】
2020533859.tif 000026
【国際調査報告】
2020533859.tif 000027
2020533859.tif 000028