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

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

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

特表2024-531301ブロックチェーンを使用したピアツーピアデータ伝送の調整
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-29
(54)【発明の名称】ブロックチェーンを使用したピアツーピアデータ伝送の調整
(51)【国際特許分類】
   H04L 9/08 20060101AFI20240822BHJP
   H04L 9/32 20060101ALI20240822BHJP
【FI】
H04L9/08 C
H04L9/32 200Z
H04L9/08 F
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024509075
(86)(22)【出願日】2022-07-19
(85)【翻訳文提出日】2024-04-08
(86)【国際出願番号】 EP2022070119
(87)【国際公開番号】W WO2023020764
(87)【国際公開日】2023-02-23
(31)【優先権主張番号】2111836.9
(32)【優先日】2021-08-18
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】アレクサンドル・パウノイウ
(72)【発明者】
【氏名】クレイグ・スティーヴン・ライト
(57)【要約】
P2Pネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法。第2のハッシュ値が取得され、第2のハッシュ値は、第1および第2のハッシュ関数を用いてデータアイテムに関連するデータ要求をハッシュすることによって生成される。第2のハッシュ値および要求ノードの公開鍵は、要求ノードに接続されるP2Pノードへ送信され、要求ノードとターゲットノードとの間にチェーンが形成される。ターゲットノードは、データをパケットへと分割し、要求ノードの公開鍵を使用して第1のハッシュ値と共にパケットの各々を符号化して最初の暗号化されたメッセージを生成し、チェーンの中のノードの公開鍵を用いて最初の暗号化されたメッセージを暗号化することによって、最初の暗号化されたメッセージを生成する。暗号化されたメッセージが取得され、データアイテムを構築するために復号され、証明トランザクションをブロックチェーンへ提出する。
【特許請求の範囲】
【請求項1】
ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、前記P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、前記P2Pノードのうちのターゲットノードが、ターゲットデータアイテムへのアクセス権を有し、前記方法が、要求P2Pノードによって実行され、
第2のハッシュ値を取得するステップであって、前記第2のハッシュ値が、第1のハッシュ値を生成するために第1のハッシュ関数を用いて少なくともデータ要求をハッシュし、次いで、第2のハッシュ値を生成するために第2のハッシュ関数を用いて少なくとも前記第1のハッシュ値をハッシュすることによって生成され、前記データ要求が、前記ターゲットデータアイテムと関連付けられる、ステップと、
前記要求P2Pノードに接続される1つまたは複数のP2Pノードに前記第2のハッシュ値および前記要求P2Pノードの公開鍵を送信するステップであって、P2Pノードのチェーンが、前記要求P2Pノードと前記ターゲットP2Pノードとの間に形成され、前記チェーンの中の各P2Pノードが、前記チェーンの中の先行するP2Pノードおよび/または前記チェーンの中の次のP2Pノードに接続され、前記チェーンの中の各P2Pノードが、前記チェーンの中の前記次のP2Pノードに、前記第2のハッシュ値および前記チェーンの中の各々のそれぞれの先行するP2Pノードに関連する前記それぞれの公開鍵を送信するように構成され、それにより、前記ターゲットP2Pノードが、前記第2のハッシュ値および1つまたは複数のそれぞれの公開鍵を受信する、ステップと
を含み、
前記ターゲットP2Pノードが、前記ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットへと分割し、前記要求P2Pノードの公開鍵を使用して前記第1のハッシュ値と共に前記1つまたは複数のそれぞれのデータパケットの各々を暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成し、前記受信された1つまたは複数のそれぞれの公開鍵の各々を用いて前記1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化することによって、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するように構成され、前記方法が、
前記要求P2Pノードに接続される前記チェーンの中の前記それぞれのP2Pノードから前記1つまたは複数の最初の暗号化されたメッセージを取得するステップであって、前記要求P2Pノード以外の前記チェーンの中の各々のそれぞれのP2Pノードが、前記チェーンの中の前記次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得し、前記それぞれのP2Pノードに関連する前記それぞれの公開鍵を使用して前記1つまたは複数の暗号化されたメッセージを復号し、前記1つまたは複数の暗号化されたメッセージを前記チェーンの中の前記先行するそれぞれのP2Pノードに送信し、それにより、前記1つまたは複数の最後の暗号化されたメッセージが、前記ターゲットP2Pノードから前記要求P2Pノードへ前記チェーンに沿って送信されるにつれて復号に成功する、ステップと、
前記1つまたは複数のそれぞれの最初の暗号化されたメッセージを復号して前記1つまたは複数のそれぞれのデータパケットを取得し、それに基づいて前記ターゲットデータアイテムを構築するステップと、
前記要求P2Pノードに接続される前記チェーンの中の前記それぞれのP2Pノードから前記1つまたは複数の最初の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションを前記ブロックチェーンネットワークに提出するステップと
を含む、コンピュータ実装方法。
【請求項2】
前記チェーンの中の前記次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得する前記チェーンの中の各P2Pノードが、前記チェーンの中の前記それぞれの次のP2Pノードから前記1つまたは複数の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションを前記ブロックチェーンネットワークに提出するように構成される、請求項1に記載の方法。
【請求項3】
各々のそれぞれの最初の暗号化されたメッセージを復号するステップが、第1のハッシュ値候補および前記それぞれのデータパケットを明らかにし、前記方法が、
前記第2のハッシュ関数を用いて前記第1のハッシュ値候補をハッシュして第2のハッシュ値候補を生成するステップと、
前記第2のハッシュ値候補が前記第2のハッシュ値と一致することを検証するステップと
を含む、請求項1または2に記載の方法。
【請求項4】
前記要求P2Pノードに接続される前記1つまたは複数のP2Pノードへの前記第2のハッシュ値の前記送信が、前記第2のハッシュ値を前記1つまたは複数のP2Pノードに直接送信することを含む、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記要求P2Pノードに接続される前記1つまたは複数のP2Pノードへの前記第2のハッシュ値の前記送信が、要求トランザクションを前記ブロックチェーンネットワークに提出するステップを含み、前記要求トランザクションが、前記第2のハッシュ値および1つまたは複数のそれぞれの出力を含み、各々のそれぞれの出力が、前記P2Pノードのそれぞれのノードの前記それぞれの公開鍵にロックされる、請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記ターゲットデータアイテムが、複数のデータパケットへと分割される、請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記それぞれのP2Pノードからの前記1つまたは複数の最初の暗号化されたメッセージの前記取得が、前記1つまたは複数の最初の暗号化されたメッセージを前記それぞれのP2Pノードから直接取得することを含む、請求項1から6のいずれか一項に記載の方法。
【請求項8】
前記ブロックチェーンが、1つまたは複数のそれぞれのデータトランザクションを含み、各々のそれぞれのデータトランザクションが、それぞれの最初の暗号化されたメッセージを含み、前記それぞれのP2Pノードからの前記1つまたは複数の最初の暗号化されたメッセージの前記取得が、前記ブロックチェーンから前記1つまたは複数の最初の暗号化されたメッセージを取得することを含む、請求項1から7のいずれか一項に記載の方法。
【請求項9】
前記第2のハッシュ値の前記取得が、前記第2のハッシュ値を生成することを含む、請求項1から8のいずれか一項に記載の方法。
【請求項10】
前記第1のハッシュ関数と前記第2のハッシュ関数とが、同じハッシュ関数である、請求項1から9のいずれか一項に記載の方法。
【請求項11】
前記第1のハッシュ関数と前記第2のハッシュ関数とが、異なるハッシュ関数である、請求項1から9のいずれか一項に記載の方法。
【請求項12】
前記第1のハッシュ関数が、暗号学的ハッシュ関数であり、および/または前記第2のハッシュ関数が、暗号学的ハッシュ関数である、請求項1から11のいずれか一項に記載の方法。
【請求項13】
前記データ要求が、前記ターゲットデータアイテムのハッシュに基づく、請求項1から12のいずれか一項に記載の方法。
【請求項14】
ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、前記P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、前記P2Pノードのうちのターゲットノードが、要求P2Pノードによって要求されるターゲットデータアイテムへのアクセス権を有し、前記方法が、前記ターゲットP2Pノードによって実行され、
第2のハッシュ値および1つまたは複数の公開鍵を取得するステップであって、各公開鍵がそれぞれのP2Pノードと関連付けられ、前記1つまたは複数の公開鍵のうちの1つが、前記要求P2Pノードの公開鍵であり、前記他の1つまたは複数の公開鍵の各々が、前記要求P2Pノードと前記ターゲットP2Pノードとの間のP2Pノードのチェーンに属するそれぞれのP2Pノードと関連付けられ、前記チェーンの中の各P2Pノードが、前記チェーンの中の先行するP2Pノードおよび/または前記チェーンの中の次のP2Pノードに接続される、ステップと、
前記第2のハッシュ値が第1のハッシュ値に基づくと決定するステップであって、前記第1のハッシュ値が、前記ターゲットデータアイテムに関連するデータ要求に基づく、ステップと、
前記ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割するステップと、
前記要求P2Pノードの公開鍵を使用して前記第1のハッシュ値と共に前記1つまたは複数のそれぞれのデータパケットの各々を暗号化して、1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成するステップと、
前記チェーンの中の前記それぞれのP2Pノードに関連する前記それぞれの公開鍵の各々を用いて前記1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化して、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するステップと、
前記ターゲットP2Pノードに接続される前記チェーンの中の前記P2Pノードに前記1つまたは複数のそれぞれの最後の暗号化されたメッセージを送信するステップと
を含み、
1つまたは複数のそれぞれの証明トランザクションが、前記1つまたは複数のそれぞれの最後の暗号化されたメッセージの前記送信を証明するために前記ブロックチェーンネットワークへ提出される、コンピュータ実装方法。
【請求項15】
前記1つまたは複数のそれぞれの証明トランザクションが、前記ターゲットP2Pノードによって前記ブロックチェーンネットワークへ提出される、請求項14に記載の方法。
【請求項16】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、前記メモリが、前記処理装置上で実行されるように配置されるコードを記憶し、前記コードが、前記処理装置上で実行されると、請求項1から15のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
【請求項17】
コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されると、請求項1から15のいずれか一項に記載の方法を実行するように構成される、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ピアツーピア(P2P)ネットワークのノード間でデータの伝送を調整するためにブロックチェーンを使用する方法に関する。この方法は、データ伝送の証明を可能にする。
【背景技術】
【0002】
ブロックチェーンとは分散型データ構造の一形態を指し、ブロックチェーンの重複コピーは、分散型ピアツーピア(P2P)ネットワーク(以下では「ブロックチェーンネットワーク」と呼ばれる)内の複数のノードの各々において維持され、広く公開される。ブロックチェーンは、データのブロックのチェーンを備え、各ブロックは、1つまたは複数のトランザクションを備える。いわゆる「コインベーストランザクション」以外の各トランザクションは、あるシーケンスの中の先行するトランザクションを指し示し、シーケンスは、1つまたは複数のブロックにまたがって、1つまたは複数のコインベーストランザクションにまで戻り得る。コインベーストランザクションは、以下でさらに論じられる。ブロックチェーンネットワークに出されたトランザクションは、新しいブロックに含められる。新しいブロックは、「マイニング」と呼ばれることが多いプロセスによって作成され、マイニングは、複数のノードの各々が競って「プルーフオブワーク」を実行すること、すなわち、ブロックチェーンの新しいブロックに含められることを待機している順序付けられた正当性確認済みの未処理のトランザクションの定義されたセットの表現に基づいて暗号パズルを解くことを伴う。ブロックチェーンは一部のノードにおいて剪定されることがあり、ブロックの公開はブロックヘッダのみの公開を通じて達成され得ることに留意されたい。
【0003】
ブロックチェーンにおけるトランザクションは、デジタル資産(すなわち、ある数のデジタルトークン)を動かすこと、仮想化された台帳もしくはレジストリのエントリのセットを順序付けること、タイムスタンプエントリを受信して処理すること、および/またはインデックスポインタを時間的に順序付けることという目的の1つまたは複数のために使用され得る。ブロックチェーンは、ブロックチェーンの上に追加の機能を重ねるためにも活用され得る。たとえば、ブロックチェーンプロトコルは、追加のユーザデータの記憶またはトランザクションの中のデータに対するインデックスを可能にし得る。単一のトランザクションに記憶できる最大のデータ容量には事前に指定された限界がないので、ますますより複雑なデータを組み入れることができる。たとえば、これは、ブロックチェーンに電子文書を、またはオーディオもしくはビデオデータを記憶するために使用され得る。
【0004】
ブロックチェーンネットワークのノード(「マイナー」と呼ばれることが多い)は、分散されたトランザクションの登録と検証のプロセスを実行し、これは後でより詳しく説明される。要約すると、このプロセスの間に、ノードは、トランザクションを正当性確認し、トランザクションが正当なプルーフオブワークの解を特定しようとする対象のブロックテンプレートへとトランザクションを挿入する。正当な解が見つかると、新しいブロックはネットワークの他のノードに広められるので、各ノードがブロックチェーンに新しいブロックを記録することが可能になる。ブロックチェーンにトランザクションが記録されるようにするために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)は、広められるべきネットワークのノードのうちの1つにトランザクションを送信する。トランザクションを受信するノードは、正当性確認されたトランザクションを新しいブロックに組み入れるプルーフオブワークの解を見つけるために争い得る。各ノードは同じノードプロトコルを施行するように構成され、これはトランザクションが正当であるための1つまたは複数の条件を含む。不正なトランザクションは、広められず、ブロックにも組み入れられない。トランザクションが正当性確認され、それによりブロックチェーン上で受け入れられると仮定すると、トランザクション(任意のユーザデータを含む)は、変更不可能な公開記録としてブロックチェーンネットワーク中のノードの各々において登録されインデクシングされたままである。
【0005】
プルーフオブワークパズルを解くことに成功して最新のブロックを作成したノードは、ある量のデジタル資産、すなわちある数のトークンを分配する、通常は「コインベーストランザクション」と呼ばれる新しいトランザクションで報いられる。不正なトランザクションの検出と拒絶は、ネットワークの代理として振る舞い不正行為を報告して阻止するようにインセンティブを与えられた、競合するノードのアクションによって実施される。情報の広範な公開が、ユーザがノードの挙動を継続的に監査することを可能にする。単なるブロックヘッダの公開が、ブロックチェーンの持続的な完全性を参加者が保証することを可能にする。
【0006】
「出力ベース」モデル(UTXOベースモデルと呼ばれることがある)では、所与のトランザクションのデータ構造は1つまたは複数の入力および1つまたは複数の出力を備える。あらゆる消費可能な出力は、トランザクションの先行するシーケンスから導出可能なデジタル資産の量を指定する要素を備える。消費可能な出力は、UTXO(「未消費トランザクション出力」)と呼ばれることがある。出力はさらに、出力の将来の引き換え(redemption)のための条件を指定するロッキングスクリプト(locking script)を備え得る。ロッキングスクリプトは、デジタルトークンまたは資産を正当性確認して伝送するために必要な条件を定義する述部である。トランザクション(コインベーストランザクション以外)の各入力は、先行するトランザクションにおけるそのような出力へのポインタ(すなわち、参照)を備え、指し示された出力のロッキングスクリプトをアンロックするためのアンロッキングスクリプトをさらに備え得る。よって、トランザクションのペアを考え、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の量を指定する少なくとも1つの出力を備え、出力をアンロックする1つまたは複数の条件を定義するロッキングスクリプトを備える。第2のターゲットトランザクションは少なくとも1つの入力を備え、これは、第1のトランザクションの出力へのポインタと、第1のトランザクションの出力をアンロックするためのアンロッキングスクリプトとを備える。
【0007】
そのようなモデルでは、第2のターゲットトランザクションが、ブロックチェーンにおいて広められ記録されるようにブロックチェーンネットワークに送信されるとき、各ノードにおいて適用される正当性の基準の1つは、アンロッキングスクリプトが第1のトランザクションのロッキングスクリプトにおいて定義される1つまたは複数の条件のすべてを満たすことである。別の基準は、第1のトランザクションの出力が別のより早い正当なトランザクションによってまだ引き換えられていないということである。これらの条件のいずれかに従ってターゲットトランザクションが不正であることを見出すいずれのノードも、ターゲットトランザクションを広めず(正当なトランザクションとして広めず、しかし場合によっては不正なトランザクションを登録するために広める)、また、ブロックチェーンに記録されるようにターゲットトランザクションを新しいブロックに含めない。
【0008】
代替のタイプのトランザクションモデルはアカウントベースモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOに戻って参照することによって伝送されるべき量を定義するのではなく、絶対的なアカウントの残高を参照することによってそれを定義する。すべてのアカウントの現在の状態が、複数のノードによって別々にブロックチェーンに記憶され、常に更新される。
【発明の概要】
【発明が解決しようとする課題】
【0009】
ピアツーピア(P2P)ネットワークは、インターネット通信および情報共有の発展の駆動力の1つになっている。特に、2009年以降は、ブロックチェーンネットワークがP2Pネットワークサービスにおける暗号学的なブレイクスルーになっている。BitTorrentネットワーク、KazaaまたはGnutellaなどの主要なファイル共有サービスが、よく知られているP2Pネットワークの他の例である。
【0010】
一部のP2Pネットワークには、ノード間の信用とセキュリティが欠けているという問題があり、これは、ネットワークのノード間のデータの転送に参加することに躊躇する向きがあることを意味する。そして、これはP2Pネットワークの規模拡大が困難になることにつながり得る。
【課題を解決するための手段】
【0011】
本明細書で開示される一態様によれば、ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法が提供され、P2Pネットワークは複数のP2Pノードを備え、各P2Pノードは少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのターゲットノードはターゲットデータアイテムへのアクセス権を有し、方法は、要求P2Pノードによって実行され、第2のハッシュ値を取得するステップであって、第2のハッシュ値が、第1のハッシュ関数を用いて少なくともデータ要求をハッシュして第1のハッシュ値を生成し、次いで第2のハッシュ関数を用いて少なくとも第1のハッシュ値をハッシュして第2のハッシュ値を生成することによって生成され、データ要求がターゲットデータアイテムと関連付けられる、ステップと、第2のハッシュ値および要求P2Pノードの公開鍵を要求P2Pノードに接続された1つまたは複数のP2Pノードに送信するステップとを備え、P2Pノードのチェーンは要求P2PノードとターゲットP2Pノードとの間で形成され、チェーンの中の各P2Pノードは、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続され、チェーンの中の各P2Pノードは、チェーンの中の次のP2Pノードに、第2のハッシュ値と、チェーンの中の各々のそれぞれの先行するP2Pノードに関連するそれぞれの公開鍵とを送信するように構成され、それにより、ターゲットP2Pノードが第2のハッシュ値および1つまたは複数のそれぞれの公開鍵を受信し、ターゲットP2Pノードは、ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割し、要求P2Pノードの公開鍵を使用して1つまたは複数のそれぞれのデータパケットの各々を第1のハッシュ値と共に暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成し、受信された1つまたは複数のそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化することによって1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するように構成され、方法は、要求P2Pノードに接続されたチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得するステップであって、要求P2Pノード以外のチェーンの中の各々のそれぞれのP2Pノードが、1つまたは複数の暗号化されたメッセージをチェーンの中の次のそれぞれのP2Pノードから取得し、それぞれのP2Pノードに関連するそれぞれの公開鍵を使用して1つまたは複数の暗号化されたメッセージを復号し、1つまたは複数の暗号化されたメッセージをチェーンの中の前のそれぞれのP2Pノードに送信し、それにより、1つまたは複数の最後の暗号化されたメッセージが、ターゲットP2Pノードから要求P2Pノードへチェーンに沿って送信されるにつれて復号に成功する、ステップと、
1つまたは複数のそれぞれの最初の暗号化されたメッセージを復号して1つまたは複数のそれぞれのデータパケットを取得し、それに基づいてターゲットデータアイテムを構築するステップと、
要求P2Pノードに接続されたチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンネットワークに提出するステップとを含む。
【0012】
本明細書で開示される別の態様によれば、ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法が提供され、P2Pネットワークは複数のP2Pノードを備え、各P2Pノードは、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのターゲットノードは、要求P2Pノードによって要求されるターゲットデータアイテムへのアクセス権を有し、方法は、ターゲットP2Pノードによって実行され、第2のハッシュ値および1つまたは複数の公開鍵を取得するステップであって、各公開鍵がそれぞれのP2Pノードと関連付けられ、1つまたは複数の公開鍵のうちの1つが要求P2Pノードの公開鍵であり、他の1つまたは複数の公開鍵の各々が、要求P2PノードとターゲットP2Pノードとの間のP2Pノードのチェーンに属するそれぞれのP2Pノードと関連付けられ、チェーンの中の各P2Pノードが、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続される、ステップと、第2のハッシュ値が第1のハッシュ値に基づくと決定するステップであって、第1のハッシュ値がターゲットデータアイテムに関連するデータ要求に基づく、ステップと、ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割するステップと、要求P2Pノードの公開鍵を使用して1つまたは複数のそれぞれのデータパケットの各々を第1のハッシュ値と共に暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成するステップと、チェーンの中のそれぞれのP2Pノードに関連するそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化して1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するステップと、1つまたは複数のそれぞれの最後の暗号化されたメッセージをターゲットP2Pノードに接続されるチェーンの中のP2Pノードに送信するステップとを備え、1つまたは複数のそれぞれの最後の暗号化されたメッセージの送信を証明するために、1つまたは複数のそれぞれの証明トランザクションが、ブロックチェーンネットワークへ提出される。
【0013】
本開示は、特にデータ分配の間に、P2Pネットワークの信用とセキュリティを改善するためにブロックチェーンを利用する。ブロックチェーンは、P2Pノード間の協調を改善してデータ伝送の効率を高めるために使用される。データに対する要求は、1つまたは複数の中間ノードを介して要求ノードからターゲットノードに送信される。要求ノードは、その公開鍵と共にこの要求を第1の中間ノードに送信する。第1の中間ノードは、この要求、要求ノードの公開鍵、および自身の公開鍵を第2の中間ノード(または、第1の中間ノードがターゲットノードに接続される場合、ターゲットノード)に転送する。要求を受信する各中間ノードは、要求、受信された公開鍵、および自身の公開鍵を次のノードに転送する同じプロセスを実行し、要求がターゲットノードによって受信されるまでこれが行われる。このようにして、1つまたは複数の中間ノードを介して要求ノードからターゲットノードへのチェーンが形成され、チェーンの中の各ノードは、チェーンの中の少なくとも1つの他のノードに接続される(要求ノードおよびターゲットノードはチェーンの最後にあるので、1つの他のノードにしか接続されないことがある)。ノードのチェーンは、要求ノードとターゲットノードとの間のあり得る最短の経路を表し得る。
【0014】
ターゲットノードの公開鍵ではなく、チェーンの中の各ノードのそれぞれの公開鍵を使用して、ターゲットデータがターゲットノードによって暗号化される。これは、ターゲットノード以外のチェーンの中のノードの各々が、ターゲットデータの復号に参加することが必要とされることを意味する。より具体的には、暗号化されたターゲットデータは、ノードのチェーンに沿ってターゲットノードから要求ノードに送信される。チェーンの中の各ノードは、自身の公開鍵を用いて暗号化されたターゲットデータを部分的に復号する。暗号化されたデータが要求ノードに到達するときには、そのデータは要求ノードの公開鍵により暗号化されているだけであるので、要求ノードは暗号化されたターゲットデータを復号してターゲットデータを明らかにすることができる。要求ノードは、データの受信を証明するために、証明トランザクションをブロックチェーンに提出する。同様に、各々の他のノードは、チェーンの中の前のノードからの暗号化されたデータの受信を証明するために、証明トランザクションをブロックチェーンに提出し得る。
【0015】
いくつかの実施形態では、ターゲットデータは、暗号化されて要求ノードに伝送される前に、1つまたは複数のチャンクへと分割される。要求ノードへの各データチャンクの送信は、ブロックチェーン上で証明され得る。
【0016】
したがって、(暗号化された)ターゲットデータの送信は(証明トランザクションの形式で)ブロックチェーンに記録され、これは、関与する各ノードの識別情報がブロックチェーンに変更不可能に記録されるので、データ伝送プロセスのセキュリティを改善する。言い換えると、ターゲットデータが何に由来するか、およびそれが要求ノードまでどのように伝わったかの、明確で恒久的な記録がある。要求ノードからターゲットノードへの要求の伝送も、ブロックチェーンに記録され得る(またはブロックチェーン上で少なくとも証明され得る)。
【0017】
本明細書では、「P2Pネットワーク」へのあらゆる言及は、ブロックチェーンネットワーク以外のP2Pネットワーク、たとえば一般的なP2Pコンピュータネットワークを意味するものとして理解されるべきであることに留意されたい。P2Pノードへのあらゆる言及は、P2Pネットワークのノードを意味するものとして理解されるべきである。
【0018】
本開示の実施形態の理解を助け、そのような実施形態がどのように具体化され得るかを示すために、単なる例として、添付の図面が参照される。
【図面の簡単な説明】
【0019】
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
図2】ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す図である。
図3A】クライアントアプリケーションの概略ブロック図である。
図3B図3Aのクライアントアプリケーションによって提示され得る例示的なユーザインターフェースの概略的なモックアップである。
図4】トランザクションを処理するための何らかのノードソフトウェアの概略ブロック図である。
図5】ブロックチェーンネットワークと対話するP2Pネットワークの例を概略的に示す図である。
図6】第1のノードについて利用可能な接続を第2のノードに警告するために使用される例示的なトランザクションを概略的に示す図である。
図7】第1のノードについて利用可能な接続を第2のノードに警告して第1のノードの専門を詳述するために使用される例示的なトランザクションを概略的に示す図である。
図8】第1のノードについて利用可能な接続を第2のノードに警告するために使用される別の例示的なトランザクションを概略的に示す図である。
図9】第1のノードとの接続が利用不可能であることを第2のノードに警告するために使用される例示的なトランザクションを概略的に示す図である。
図10】第1のノードとの接続を終了するために第2のノードによって使用される例示的なトランザクションを概略的に示す図である。
図11】第1のノードの専門を更新するために使用される例示的なトランザクションを概略的に示す図である。
図12】ブロックチェーンネットワークと対話するP2Pネットワークの別の例を概略的に示す図である。
図13】6つのノードをもつ有向非巡回グラフの例を示す図である。
図14】7つのノードをもち、エッジが直接のネットワーク接続を表す、例示的なP2Pネットワークを概略的に示す図である。
図15】Gnutellaプロトコルに従ったプロトコルメッセージおよびデータ伝送の例示的な流れを概略的に示す図である。
図16】3つのノードを伴うオニオンルーティングプロトコルの例を示す流れ図である。
図17】P2Pノードがデータ伝送を受信して証明トランザクションをブロックチェーンネットワークにブロードキャストすることを概略的に示す図である。
図18】要求ノードからデータ要求を転送する要求トランザクションの例示的な流れを概略的に示す図である。
図19】P2Pノードがデータ要求を転送することに対する報酬を受け取り、ターゲットノードがデータを要求ノードに伝送することを概略的に示す図である。
図20】例示的な主要求トランザクションを概略的に示す図である。
図21】例示的な副要求トランザクションを概略的に示す図である。
図22】例示的な応答トランザクションを概略的に示す図である。
図23】要求ノードから開始するデータ要求および公開鍵の例示的な流れを概略的に示す図である。
図24】データを要求ノードに伝送するための例示的なルーティングプロトコルを概略的に示す図である。
【発明を実施するための形態】
【0020】
1. 例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、パケット交換ネットワーク101、通常はインターネットなどのワイドエリアインターネットワークを備え得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように配置され得る複数のブロックチェーンノード104を備える。示されていないが、ブロックチェーンノード104は、準完全グラフ(near-complete graph)として構成され得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
【0021】
各ブロックチェーンノード104はピアのコンピュータ機器を備え、ノード104の異なるノードは異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば、1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)を備える処理装置、ならびに、特定用途向け集積回路(ASIC)などの他の機器を備える。各ノードはまた、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を利用する、1つまたは複数のメモリユニットを備え得る。
【0022】
ブロックチェーン150はデータのブロック151のチェーンを備え、ブロックチェーン150のそれぞれのコピーは、分散型ネットワークまたはブロックチェーンネットワーク106の中の複数のブロックチェーンノード104の各々において維持される。上で言及されたように、ブロックチェーン150のコピーを維持することは、ブロックチェーン150を完全に記憶することを必ずしも意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下で論じられる)を記憶する限り、データについて剪定され得る。チェーンの中の各ブロック151は1つまたは複数のトランザクション152を備え、この文脈におけるトランザクションはある種のデータ構造を指す。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、1つの特定のトランザクションプロトコルを全体で使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を備える。各出力は、デジタル資産の量を表す額をプロパティとして指定し、その例は、出力が暗号的にロックされる対象であるユーザ103である(アンロックされ、それにより引き換えられまたは消費されるために、そのユーザの署名または他の解を必要とする)。各入力は先行するトランザクション152の出力を指し示し、それによりトランザクションをつなぐ。
【0023】
各ブロック151はまた、ブロック151に対する逐次的な順序を定義するために、チェーンの中の以前に作成されたブロック151を指し示すブロックポインタ155を備える。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスに対する順序を定義するために、以前のトランザクションへのポインタを備える(トランザクション152のシーケンスは分岐することが許容されることに注意)。ブロック151のチェーンは、チェーンの中の最初のブロックであったジェネシスブロック(Gb)153まで戻る。チェーン150の中の初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示していた。
【0024】
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それにより、トランザクション152がネットワーク106全体に広められるようにするように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151へと組み入れられることを待機しているトランザクション152の順序付けられたセット(または「プール」)154を維持する。順序付けられたプール154はしばしば、「メムプール」と呼ばれる。本明細書では、この用語は、特定のブロックチェーン、プロトコル、またはモデルに限定するものではない。それは、ノード104が正当であるものとして受け入れた、かつ、同じ出力を消費しようとする他のトランザクションをノード104が受け入れる義務をそれについて負わない、トランザクションの順序付けられたセットを指す。
【0025】
所与の現在のトランザクション152jにおいて、その(または各)入力は、トランザクションのシーケンスの中の先行するトランザクション152iの出力を参照するポインタを備え、これは、この出力が現在のトランザクション152jにおいて引き換えられるまたは「消費される」べきであることを指定する。一般に、先行するトランザクションは、順序付けられたセット154または任意のブロック151の中の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクション152jが作成される時点で、またはネットワーク106に送信される時点ですら、必ずしも存在していなくてもよいが、現在のトランザクションが正当であるためには、先行するトランザクション152iは存在しており正当性確認されている必要がある。したがって、本明細書では「先行する」とは、ポインタによってつながれた論理的なシーケンスにおいて先行するものを指し、時系列における作成または送信の時間を必ずしも指さないので、トランザクション152i、152jが異なる順序で作成または送信されることを必ずしも排除しない(オーファントランザクションについての以下の議論を参照)。先行するトランザクション152iは、祖先トランザクションまたは前任トランザクションとして等価的に呼ばれ得る。
【0026】
現在のトランザクション152jの入力は、入力の認可、たとえば、先行するトランザクション152iの出力がロックされるユーザ103aの署名も備える。そして、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義される額を、現在のトランザクション152jの出力において定義されるような新しいユーザまたはエンティティ103bに移すことができる。いくつかの場合、トランザクション152は、複数のユーザまたはエンティティ(それらの1名は変化を与えるために元のユーザまたはエンティティ103aであり得る)の間で入力された額を分割するための複数の出力を有し得る。いくつかの場合、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額を共に集めるために複数の入力を有し、現在のトランザクションの1つまたは複数の出力に再分配し得る。
【0027】
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個人のユーザまたは組織などの関係者103が新しいトランザクション152jを制定する(手動で、または関係者によって利用される自動プロセスによってのいずれかで)ことを望むとき、制定する関係者は、そのコンピュータ端末102から受信者に新しいトランザクションを送信する。制定する関係者または受信者は最終的に、このトランザクションをネットワーク106のブロックチェーンノード104(これは今日では通常はサーバまたはデータセンターであるが、原則として他のユーザ端末であってもよい)のうちの1つまたは複数に送信する。新しいトランザクション152jを制定する関係者103が、ブロックチェーンノード104のうちの1つまたは複数にトランザクションを直接送信してもよく、いくつかの例では受信者に送信しなくてもよいことも排除されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々において適用されるブロックチェーンノードプロトコルに従って、トランザクションが正当であるかどうかを確認する。ブロックチェーンノードプロトコルは通常、新しいトランザクション152jにおける暗号署名が予想される署名と一致することをブロックチェーンノード104が確認することを必要とし、これは、トランザクション152の順序付けられたシーケンスにおける以前のトランザクション152iに依存する。そのような出力ベースのトランザクションプロトコルでは、これは、新しいトランザクション152jの入力に含まれる関係者103の暗号署名または他の認可が、新しいトランザクションが割り当てる先行するトランザクション152iの出力において定義される条件と一致することを確認することを備えてもよく、この条件は通常、新しいトランザクション152jの入力における暗号署名または他の認可が、新しいトランザクションの入力がリンクされる対象である以前のトランザクション152iの出力をアンロックすることを、少なくとも確認することを備える。この条件は、先行するトランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義され得る。代替として、それは、単にブロックチェーンノードプロトコルだけによって定められてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが正当である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つまたは複数のさらなるノード104に転送するなどする。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に広められる。
【0028】
出力ベースのモデルでは、所与の出力(たとえば、UTXO)が割り当てられる(たとえば、消費される)かどうかの定義は、それがブロックチェーンノードプロトコルに従って別の前方のトランザクション152jの入力によってまだ正当に引き換えられていないかどうかである。トランザクションが正当であるための別の条件は、それが引き換えようとする先行するトランザクション152iの出力が別のトランザクションによってまだ引き換えられていないことである。やはり、正当ではない場合、トランザクション152jは、ブロックチェーン150において広められず(不正であるとフラグを付けられて警告のために広められない限り)、または記録されない。これは、取引者が同じトランザクションの出力を1回より多く割り当てようとするような二重消費から保護する。一方、アカウントベースモデルは、アカウントの残高を維持することによって二重消費から保護する。やはり、トランザクションに定義された順序はないので、アカウントの残高は任意のある時間において単一の定義された状態を有する。
【0029】
トランザクションを正当性確認することに加えて、ブロックチェーンノード104はまた、マイニングと一般に呼ばれるプロセスにおいてトランザクションのブロックを競って最初に作成しようとし、これは「プルーフオブワーク」によって支援される。ブロックチェーンノード104において、ブロックチェーン150に記録されたブロック151にまだ現れていない新しいトランザクションが、正当なトランザクションの順序付けられたプール154に追加される。そして、ブロックチェーンノードは、暗号パズルを解こうとすることによって、トランザクション154の順序付けられたセットからトランザクション152の新しい正当なブロック151を競って組み立てる。通常、これは、「ノンス」が未処理のトランザクション154の順序付けられたプールの表現と連結されハッシュされると、ハッシュの出力が所定の条件を満たすような、ノンス値を探すことを備える。たとえば、所定の条件は、ハッシュの出力がある定義された数の先頭の0を有することであり得る。これは、1つの特定のタイプのプルーフオブワークのパズルにすぎず、他のタイプが排除されないことに留意されたい。ハッシュ関数の性質は、その入力に関して予測不可能な出力を有するというものである。したがって、この探索は、力ずくで実行することしかできないので、パズルを解こうとする各ブロックチェーンノード104において大量の処理リソースを消費する。
【0030】
パズルを解くことになる第1のブロックチェーンノード104は、これをネットワーク106に告知し、解を証明として提供し、証明は次いでネットワークの中の他のブロックチェーンノード104によって容易に確認され得る(ハッシュに対する解が与えられれば、その解によりハッシュの出力が条件を満たすようになることを確認するのは簡単である)。第1のブロックチェーンノード104は、ブロックを受け入れてプロトコルルールを施行する、合意された閾値の数の他のノード(threshold consensus of other nodes)にブロックを広める。そして、トランザクション154の順序付けられたセットは、ブロックチェーンノード104の各々によってブロックチェーン150の中の新しいブロック151として記録されるようになる。ブロックポインタ155は、チェーンの中の以前に作成されたブロック151n-1を指し示す新しいブロック151nにも割り当てられる。プルーフオブワークの解を作り出すために必要とされる、たとえばハッシュの形態の大量の努力は、ブロックチェーンプロトコルのルールに従おうとする第1のノード104の意思を示す。そのようなルールは、以前に正当性確認されたトランザクションと同じ出力を割り当てる場合(これは二重消費としても知られている)、正当であるものとしてトランザクションを受け入れないことを含む。作成されると、ブロック151を改変することはできず、それは、ブロックチェーンネットワーク106の中のブロックチェーンノード104の各々においてブロック151が認識されて維持されるからである。ブロックポインタ155はまた、ブロック151に逐次的な順序を課す。トランザクション152はネットワーク106の中の各ブロックチェーンノード104において順序付けられたブロックに記録されるので、これはトランザクションの変更不可能な公開台帳になる。
【0031】
任意の所与の時間においてパズルを競って解く異なるブロックチェーンノード104は、解の探索をいつ開始したか、またはトランザクションが受信された順序に応じて、任意の所与の時間においてまだ公開されていないトランザクション154のプールの異なるスナップショットに基づいて、それを行い得ることに留意されたい。それぞれのパズルを最初に解いた者が、どのトランザクション152が次の新しいブロック151nに含まれてどの順序で含まれるかを定義し、公開されていないトランザクションの現在のプール154が更新される。次いで、ブロックチェーンノード104は、公開されていないトランザクション154の新しく定義された順序付けられたプールからブロックを競って作成し続けるなどする。生じ得るあらゆる「フォーク」を解くためのプロトコルも存在し、これは、2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解き、ブロックチェーンの矛盾する見方がノード104間で広められるような状況である。つまり、フォークの枝が最も長くなったものが、最終的なブロックチェーン150になる。同じトランザクションが両方のフォークに現れるので、これはネットワークのユーザまたはエージェントに影響しないはずであることに留意されたい。
【0032】
ビットコインブロックチェーン(および大半の他のブロックチェーン)に従うと、新しいブロック104を構築することに成功するノードは、追加の定められた量のデジタル資産を分配する新しい特別な種類のトランザクション(あるエージェントまたはユーザから別の者にある額のデジタル資産を移すエージェント間またはユーザ間トランザクションではなく)において、追加の受け入れられる額のデジタル資産を新しく割り当てるための能力を与えられる。この特別なタイプのトランザクションは通常、「コインベーストランザクション」と呼ばれるが、「初期トランザクション」または「生成トランザクション」とも名付けられ得る。それは、通常は新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、この特別なトランザクションが後で引き換えられることを可能にするプロトコルルールに従おうという、新しいブロックを構築するノードの意思を示す。ブロックチェーンプロトコルルールは、この特別なトランザクションが引き換えられるようになるまでに、成熟期間、たとえば100ブロックを必要とし得る。しばしば、普通の(非生成)トランザクション152は、そのトランザクションがその中で公開されるブロック151nを作成したブロックチェーンノード104にさらに報いるために、その出力の1つにおいて追加のトランザクションフィーも指定する。このフィーは通常、「トランザクションフィー」と呼ばれ、以下で論じられる。
【0033】
トランザクションの正当性確認および公開に関与するリソースにより、通常はブロックチェーンノード104の少なくとも各々が、1つまたは複数の物理的なサーバユニットを備えるサーバ、またはデータセンター全体という形態すらもとる。しかしながら、原則として、任意の所与のブロックチェーンノード104は、ユーザ端末、または共にネットワーク接続されるユーザ端末のグループの形態をとり得る。
【0034】
各ブロックチェーンノード104のメモリは、それぞれの役割を実行してブロックチェーンノードプロトコルに従ってトランザクション152を扱うために、ブロックチェーンノード104の処理装置上で実行するように構成されるソフトウェアを記憶する。本明細書でブロックチェーンノード104に帰されるあらゆるアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行されてもよいことが理解されるだろう。ノードソフトウェアは、アプリケーションレイヤにおける1つまたは複数のアプリケーション、またはオペレーティングシステムレイヤもしくはプロトコルレイヤなどのより下のレイヤ、またはこれらの任意の組合せにおいて実装され得る。
【0035】
消費するユーザの役割を果たす複数の関係者103の各々のコンピュータ機器102も、ネットワーク101に接続される。これらのユーザは、ブロックチェーンネットワーク106と対話し得るが、トランザクションを正当性確認することまたはブロックを構築することに参加しない。これらのユーザまたはエージェント103の一部は、トランザクションにおいて送信者および受信者として振る舞い得る。他のユーザは、送信者または受信者として必ずしも振る舞わずにブロックチェーン150と対話し得る。たとえば、一部の関係者は、ブロックチェーン150のコピーを記憶する(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして振る舞い得る。
【0036】
関係者103の一部またはすべてが、異なるネットワーク、たとえばブロックチェーンネットワーク106に重畳されるネットワークの一部として接続され得る。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれることが多い)は、ブロックチェーンネットワーク106を含むシステムの一部であると言われることがあるが、これらのユーザは、ブロックチェーンノードに必要とされる役割を実行しないので、ブロックチェーンノード104ではない。代わりに、各関係者103は、ブロックチェーンネットワーク106と対話し、それにより、ブロックチェーンノード106に接続する(すなわち、それと通信する)ことによってブロックチェーン150を利用し得る。2名の関係者103およびそれらのそれぞれの機器102、すなわち、第1の関係者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の関係者103bおよびそのそれぞれのコンピュータ機器102bが、例示を目的に示されている。より多くのそのような関係者103およびそのそれぞれのコンピュータ機器102がシステム100に存在して参加していてもよいが、便宜的に示されていないことが理解されるだろう。各参加者103は、個人または組織であり得る。単なる例示として、第1の関係者103aは本明細書ではAliceと呼ばれ、第2の関係者103bはBobと呼ばれるが、これは限定するものではなく、AliceまたはBobへの本明細書でのあらゆる言及は、それぞれ「第1の関係者」および「第2の関係者」で置き換えられ得ることが理解されるだろう。
【0037】
各関係者103のコンピュータ機器102は、1つまたは複数のプロセッサ、たとえば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを備える、それぞれの処理装置を備える。各関係者103のコンピュータ機器102はさらに、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。このメモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を利用する、1つまたは複数のメモリユニットを備え得る。各関係者103のコンピュータ機器102のメモリは、処理装置上で実行されるように配置される少なくとも1つのクライアントアプリケーション105のそれぞれの実体を備えるソフトウェアを記憶する。所与の関係者103に本明細書では帰されるあらゆるアクションが、それぞれのコンピュータ機器102の処理装置で実行されるソフトウェアを使用して実行され得ることが理解されるだろう。各関係者103のコンピュータ機器102は、少なくとも1つのユーザ端末、たとえば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを備える。所与の関係者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの、1つまたは複数の他のネットワーク接続されたリソースを備え得る。
【0038】
クライアントアプリケーション105は最初に、適切なコンピュータ可読記憶媒体上で任意の所与の関係者103のコンピュータ機器102に提供され、たとえば、サーバからダウンロードされ、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどの、リムーバブル記憶デバイスで提供されてもよい。
【0039】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには2つの主要な機能がある。これらの一方は、それぞれの関係者103が、トランザクション152を作成し、認可し(たとえば署名し)、1つまたは複数のビットコインノード104に送信して、トランザクション152がブロックチェーンノード104のネットワーク全体に広められ、それによりブロックチェーン150に含まれるようにすることを可能にすることである。他方は、それぞれの関係者が現在所有するデジタル資産の額をそれぞれの関係者に報告することである。出力ベースのシステムでは、第2の機能は、対象の関係者に属する、ブロックチェーン150全体に散在した様々なトランザクション152の出力において定義される額を照合することを備える。
【0040】
注意:様々なクライアント機能は、所与のクライアントアプリケーション105へと統合されるものとして説明されることがあるが、これは必ずしも限定するものではなく、本明細書で説明されるあらゆるクライアント機能は代わりに、たとえばAPIを介してインターフェースする、または一方が他方へのプラグインである、2つ以上の別個のアプリケーションのスイートで実装されてもよい。より一般的には、クライアント機能は、アプリケーションレイヤ、オペレーティングシステムなどのより下のレイヤ、またはこれらの任意の組合せにおいて実装され得る。以下は、クライアントアプリケーション105に関して説明されるが、これは限定するものではないことが理解されるだろう。
【0041】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105の実体は、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作可能に結合される。これは、クライアント105のウォレット機能がトランザクション152をネットワーク106に送信することを可能にする。クライアント105は、それぞれの関係者103がその受信者であるあらゆるトランザクションについてブロックチェーン150に尋ねるために(または、実施形態において、ブロックチェーン150が、一部には公に見えていることによりトランザクションに信用をもたらす公的な機関であるので、ブロックチェーン150における他の関係者のトランザクションを実際に調査するために)、ブロックチェーンノード104に連絡することも可能である。各コンピュータ機器102のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を編成して送信するように構成される。上で述べられたように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を正当性確認し、ブロックチェーンネットワーク106全体にトランザクション152を広めるためにトランザクション152を転送するように構成される、ソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルに付随し、所与のトランザクションモデルを共に実装する。ブロックチェーン150の中のすべてのトランザクション152に同じトランザクションプロトコルが使用される。同じノードプロトコルは、ネットワーク106の中のすべてのノード104によって使用される。
【0042】
所与の関係者103、たとえばAliceが、ブロックチェーン150に含められるように新しいトランザクション152jを送信することを望むとき、Aliceは関連するトランザクションプロトコルに従って(Aliceのクライアントアプリケーション105のウォレット機能を使用して)新しいトランザクションを編成する。Aliceは次いで、クライアントアプリケーション105から、Aliceが接続されている1つまたは複数のブロックチェーンノード104に、トランザクション152を送信する。たとえば、これは、Aliceのコンピュータ102に最良に接続されるブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信するとき、ブロックチェーンノード104は、ブロックチェーンノードプロトコルおよびそのそれぞれの役割に従ってトランザクション152jを扱う。これは、新しく受信されたトランザクション152jが「正当である」ためのある条件を満たすかどうかをまず確認することを備え、この例がまもなく詳しく論じられる。いくつかのトランザクションプロトコルでは、正当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替として、条件は単に、ノードプロトコルの内蔵機能であってもよく、またはスクリプトとノードプロトコルの組合せによって定義されてもよい。
【0043】
新しく受信されたトランザクション152jが正当であると見なされるための(すなわち、それが「正当性確認される」条件についての)テストに合格することを条件に、トランザクション152jを受信するあらゆるブロックチェーンノード104が、そのブロックチェーンノード104において維持されるトランザクション154の順序付けられたセットに新しく正当性確認されたトランザクション152を追加する。さらに、トランザクション152jを受信するあらゆるブロックチェーンノード104が、正当性確認されたトランザクション152を、ネットワーク106内の1つまたは複数の他のブロックチェーンノード104へ前方に広める。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが正当であると仮定すると、これは、トランザクション152jがネットワーク106全体にまもなく広められることを意味する。
【0044】
所与のブロックチェーンノード104において維持される未処理のトランザクション154の順序付けられたプールに入ることを認められると、そのブロックチェーンノード104は、新しいトランザクション152を含むそれぞれのプール154の最新のバージョンについてプルーフオブワークのパズルを競って解き始める(他のブロックチェーンノード104はトランザクション154の異なるプールに基づいてパズルを解こうとしていることがあるが、最初に解いた者が最新のブロック151に含まれるトランザクションのセットを定義することを思い出されたい。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付けられたプール154の部分に対するパズルを解く)。新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは変更不可能に、ブロックチェーン150の中のブロック151の1つの一部になる。各トランザクション152は、より早いトランザクションへのポインタを備えるので、トランザクションの順序も変更不可能に記録される。
【0045】
異なるブロックチェーンノード104は、所与のトランザクションの異なる実例を最初に受信するので、ある実例が新しいブロック151において公開される前にはどの実例が「正当」であるかについての矛盾する見方を有することがあり、その公開の時点では、すべてのブロックチェーンノード104が、公開された実例が唯一の正当な実例であることに合意する。ブロックチェーンノード104がある実例を正当であるものとして受け入れ、ブロックチェーン150に第2の実例が記録されていることを発見する場合、そのブロックチェーンノード104はこれを受け入れなければならず、それが最初に受け入れた実例(すなわち、ブロック151において公開されていないもの)を廃棄する(すなわち、不正として扱う)。
【0046】
一部のブロックチェーンネットワークによって運用される代替のタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」のプロトコルと呼ばれ得る。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを参照することによってではなく、絶対的なアカウントの残高を参照することによって、移されるべき額を定義する。すべてのアカウントの現在の状態は、そのネットワークのノードによって、ブロックチェーンに別々に記憶され、常に更新される。そのようなシステムでは、トランザクションは、アカウントのトランザクション実行記録(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者の暗号署名の一部として送信者によって署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドは、署名されたトランザクションでもあり得る。このデータフィールドは、たとえば以前のトランザクションIDがこのデータフィールドに含まれる場合、以前のトランザクションを指し示し得る。
【0047】
2. UTXOベースモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と省略される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151が1つまたは複数のトランザクション152を備える)。以下は、出力ベースまたは「UTXO」ベースプロトコルを参照して説明される。しかしながら、これはすべての可能な実施形態に対する制限ではない。例示的なUTXOベースプロトコルはビットコインを参照して説明されるが、それは他の例示的なブロックチェーンネットワーク上で等しく実装され得ることに留意されたい。
【0048】
UTXOベースモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を備えるデータ構造を備える。各出力203は未消費トランザクション出力(UTXO)を備えてもよく、これは、別の新しいトランザクションの入力202のためのソースとして使用され得る(UTXOがまだ引き換えられていない場合)。UTXOはデジタル資産の額を指定する値を含む。これは、分散型台帳上の設定された数のトークンを表す。UTXOはまた、情報の中でもとりわけ、それが由来するトランザクションのトランザクションIDを含み得る。トランザクションデータ構造はヘッダ201も備えてもよく、これは、入力フィールド202および出力フィールド203のサイズを示すものを備えてもよい。ヘッダ201はまた、トランザクションのIDを含んでもよい。実施形態では、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、ノード104に提出される生のトランザクション152のヘッダ201に記憶される。
【0049】
Alice103aが、対象のデジタル資産の額をBob103bに移すトランザクション152jを作成することを望んでいるとする。図2では、Aliceの新しいトランザクション152jは「Tx1」と標識される。それは、シーケンスの中の先行するトランザクション152iの出力203においてAliceにロックされるデジタル資産の額をもち、この少なくとも一部をBobに移す。先行するトランザクション152iは図2では「Tx0」と標識される。Tx0およびTx1は恣意的なラベルにすぎない。それらは、Tx0がブロックチェーン151において最初のトランザクションであることも、Tx1がプール154において直後のトランザクションであることも必ずしも意味しない。Tx1は、Aliceにロックされた未消費の出力203をまだ有する任意の先行する(すなわち、祖先)トランザクションを指し示し得る。
【0050】
Aliceが新しいトランザクションTx1を作成するときには、または少なくとも、Aliceがそれをネットワーク106に送信するまでには、その時点で先行するトランザクションTx0はすでに正当性確認されており、ブロックチェーン150のブロック151に含められていることがある。それは、その時点でブロック151の1つにすでに含められていることがあり、または、順序付けられたセット154においてまだ待機していることがあり、その場合、それは新しいブロック151にまもなく含められる。代替として、Tx0およびTx1は、作成されてネットワーク106に共に送信されてもよく、または、ノードプロトコルが「オーファン」トランザクションのバッファリングを許容する場合、Tx0がTx1の後に送信されることすらあってもよい。トランザクションのシーケンスの文脈において本明細書で使用されるような「先行する」および「後続の」という用語は、トランザクションにおいて指定されるトランザクションポインタによって定義されるようなシーケンスにおけるトランザクションの順序を指す(どのトランザクションがどの他のトランザクションを指し示すかなど)。それらは、「前任者」および「後任者」、または「祖先」および「子孫」、「親」および「子」などで等しく置き換えられ得る。それは、それらが作成される順序、ネットワーク106に送信される順序、または任意の所与のブロックチェーンノード104に到達する順序を必ずしも示唆しない。それでも、先行するトランザクション(祖先トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが正当性確認されるまで、かつそうされない限り、正当性確認されない。その親より前にブロックチェーンノード104に到達する子は、オーファンであると見なされる。それは、ノードプロトコルおよび/またはノード挙動に応じて、廃棄されてもよく、または親を待機するためにある期間バッファリングされてもよい。
【0051】
先行するトランザクションTx0の1つまたは複数の出力203の1つは、UTXO0とここでは標識される特定のUTXOを備える。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、後続のトランザクションが正当性確認されるために、したがってUTXOの引き換えが成功するために、後続のトランザクションの入力202の中のアンロッキングスクリプトによって満たされなければならない条件を定義する、ロッキングスクリプトとを備える。通常、ロッキングスクリプトは、その額を特定の関係者(ロッキングスクリプトが含まれるトランザクションの受取人)にロックする。すなわち、ロッキングスクリプトはアンロッキング条件を定義し、これは通常、後続のトランザクションの入力の中のアンロッキングスクリプトが、先行するトランザクションがロックされる先の関係者の暗号署名を備えるという条件を備える。
【0052】
ロッキングスクリプト(scriptPubKeyとしても知られている)は、ノードプロトコルによって認識される分野固有の言語によって書かれるコードである。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「Script」(大文字のS)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を消費するためにどのような情報が必要とされるか、たとえば、Aliceの署名の要件を指定する。アンロッキングスクリプトは、トランザクションの出力に現れる。アンロッキングスクリプト(scriptSigとしても知られている)は、ロッキングスクリプト基準を満たすために必要とされる情報を提供する分野固有の言語で書かれたコードである。たとえば、それはBobの署名を含み得る。アンロッキングスクリプトは、トランザクションの入力202に現れる。
【0053】
よって、示される例では、Tx0の出力203の中のUTXO0はロッキングスクリプト[Checksig PA]を備え、これは、UTXO0が引き換えられるために(厳密には、UTXO0を引き換えることを試みる後続のトランザクションが正当であるために)、Aliceの署名Sig PAを必要とする。[Checksig PA]は、Aliceの公開鍵-秘密鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、Tx1を指し示す(たとえば、トランザクションID TxID0によって指し示す、ここで、実施形態ではTxID0はトランザクションTx0全体のハッシュである)ポインタを備える。Tx1の入力202は、Tx0のあらゆる他のあり得る出力の中からUTXO0を特定するために、Tx0内のUTXO0を特定するインデックスを備える。Tx1の入力202はさらにアンロッキングスクリプト<Sig PA>を備え、これは、Aliceが鍵のペアからの自分の秘密鍵をデータのあらかじめ定められた部分(暗号学では「メッセージ」と呼ばれることがある)に適用することによって作成される、Aliceの暗号署名を備える。正当な署名を提供するためにAliceによって署名される必要のあるデータ(または「メッセージ」)は、ロッキングスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
【0054】
新しいトランザクションTx1がブロックチェーンノード104に到達すると、そのノードはノードプロトコルを適用する。これは、アンロッキングスクリプトがロッキングスクリプトにおいて定義される条件(ここで、この条件は1つまたは複数の基準を備え得る)を満たすかどうかを確認するために、ロッキングスクリプトとアンロッキングスクリプトを共に実行することを備える。実施形態では、これは2つのスクリプトを連結することを伴う。
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、「<…>」はスタックにデータを置くことを意味し、「[…]」はロッキングスクリプトが含む機能(この例ではスタックベースの言語)である。等価的に、スクリプトは、スクリプトを連結するのではなく、共通のスタックを用いて次々に実行されてもよい。いずれにしても、共に実行されると、これらのスクリプトは、Tx0の出力の中のロッキングスクリプトに含まれるようなAliceの公開鍵PAを使用して、Tx1の入力の中のアンロッキングスクリプトがデータの予想される部分に署名するAliceの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)も、この認証を実行するために含まれる必要がある。実施形態では、署名されたデータはTx1の全体を備える(よって、データの署名された部分を平文で指定する別個の要素は、本質的にすでに存在しているので、含まれる必要はない)。
【0055】
公開-秘密暗号による認証の詳細は、当業者に馴染みがある。基本的に、Aliceが自分の秘密鍵を使用してメッセージを署名している場合、Aliceの公開鍵と平文と平文のメッセージがあれば、ノード104などの別のエンティティが、メッセージがAliceによって署名されたに違いないと認証することが可能である。署名は通常、メッセージをハッシュすること、ハッシュに署名すること、およびこれを署名としてメッセージにタグ付けして、それにより公開鍵のあらゆる保有者が署名を認証することを可能にすることを備える。したがって、特定のデータまたはトランザクションの部分などに署名することへの本明細書におけるあらゆる言及は、実施形態において、そのデータまたはトランザクションの部分のハッシュに署名することを意味し得ることに留意されたい。
【0056】
Tx1におけるアンロッキングスクリプトがTx0のロッキングスクリプトにおいて指定される1つまたは複数の条件を満たす場合(よって示される例では、Aliceの署名がTx1において提供されて認証される)、ブロックチェーンノード104はTx1を正当であると見なす。これは、ブロックチェーンノード104がTx1を未処理のトランザクション154の順序付けられたプールに追加することを意味する。ブロックチェーンノード104はまた、トランザクションTx1をネットワーク106内の1つまたは複数の他のブロックチェーンノード104に転送するので、トランザクションTx1はネットワーク106全体に広められる。Tx1が正当性確認されてブロックチェーン150に含められると、これはTx0からのUTXO0を消費されたものとして定義する。Tx1は、それが未消費トランザクション出力203を消費する場合にのみ、正当であり得ることに留意されたい。Tx1が別のトランザクション152によってすでに消費されている出力を消費しようとする場合、Tx1はすべての他の条件が満たされる場合でも不正である。したがって、ブロックチェーンノード104はまた、先行するトランザクションTx0における参照されるUTXOがすでに消費されているかどうか(すなわち、それが別の正当なトランザクションへの正当な入力をすでに形成したかどうか)を確認する必要もある。これは、トランザクション152に定められた順序を課すことがブロックチェーン150にとって重要である1つの理由である。実際には、所与のブロックチェーンノード104は、トランザクション152がどのUTXO203で消費されたかをマークする別個のデータベースを維持し得るが、UTXOが消費されたかどうかを最終的に定義するものは、それがブロックチェーン150において別の正当なトランザクションへの正当な入力をすでに形成しているかどうかである。
【0057】
所与のトランザクション152のすべての出力203において指定される総額がすべてのその入力202によって指し示される総額より大きい場合、これは、大半のトランザクションモデルにおいて無効性の別の根拠になる。したがって、そのようなトランザクションは、ブロック151において広められることも含められることもない。
【0058】
UTXOベースのトランザクションモデルでは、所与のUTXOは全体として消費される必要があることに留意されたい。UTXOにおいて定義される額の一部が未消費として「置き去りにされる」一方で、別の一部が消費されることはない。しかしながら、UTXOからの額は、次のトランザクションの複数の出力の間で分割され得る。たとえば、Tx0の中のUTXO0において定義される額は、Tx1において複数のUTXOの間で分割され得る。したがって、AliceがUTXO0において定義される額のすべてをBobに与えたくない場合、Aliceは、リマインダーを使用して、Tx1の第2の出力において自分自身に釣銭を与え、または別の関係者に支払うことができる。
【0059】
実際には、Aliceは通常、ブロック151に自分のトランザクション104を含めることに成功するビットコインノード104のためのフィーを含める必要もある。Aliceがそのようなフィーを含めない場合、Tx0はブロックチェーンノード104によって拒否され得るので、技術的に正当であっても、ブロックチェーン150において広められず、含められないことがある(ノードプロトコルは、ブロックチェーンノード104が望まない場合、トランザクション152を受け入れることを強いない)。いくつかのプロトコルでは、トランザクションフィーは、固有の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力202によって指し示される総額と出力203において指定される総額とのあらゆる差が、トランザクションを発行するブロックチェーンノード104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1が1つだけの出力UTXO1を有するとする。UTXO0において指定されるデジタル資産の額がUTXO1において指定される額より大きい場合、UTXO1を含むブロックを作成するためのプルーフオブワークの競争に勝つノード104によって差が割り当てられ得る。しかしながら、代替または追加として、トランザクションフィーがトランザクション152のUTXO203のうちの固有の1つにおいて明確に指定され得ることも必ずしも排除されない。
【0060】
AliceとBobのデジタル資産は、ブロックチェーン150の中の任意の場所の任意のトランザクション152において彼らにロックされたUTXOからなる。したがって、通常は、所与の関係者103の資産は、ブロックチェーン150全体の様々なトランザクション152のUTXO全体に散在する。所与の関係者103の全体の残高を定義する1つの数字が、ブロックチェーン150のどこかに記憶されることはない。それぞれの関係者にロックされ、別の前方のトランザクションにおいてまだ消費されていないすべての様々なUTXOの値を共に照合することが、クライアントアプリケーション105のウォレット機能の役割である。ウォレット機能は、ビットコインノード104のいずれかに記憶されているようなブロックチェーン150のコピーをクエリすることによってこれを行うことができる。
【0061】
スクリプトコードは、しばしば概略的に表される(すなわち、厳密な言語を使用しない)ことに留意されたい。たとえば、特定の機能を表すために、オペレーションコード(オペコード)を使用することがある。「OP_...」はScript言語の特定のオペコードを指す。例として、OP_RETURNは、ロッキングスクリプトの最初においてOP_FALSEが前にあるときに、トランザクション内のデータを記憶できるトランザクションの消費不可能な出力を作成し、それによりブロックチェーン150に変更不可能にデータを記録するような、Script言語のオペコードである。たとえば、データは、ブロックチェーンに記憶することが望まれる文書を備え得る。
【0062】
通常、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は特定のデータに署名する。いくつかの実施形態では、所与のトランザクションに対して、署名は、トランザクション入力の一部、およびトランザクション出力の一部またはすべてに署名する。デジタル署名が署名する出力の具体的な部分は、SIGHASHフラグに依存する。SIGHASHフラグは通常、どの出力が署名されるかを選択するための(したがって署名の時点で固定される)、署名の最後に含まれる4バイトコードである。
【0063】
ロッキングスクリプトは「scriptPubKey」と呼ばれることがあり、これは、それぞれのトランザクションがロックされる先の関係者の公開鍵をロッキングスクリプトが通常は備えるという事実に関連している。アンロッキングスクリプトは「scriptSig」と呼ばれることがあり、これは、アンロッキングスクリプトが対応する署名を通常は供給するという事実に関連している。しかしながら、より一般的には、UTXOが引き換えられるための条件が署名を認証することを含むことは、ブロックチェーン150のすべての適用例において必須ではない。より一般的には、スクリプティング言語は、任意の1つまたは複数の条件を定義するために使用され得る。したがって、より一般的な用語「ロッキングスクリプト」および「アンロッキングスクリプト」が好まれ得る。
【0064】
3. サイドチャネル
図1に示されるように、Aliceのコンピュータ機器102aおよびBobのコンピュータ機器102bの各々のクライアントアプリケーションは、追加の通信機能を備え得る。この追加の機能は、Alice103aが(関係者または第三者のいずれかの教唆により)Bob103bとの別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークとは別個にデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、これは、AliceとBobの一方がAliceとBobとの間のトランザクション152をネットワーク106にブロードキャストすることを選ぶまで、トランザクション152が(まだ)ブロックチェーンネットワーク106に登録されることなく、またはチェーン150に進入することなく、トランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、「トランザクションテンプレート」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いていることがある。代替または追加として、サイドチャネル107は、鍵、交渉される額または条項、データコンテンツなどの、任意の他のトランザクション関連データを交換するために使用され得る。
【0065】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替または追加として、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはさらにはAliceのデバイス102aとBobのデバイス102bの間の直接の有線もしくはワイヤレスリンクなどを介して確立され得る。一般に、本明細書の任意の箇所で言及されるサイドチャネル107は、「オフチェーン」で、すなわちブロックチェーンネットワーク106とは別個にデータを交換するための1つまたは複数のネットワーキング技術または通信媒体を介した、任意の1つまたは複数のリンクを備え得る。1つより多くのリンクが使用される場合、オフチェーンリンクの束または集合体は全体として、サイドチャネル107と呼ばれ得る。したがって、AliceとBobがサイドチャネル107を介してある情報またはデータなどを交換すると言われる場合、これは、すべてのこれらのデータが厳密に同じリンクを介して送信されなければならないこと、または同じタイプネットワークを送信されなければならないことすらも、必ずしも示唆しないことに留意されたい。
【0066】
4. クライアントソフトウェア
図3Aは、ここで開示される方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装形態を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)レイヤ402を備える。トランザクションエンジン401は、上で論じられた方式に従って、かつまもなくさらに詳しく論じられるように、トランザクション152を編成すること、サイドチャネル301を介してトランザクションおよび/もしくは他のデータを受信および/もしくは送信すること、ならびに/またはブロックチェーンネットワーク106を通じて広められるようにトランザクションを1つまたは複数のノード104に送信することなどの、クライアント105の土台のトランザクション関連機能を実装するように構成される。
【0067】
UIレイヤ402は、機器102のユーザ出力手段を介して情報をそれぞれのユーザ103に出力すること、および機器102のユーザ入力手段を介して入力をそれぞれのユーザ103から受け取ることを含む、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成される。たとえば、ユーザ出力手段は、視覚的な出力を提供するための1つまたは複数の表示画面(タッチスクリーンまたは非タッチスクリーン)、オーディオ出力を提供するための1つまたは複数のスピーカー、および/または、触覚出力を提供するための1つまたは複数の触覚出力デバイスなどを備え得る。ユーザ入力手段は、たとえば、1つまたは複数のタッチスクリーンの入力アレイ(出力手段のために使用されるものと同じまたは異なる)、マウス、トラックパッド、もしくはトラックボールなどの1つまたは複数のカーソルベースのデバイス、発話もしくは音声入力を受け取るための1つまたは複数のマイクロフォンおよび発話もしくは音声認識アルゴリズム、手もしくは体のジェスチャの形式の入力を受け取るための1つまたは複数のジェスチャベース入力デバイス、または、1つまたは複数の機械的なボタン、スイッチ、もしくはジョイスティックなどを備え得る。
【0068】
注意:本明細書の様々な機能は同じクライアントアプリケーション105へと統合されるものとして説明され得るが、これは必ずしも限定するものではなく、代わりに、それらは2つ以上の別個のアプリケーションのスイートとして実装されてもよく、たとえば一方が他方へのプラグインであり、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースする。たとえば、トランザクションエンジン401の機能は、UIレイヤ402とは別のアプリケーションにおいて実装されてもよく、または、トランザクションエンジン401などの所与のモジュールの機能は、1つより多くのアプリケーション間で分割されてもよい。説明される機能の一部またはすべてが、たとえばオペレーティングシステムレイヤにおいて実装され得ることも排除されない。本明細書の任意の箇所で単一または所与のアプリケーション105などへの言及が行われる場合、これは例にすぎず、より一般的には、説明される機能は任意の形態のソフトウェアで実装され得ることが理解されるだろう。
【0069】
図3Bは、Aliceの機器102aのクライアントアプリケーション105aのユーザインターフェース(UI)レイヤ402によってレンダリングされ得るUI500の例のモックアップを与える。同様のUIは、Bobの機器102b上または任意の他の関係者の機器のクライアント105bによってレンダリングされ得ることが、理解されるだろう。
【0070】
例示として、図3Bは、Aliceの観点からのUI500を示す。UI500は、ユーザ出力手段を介して別個のUI要素としてレンダリングされる1つまたは複数のUI要素501、502、503を備え得る。
【0071】
たとえば、UI要素は、異なる画面上のボタン、またはメニューの中の異なるオプションなどであり得る、1つまたは複数のユーザ選択可能要素501を備え得る。ユーザ入力手段は、UI要素を画面上でクリックもしくはタッチすること、または所望のオプションの名前を話すことなどによって、ユーザ103(この場合はAlice103a)がオプションの1つを選択すること、または別様に動作させることを可能にするように配置される(本明細書で使用される「手動」という用語は、自動と対比することのみが意図され、手の使用に必ずしも限定されないことに注意)。
【0072】
代替または追加として、UI要素は1つまたは複数のデータエントリフィールド502を備え得る。これらのデータエントリフィールドは、ユーザ出力手段を介して、たとえば画面上でレンダリングされ、データは、ユーザ入力手段、たとえばキーボードまたはタッチスクリーンを通じてフィールドに入力され得る。代替として、データは、たとえば発話認識に基づいて口頭で受け取られ得る。
【0073】
代替または追加として、UI要素は、情報をユーザに出力するために、1つまたは複数の情報要素503の出力を備え得る。たとえば、これ/これらは画面上でまたは音声でレンダリングされ得る。
【0074】
様々なUI要素をレンダリングし、オプションを選択し、データを入力する具体的な手段は、不可欠ではないことが理解されるだろう。これらのUI要素の機能はまもなくより詳しく論じられる。図3に示されるUI500は、概略的なモックアップにすぎず、実際には、簡潔にするために示されていない1つまたは複数のさらなるUI要素を備えてもよいことも、理解されるだろう。
【0075】
5. ノードソフトウェア
図4は、UTXOベースモデルまたは出力ベースモデルの例における、ネットワーク106の各ブロックチェーンノード104上で実行されるノードソフトウェア450の例を示す。別のエンティティは、ネットワーク106上でノード104として分類されることなく、すなわち、ノード104について必要とされるアクションを実行することなく、ノードソフトウェア450を実行し得ることに留意されたい。ノードソフトウェア450は、限定はされないが、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベル決定エンジン454、および1つまたは複数のブロックチェーン関連機能モジュール455のセットを含み得る。各ノード104は、限定はされないが、合意モジュール455C(たとえば、プルーフオブワーク)、伝播モジュール455P、および記憶モジュール455S(たとえば、データベース)の3つすべてを含む、ノードソフトウェアを実行し得る。プロトコルエンジン401は通常、トランザクション152の異なるフィールドを認識し、ノードプロトコルに従ってそれらを処理するように構成される。別の先行するトランザクション152i(Txm-1)の出力(たとえば、UTXO)を指し示す入力を有するトランザクション152j(Txj)が受信されると、プロトコルエンジン451は、Txjにおけるアンロッキングスクリプトを特定し、それをスクリプトエンジン452に渡す。プロトコルエンジン451はまた、Txjの入力におけるポインタに基づいてTxiを特定して取り出す。Txiはブロックチェーン150上で公開されてもよく、この場合、プロトコルエンジンは、ノード104に記憶されているブロックチェーン150のブロック151のコピーからTxiを取り出し得る。代替として、Txiはまだブロックチェーン150上で公開されていないことがある。その場合、プロトコルエンジン451は、ノード104によって維持されている未公開のトランザクションの順序付けられたセット154からTxiを取り出し得る。いずれにしても、スクリプトエンジン451は、Txiの参照された出力におけるロッキングスクリプトを特定し、これをスクリプトエンジン452に渡す。
【0076】
したがって、スクリプトエンジン452は、TxiのロッキングスクリプトおよびTxjの対応する入力からのアンロッキングスクリプトを有する。たとえば、Tx0およびTx1と標識されるトランザクションが図2に示されているが、同じことが任意のトランザクションの任意のペアに適用され得る。スクリプトエンジン452は、前に論じられたように2つのスクリプトを共に実行し、これは、使用されているスタックベースのスクリプティング言語(たとえば、Script)に従ってスタック453にデータを置き、それからデータを取り出すことを含む。
【0077】
スクリプトを共に実行することによって、スクリプトエンジン452は、アンロッキングスクリプトがロッキングスクリプトにおいて定義される1つまたは複数の基準を満たすかどうか、すなわち、ロッキングスクリプトが含まれる出力を「アンロックする」かどうかを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。アンロッキングスクリプトが対応するロッキングスクリプトにおいて指定される1つまたは複数の基準を満たすと、スクリプトエンジン452が決定する場合、スクリプトエンジン452は結果「真」を返す。それ以外の場合、それは結果「偽」を返す。
【0078】
出力ベースモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの正当性の条件の1つである。通常、同様に満たされなければならないプロトコルエンジン451により評価される1つまたは複数のさらなるプロトコルレベル条件もあり、それはたとえば、Txjの出力において指定されるデジタル資産の総額がその入力により指し示される総額を超えないこと、およびTxjの指し示される出力が別の正当なトランザクションによりまだ消費されていないことである。プロトコルエンジン451は、1つまたは複数のプロトコルレベル条件と共にスクリプトエンジン452からの結果を評価し、それらがすべて真である場合にのみ、トランザクションTxjを正当性確認する。プロトコルエンジン451は、トランザクションが正当であるかどうかの標示をアプリケーションレベル決定エンジン454に出力する。Txjが実際に正当性確認されるという条件のもとでのみ、決定エンジン454は、Txjに関してそれぞれのブロックチェーン関連機能を実行するように合意モジュール455Cと伝播モジュール455Pの両方を制御することを選択し得る。これは、ブロック151に組み入れるためのトランザクション154のノードのそれぞれの順序付けられたセットにTxjを追加する合意モジュール455Cと、ネットワーク106の中の別のブロックチェーンノード104にTxjを転送する伝播モジュール455Pとを備える。任意選択で、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のいずれかまたは両方をトリガする前に、1つまたは複数の追加の条件を適用し得る。たとえば、決定エンジンは、トランザクションが正当であり、かつ十分なトランザクションフィーを残すという条件のもとでのみ、トランザクションを公開することを選択し得る。
【0079】
本明細書での「真」および「偽」という用語は、単一の二進の桁(ビット)の形態でのみ表される結果を返すことに必ずしも限定しないが、それは当然1つの可能な実装形態であることにも留意されたい。より一般的には、「真」は成功したまたは肯定的な結果を示すあらゆる状態を指すことができ、「偽」は失敗したまたは否定的な結果を示すあらゆる状態を指すことができる。たとえば、アカウントベースモデルでは、「真」の結果は、署名の暗黙的なプロトコルレベルの正当性確認と、スマートコントラクトの追加の肯定的な出力との組合せによって示され得る(両方の個々の結果が真である場合、全体の結果は真を示すと見なされる)。
【0080】
6. P2Pネットワーク接続
図5は、P2Pノード間の接続を形成するために使用され得る例示的なシステムを示す。システムは、ピアツーピア(P2P)ネットワーク500およびブロックチェーンネットワーク106を備える。P2Pネットワーク500は複数のノードを備え、これらは本明細書ではP2Pノードと呼ばれる。たとえば、P2Pネットワークは、第1のP2Pノード501a、第2のP2Pノード501bなどを備える。5つのP2Pノード501だけが図5に示されているが、一般に、P2Pネットワーク500は任意の数のP2Pノード501を有し得ることが理解されるだろう。本明細書では、「第1の」、「第2の」などは、文脈が別段必要としない限り、恣意的な標識として使用されるだけであり、順序を必ずしも示唆しないことに留意されたい。当業者は、P2Pネットワークの概念、すなわち、ピアが等しく優先され、ネットワークにおいて参加者が等しい力をもつような分散型ネットワークについて馴染みがあるので、P2Pネットワークがネットワークアドレスを有するということを以外に、P2Pネットワーク500自体は詳しく説明されない。ネットワークアドレスは任意の適切な形態をとり得る。たとえば、ネットワークアドレスはIPアドレスまたはドメイン名であり得る。ネットワークアドレスは、全体としてP2Pネットワークのアドレス(または識別子)であってもよく、または各P2Pノードがネットワーク上のアドレスを有してもよい。P2Pネットワーク500は、1つまたは複数の目的または用途を有し得る。たとえば、P2Pネットワークは、コンテンツもしくはファイル共有ネットワーク、または通信(たとえば、ビデオ通話)ネットワーク、クラウドコンピューティングネットワーク、リモートデスクトップネットワークなどであり得る。
【0081】
各P2Pノード501は、P2Pノード501によって実行されるものとして以下で説明されるアクションを実行するように構成されるそれぞれのコンピュータ機器で実行されるソフトウェアを含み(またはそれにより含まれ)、またはそれにおいて実装される。いくつかの実施形態では、各P2Pノード501は、図1から図3Bに関してAlice103aおよび/またはBob103bによって実行されるものとして説明されるアクションの一部またはすべてを実行するように構成され得る。各P2Pノード501は、それぞれの公開鍵を有し、すなわち対応する秘密鍵へのアクセス権を有する。
【0082】
図5に示されるように、P2Pノード501のいくつかは既存の接続を有し、これはP2Pノード501を接続する実線により示されている。たとえば、第4のP2Pノード501dおよび第5のP2Pノード501eに接続される第3のP2Pノード501cが示されている。第2のP2Pノード501bは第4のP2Pノード501dに接続される。さらなる接続が示される。第1のP2Pノードが形成することを望む接続も図に示されており、これらは第1のP2Pノード501aを他のP2Pノードに接続する破線によって示されている。たとえば、第1のP2Pノード501aは、第2のP2Pノード501bおよび第3のP2Pノード501cに接続することを望み、たとえば、これらのノードが第1のP2Pノード501aに最も近いからである。ここで、「最も近い」とは地理的な用語または他の用語であり得る。
【0083】
第2のP2Pノード501bと接続するために、第1のP2Pノード501aは第2のP2Pノード501bに関連する公開鍵を取得する。第1のP2Pノード501aは、メモリから、公にアクセス可能なリソース、たとえばウェブページもしくはブロックチェーンから、信用される機関から、またはP2Pノード501の別のノードから公開鍵を取得し得る。別の例として、第1のP2Pノード501aは、たとえばP2Pネットワークアドレスを使用して、ドメイン名システム(DNS)サービスにクエリすることによって、第2のP2Pノードの公開鍵を取得し得る。
【0084】
第1のP2Pノード501aは、ブロックチェーントランザクション(第1のトランザクションと呼ばれる)を生成するように構成される。第1のトランザクションは、第2のノードの公開鍵にロックされる第1の出力を備える。たとえば、出力はP2PKH出力であり得る。第1の出力は、P2Pが接続を形成しようとしているという事実を第2のP2Pノード501bに警告するために使用される。たとえば、第2のP2Pノード501bは、第2のP2Pノードの公開鍵にロックされる出力についてブロックチェーンを監視するウォレットアプリケーションを動作させ得る。当業者は、公開鍵に送信される「支払」を特定する他の方法について馴染みがある。第1のトランザクションはP2Pネットワークアドレスも備え、これは、第1のP2Pノード501aが第2のP2Pノード501bに接続する際に用いることを望むP2Pネットワークを特定するために使用される。ネットワークアドレスは、第1のトランザクションの第1の出力、または第2の出力の一部として含まれ得る。第2の出力は、消費不可能な出力および/またはOP_RETURN出力であり得る。第1のトランザクションは、第1のP2Pノードの公開鍵を使用して検証され得る署名で署名される。これは、どのP2Pノード501が接続を形成しようとしているかを第2のP2Pノード501bが決定することを可能にする。
【0085】
第1のP2Pノード501aは、第1のトランザクションをブロックチェーンネットワーク106に提出し、または代替として、第1のトランザクションを中間者に提出して、中間者が次いで第1のトランザクションをブロックチェーンネットワーク106に提出する。
【0086】
第2のP2Pノード501bは、第1のブロックチェーントランザクションがブロックチェーン150に出された(またはそれに記録された)と決定するように構成される。上で言及されたように、これは、第2のP2Pノード501bによって動作させられるウォレットアプリケーションによって実行され得る。または、第2のP2Pノード501は、第2のP2Pノードの公開鍵にロックされる出力を有するトランザクションについてブロックチェーン150を手動でスキャンし得る。別の例として、サービス提供者は、第2のP2Pノード501bの代わりにブロックチェーン150を監視し、第1のトランザクションが特定されるときに第2のP2Pノード501bに知らせ得る。第1のトランザクションの存在を検出したこと、または別様に特定したことに応答して、第2のP2Pノード501bは、第1のP2Pノード501aと接続するように構成される。第1のP2Pノード501aと接続することは、第2のP2Pノード501bがP2Pネットワーク500上で通信するノードのリストに、第2のP2Pノード501bが第1のP2Pノード501aを追加することを伴い得る。ここで、第1のP2Pノード501aと通信することは、第1のP2Pノード501aから入ってくるデータを受け入れ、出ていくデータを第1のP2Pノード501aに送信することを意味するものと解釈される。追加または代替として、第1のP2Pノード501と接続することは、第1のP2Pノード501aと能動的に通信すること、すなわちデータを第1のP2Pノード501aに送信することを伴い得る。
【0087】
第1のトランザクションは、第1のP2Pノード501aおよび第2のP2Pノード501bにとって有益であるだけではなく、全体としてP2Pネットワーク500にも有益である。第1のトランザクションは、他のノード501が、第1のP2Pノード501aおよび第2のP2Pノード501bが接続されていると決定することを可能にする。言い換えると、ブロックチェーン150に記録されている第1のトランザクションを見ると、P2Pネットワーク500の他のノードは、それらがそれぞれ第2のP2Pノードまたは第1のP2Pノードを介して第1のP2Pノードまたは第2のP2Pノードと通信できることを知る。これは、ノード501が他のノード501へのさらなる接続およびさらなる経路を認識するようになるので、P2Pネットワーク500の接続を改善する。
【0088】
図6は、第1のP2Pノード501aと第2のP2Pノード501bとの間の接続を示すために使用される第1のトランザクションの例を示す。第1のP2Pノード501aの署名および公開鍵は、トランザクションのアンロッキングスクリプトにおいて示される。この例では、第1の出力は第2のP2Pノード501bの公開鍵にロックされ、第2の異なる出力はP2Pネットワーク500のネットワークアドレスを備える。この例において示されるように、第1のトランザクションは、第1のP2Pノード501aの識別子を備え得る。識別子は、P2Pネットワーク上の第1のP2Pノード501aを一意に識別し、認証機関(またはP2Pネットワーク500によって信用される別の形態の機関)によって証明され得る。識別子は、第1のP2Pノードの公開鍵と対応付けられてもよく、これにより、第2のP2Pノード501bは、それが実際に第1のトランザクションを生成した第1のP2Pノード501aであることについて確信できる。この対応付けは、事前に知られていてもよく、または公にアクセス可能なリソース、たとえばウェブページもしくはブロックチェーンに記憶されていてもよい。識別子は、第1のP2Pノードの身元について信用を確立するために使用される。それは、第1のP2Pノードの公開鍵(および場合によってはその所有者についての情報)を含む証明であり得る。好ましくは、証明は第1のP2PノードのIPアドレスを含まず、それは、IPアドレスがブロックチェーン上で公開されることになり、第1のP2Pノードのコンピュータを攻撃にさらす可能性があるからである。
【0089】
上で言及されたように、第2のP2Pノードの公開鍵は、DNSサービスから取得され得る。DNSサービスにクエリしたことに応答して、第1のP2Pノード501aは、第2のP2Pノード501bの公開鍵およびインターネットプロトコル(IP)アドレスを受信し得る。第1のP2Pノード501aは、IPアドレスに基づいて第2のP2Pノード501bに接続することを選び得る。第2のP2PノードのIPアドレスは代替の方法で取得されてもよく、たとえば、それは、第1のP2Pノード501aおよび第2のP2Pノード501bとの接続をすでに確立した異なるノード501によって提供されてもよいことに留意されたい。
【0090】
第1のトランザクションを生成する前に、第1のP2Pノード501aは、第2のP2Pノード501bのIPアドレスを使用して、第2のP2Pノード501bとのインターネットハンドシェイク(たとえば、TCP3ウェイハンドシェイク)を実行し得る。これは、第1のP2Pノード501aが第2のP2Pノードの身元について信用を確立することを可能にする。第2のP2Pノード501bは、第2のP2Pノードの公開鍵に対応する署名で署名された自身のIPアドレスを第1のP2Pノード501aに送信し得る。第1のP2Pノード501aは次いで、第2のP2Pノードの公開鍵を使用して署名を検証し得る。これらの例では、署名が検証される場合にのみ、第1のP2Pノード501aは第1のトランザクションをブロックチェーンネットワーク106に提出する。
【0091】
第1のP2Pノード501aは、その専門性、たとえば能力、機能、特性などを第2のP2Pノード501bに示すために、第1のトランザクションを使用し得る。すなわち、第1のP2Pノード501aは、すべてのノードが実行できるとは言えない何らかのアクションをP2Pネットワーク500上で実行することが可能であることがあり、または、第1のP2Pノード501aは、他よりも良い何らかの動作を実行すること、または他のノードよりも良好に何らかのアクションを実行することが可能であり得る。専門性の例は、グリッドコンピューティング、マイニング、DNSノードであること、信用される機関のノードであること、ファイル共有などの能力を含む。いくつかの例では、専門性は、良い帯域幅、接続性、インターネット接続、記憶などの特性であり得る。ここで、「良い」とは、P2Pネットワークノード501の平均よりも良いことを意味するものと解釈され得る。P2Pノード501の1つまたは複数のサブセットがあってもよく、各サブセットは少なくとも1つの専門性を共通に有する。第1のトランザクションは、その各々がそれぞれの専門性を示す、1つまたは複数のフラグを含み得る。これはP2Pネットワーク500の効率を改善し、それは、第2のP2Pノード501bが、第1のP2Pノードの専門性に基づいて、何らかのタイプのデータまたは要求を第1のP2Pノード501aに送信するかどうかを知っているからである。
【0092】
図7は、専門性フラグを含む第1のトランザクションの例を示す。専門性フラグは、第1の出力または第2の出力に含まれ得る。
【0093】
任意選択で、第1のトランザクションは、第2のP2Pノードの公開鍵にロックされる第1の出力に加えて、少なくとも2つの代替のロッキング条件を含む別の消費可能な出力を含み得る。この出力は第3の出力と呼ばれるが、それは出力のリストにおいて3番目に現れる必要はない。第1のロッキング条件として、第3の出力は第1のP2Pノード501aの公開鍵にロックされ得る。第2のロッキング条件として、第3の出力は第2のP2Pノード501bの公開鍵にロックされ得る。公開鍵は、上で論じられた公開鍵と同じであっても、または異なっていてもよい。言い換えると、第1のP2Pノード501aおよび/または第2のP2Pノード501bは、1つより多くの公開鍵を有し得る。これらの例では、第3の出力が未消費であることは、第1のP2Pノード501aと第2のP2Pノード501bとの間の接続が利用可能である(すなわち、終了されない)ものとして第2のP2Pノード501bによって解釈される。第3の出力が消費されると、この接続は、たとえば第1のノード501aがオフラインになったので、この接続が終了されることとして解釈される。第3の出力が消費されたことを確認すると、第2のP2Pノード501bは第1のP2Pノード501aから切断し得る。
【0094】
第1のP2Pノード501aは、たとえば、第1のP2Pノード501aが第2のP2Pノード501bとの接続をもはや維持できない場合、第3の出力を消費する第2のトランザクションを生成し得る。第2のトランザクションは、第1のトランザクションの第3の出力を参照する入力を含み、第3の出力がロックされる先の第1のP2Pノードの公開鍵に対応する署名を含む。図9は、第2のトランザクションの例を示す。
【0095】
代替として、第2のP2Pノード501bは、たとえば、第2のP2Pノード501bが第1のP2Pノード501aとの接続をもはや維持できない場合、または、第1のP2Pノード501aが悪意をもってアクションした、もしくはP2Pネットワークのポリシーに反してアクションした場合、またはハッキングされた場合などにおいて、第3の出力を消費する第2のトランザクションを生成し得る。第1のP2Pノード501aは、少なくとも第2のP2Pノード501bの観点からはオフラインであり、いくつかの例では、他のノード、たとえば第3のP2Pノード501cとのアクティブな接続を維持し得る。第2のトランザクション信号の第3の出力の消費は、第1のP2Pノード501aがネットワークプロトコルに正しく従っていないので第2のP2Pノード501bを介して第1のP2Pノード501aと通信することが推奨されないこと、または、第1のP2Pノード501aと通信することがまったく推奨されないことを、ネットワークの他のノードに示す。第2のトランザクションは、第1のトランザクションの第3の出力を参照する入力を含み、第3の出力がロックされる先の第1のP2Pノードの公開鍵に対応する署名を含む。
【0096】
いくつかの例では、図8に示されるように、第3の出力(図8では出力のリストにおいて2番目に現れる)の第2のロッキング条件はハッシュ値を含んでもよく、第3の出力がアンロックされるには、第3の出力を消費する入力はハッシュ値の原像を含まなければならない。原像は、第3の出力をアンロックするために第2のP2Pノード501bが取得しなければならないチャレンジであり得る。たとえば、チャレンジは信用される機関から取得され得る。チャレンジデータを含む第2のP2Pノード501bによって生成される第2のトランザクションの例は、図10に示される。
【0097】
図11は、更新された専門性について第2のP2Pノードに知らせるのではなく、第1のP2Pノードの専門性を更新するために使用され得るトランザクションの例を示す。
【0098】
上記の説明は、第1のP2Pノード501aと第2のP2Pノード501bとの間の対話に注目したが、第1のP2Pノード501aは1つまたは複数の追加のP2Pノード501のために等価なアクションを実行してもよい。たとえば、図5において、第1のP2Pノード501aは、第3のP2Pノードの公開鍵を取得し、その公開鍵にロックされる出力を備えるトランザクションを生成することによって、第3のP2Pノード501cと接続する。トランザクションはP2Pネットワークアドレスも含む。
【0099】
第1のP2Pノード501aはまた、他のP2Pノード間の接続、たとえば、ブロックチェーン150に記録されているトランザクション、たとえば、第4のP2Pノード501dによって署名される入力および第5のP2Pノード501eの公開鍵にロックされる出力を有するトランザクションに基づいて、第4のP2Pノード501dと第5のP2Pノード501eとの間の接続を決定する(すなわち、特定する)ように構成される。第1のP2Pノード501aは、データなどを特定のP2Pノード501にルーティングするために、特定された接続を使用し得る。たとえば、図5の例を用いると、第2のP2Pノード501bに接続されると、データは第2のP2Pノード501bと第4のP2Pノード501dを介して第5のP2Pノード501eにルーティングされ得る。
【0100】
いくつかの例では、P2Pノードは、P2Pネットワーク500上でメッセージを署名するために、ブロックチェーンネットワーク106上でトランザクションを署名するために使用できない第1のタイプの秘密鍵(たとえば、RSA)を使用することがあり、ブロックチェーンネットワーク106上でのトランザクションの署名には第2のタイプの秘密鍵(たとえば、ECDSA)を必要とする。P2Pノード501は、第1のタイプのそれぞれの秘密鍵を(同じであってもなくてもよい1つまたは複数のハッシュ関数、たとえばdouble SHA256を用いて)第1のタイプのそれぞれの秘密鍵をハッシュすることによって、第1のタイプのそれぞれの秘密鍵から第2のタイプのそれぞれの秘密鍵に変換し得る。
【0101】
7. P2Pオーバーレイモデル
説明される実施形態の具体的な例がここで与えられる。このセクションは、P2Pネットワークトポロジー証明のためのインセンティブ機構を開示する。P2Pネットワークにインセンティブを追加するために、ノードは、ブロックチェーンネットワーク上の関連するトランザクション支払を通じて、ブロックチェーン上でデータを証明し得る。これらの支払は、通信プロセスに関与するノードによって受け取られる。このセクション全体で、どのようにノードが参加を証明し、P2Pネットワーク上でそれらの仕様を更新し、ブロックチェーン上にそれらの隣接するノードの証拠を保持できるかを詳しく説明する。
【0102】
この方策は、ノード間のすべてのタイプのデータ伝送に対する経済的なインセンティブを追加する。さらに、報酬を伝送する別の通信レイヤをP2Pネットワークノードが追加する対象である元のP2Pプロトコル通信を、P2Pネットワークノードが保持できるという意味で、この方策は柔軟である。P2PネットワークのノードをNiにより標識し、iは文脈に応じて正の整数またはインデックスセットである。
【0103】
7.1 ネットワークセットアップ
このセクションでは、どのようにノードN1がP2Pネットワークに安全に参加でき、受け入れられるのに十分なインセンティブを提供するかを示す。その上、ノードN1がP2Pネットワークからの任意の他のノードに接続することを望むたびに、ノードN1は以下で説明する同じ手順に従うべきである。これは、ブロックチェーンがP2Pネットワークのフルネットワークトポロジーを記憶することを確実にする。
【0104】
参加プロセスは次の通りである。新しいノードN1がアドレスNETADDRをもつネットワークに参加することを望むと仮定する。利用可能なピアを見つけるために、N1はネットワークに接続することができ、それは、以下の形態のリンクにGET様の要求を送信することによってDNSサービスにクエリすることができる。
protocol://mesh.network/chosen_network
【0105】
取り出されるデータはJSONフォーマットであり、ノードのインターネットアドレスのリストと楕円曲線公開鍵(たとえば、ビットコインフォーマットで符号化される)を含む。エントリの例は次の通りである。
{
Address:"192.168.0.1"
pkey:
"0x02f54ba86dc1ccb5bed0224d23f01ed87e4a443c47fc690d7797a13d41d2340e1a"
}
【0106】
利用可能なピアの受信されたリストに基づいて、N1は、上のエントリの例において見られるようなインターネットアドレスを使用して、接続すべきピアN2を選ぶ。この瞬間において、2つのノードN1およびN2は以下で説明されるプロトコルに従う。
1. N1がJSONエントリからN2のインターネットアドレスを取得する。
2. N1がN2とのインターネットハンドシェイクを開始する。そのようなハンドシェイクはネットワーク依存である。たとえば、2つのノードはRFC793において記述されるようなTCP3ウェイハンドシェイクを選ぶことができる。
3. N2がJSONエントリ公開鍵で署名された自身のインターネットアドレスを送信する。
4. N1がJSONエントリからの公開鍵を使用して、N2のインターネットアドレスに対して署名を確認することによって、N2の身元を正当性確認する。
5. N1がブロックチェーン上でトランザクションを作成し、このトランザクションには図6に見られるように2つの出力がある。第1の出力、P2PKHロッキングスクリプトはN2によって引き換え可能である。第2の出力、ロッキングスクリプトは、参加しようとしているネットワークアドレスNETADDRと共に、固有の識別子
【0107】
【数1】
【0108】
を含む。
【0109】
【数2】
【0110】
識別子は認証機関によって発行され、その目的はネットワークノードN1の身元を信用される方式で特定することである。
6. N2が、トランザクションTxIDnet-addがブロックチェーン上で確認されたことを見ると、N2はN1を隣接するピアの自身のリストに追加する。
【0111】
ステップ3および4は、他のノードがなりすまし攻撃を実行してN2のインターネットアドレスを使用することにより騙すことを防ぐ。N1は、ステップ2によって、N2のインターネットアドレスを使用するノードと通信している。N1はノードがN2であることについて確信でき、それは、N2が、JSONエントリにおいて利用可能な公開鍵でそのインターネットアドレスを署名できる唯一のノードであるからである。したがって、ステップ3および4は、公開鍵インフラストラクチャを可能にする。
【0112】
対処すべき1つの問題は、N2が不正なノードであるかどうか、およびN1を隣接ノードの自身のリストに追加しないかどうかである。どのようにN1がネットワークに安全に参加でき、N2により騙されていないことについて確信できるかを示す。各ノードは、信用される機関により発行される自身の識別情報を反映する、割り当てられた身元証明CAを有する。ノードN1は、証明を発行した機関に連絡して、騙されたことを証明することができる。この瞬間において、信用される機関はフラグを発行することができ、これは、ノードN2と協調する他のP2Pノードに、N2が信用されるノードではないことを認識させる。
【0113】
7.2 ネットワーク公平性アーキテクチャ
信用される機関との相互確認を行い、騙されている場合にはノードN2を報告する可能性をノードN1に提供することに加えて、悪意のある者からP2Pネットワークをさらに保護することができる合意を実施することができる。この合意は、大半のノードが正当にアクションしており常にインセンティブを与えられていることに依拠する。
【0114】
ノードN2がノードN2,1、…N2,nに接続されると仮定しよう。N2を正当なままに保つことが、N2の隣接ノードの各々の関心対象である。N2を正当なままに保つことがノードN2,1、…N2,nの関心対象であるような、2つのシナリオについて詳述する。
・N2が不正であり、新しいノードN1を自身の接続に追加していない場合、要求をN2に広めるノードは、要求を不正ノードに送信することにより報酬を失っている可能性がある。
・N1がオフラインになるときにN2がネットワークを正しく更新していない場合、ノードN2,1、…N2,nは、N2が要求をノードN1に広めていることをブロックチェーン上で見ることができる。これは、隣接ノードが追加のノードのためにN2に支払を行っていることを意味する。
【0115】
上記の2つのシナリオの各々において、隣接ノードは、次の要求の伝播においてより低い報酬を提供することによってN2を罰することができ、または、N2を完全にネットワークからオフラインにすることができる。
【0116】
この合意は、N2が正当であるかどうかを確認するN1のプロセスをオフロードしており、その上、ネットワークの中の既存のノードに、それらの隣接ノードが正当に振る舞っていることを確実にするためのインセンティブを与える。N2に接続されたノードについてのさらなる確認を行うことがノードN1の責任である場合、ノードN2は偽の識別情報を作成し、したがってノードN1を騙すことができ、Sybil攻撃を可能にするであろうことも強調しておく。
【0117】
7.3 識別情報の結びつき
RSA鍵を使用するP2Pネットワークの場合、識別情報を確立するための1つの方法は、RSA秘密鍵kRSAを、トランザクションに署名するためにビットコインネットワーク上で使用されるECDSA秘密鍵kECDSAと結びつけることである。これは、以下の式を通じて行うことができ、
kECDSA=H1(H0(kRSA))
H1およびH0は2つのハッシュ関数であるが、必ずしも異ならない。そうすると、ECDSA公開鍵は次のように定義される。
PECDSA=kECDSA・G
【0118】
ノードN1が、ネットワーク内で使用されるいくつかのRSA秘密鍵を保持する場合、鍵のインデックスはそのままECDSA秘密鍵の生成に含められ得る。
kECDSA=H1(H0(kRSA||index))
RSA鍵とECDSA鍵とのつながりを証明するために、P2Pノードは、RSAデジタル署名暗号システムを使用して、自身のRSA秘密鍵を用いて自身のECDSA公開鍵に署名することができる。
【0119】
7.4 ノードの専門性
ネットワークの最適化の一領域は、ノードの専門性を追加することであり、このとき、各ノードは特定の機能を実行することに特化し得る。グリッドコンピューティング、マイニング、DNSノードであること、信用される機関のノードであること、ファイル共有などの、想起できるいくつかのそのような専門性がある。当然、ノードは、P2Pネットワークに参加し、あらゆる種類の要求を受け入れることができ、これは汎用ノードとして分類される。専門性が存在する場合、それは、以下でさらに示されるようにP2Pネットワークをモジュール化するネットワーク構造につながり得る。
【0120】
図7は、そのような専門化が、ネットワークセットアップのステップ5におけるトランザクションTxIDnet-addの簡単な改変により、ネットワークセットアップ段階においてどのように行われ得るかを示す。
【0121】
専門性フラグは、たとえば次のような標準的なフォーマットで表現され得る。
SPEC:={
"role":["data",
"dns"]
}
【0122】
上記のSPECエントリを使用するノードは、そのノードの専門性が、データ共有ノードの専門性であり、DNSサービス提供ノードの一部であり得ることを、ネットワークに伝える。そのような標準化は、たとえば、所望のネットワークをノードN1が最初に見つけることを助けた既存のDNSサービスによって発行され得る。
【0123】
7.5 ネットワーク更新
前のセクションでは、それを通じてノードN1がネットワークに参加してインセンティブを提供でき、ある程度の公平性が確保されるような手順を説明した。ここで、ネットワーク完全性をどのように保つかを示し、このとき、ブロックチェーントランザクションは、ノードがオフラインになり専門性を変更することなどのネットワーク構造の変化を反映しながら、経済的なインセンティブを保証しなければならない。
【0124】
このセクションは、それを通じてノードが完全性を保つためにネットワーク構造を更新することができる、更新手順を構築する。このプロセスを達成するための1つの方法は、TxIDnet-addの第2のトランザクション出力が消費可能となるように前のセクションにおいて説明されたネットワークセットアッププロトコルを改変することである。出力が消費されている場合、これを、ノードがP2Pネットワークから切断したものとして解釈する。簡潔にするために、この場合、ノードがオフラインになると言う。
【0125】
したがって、注目点は、TxIDnet-addの第2の出力がどのように消費され得るかを理解することにある。これは、ネットワークに誤ったインセンティブを与えてその完全性を危うくしたくないので、重要である。
【0126】
そうするためには、証明
【0127】
【数3】
【0128】
を生み出したデータが必要である。このデータをチャレンジC(たとえば、ランダムな整数)と呼ぶ。Cは、ノードN1および発行側の信用される機関だけに知られている。以下の図では、オペコードOP_SHA256によって計算される関数に対応するように、ハッシュ関数Hを固定する。
【0129】
図6において与えられ、上で詳述されたネットワークステップ手順のステップ5において使用されるTxIDnet-addを改変する。ノードは、このセクションにおいて提示される機能を有効にするために、セットアッププロトコルにおいて、図8に示されるトランザクションフォーマットを採用し得る。
【0130】
第2の出力において与えられるロッキングスクリプトは、N1がオフラインになることをN1がP2Pネットワークに示すことを可能にする。そうするために、N1は以下のステップを実行する。
1. N1図9で与えられるようにトランザクションを作成し、その署名を提供し、図8で与えられるTxID'net-addの第2の出力を消費する。
2. N1がP2Pネットワークから安全に切断することができる。
【0131】
N1が不正であり、オフラインになるために上記のプロトコルを実行しない場合、N2は以下のプロトコルに従う。
1. N2が信用される機関からチャレンジCを獲得する。
2. N2図10のトランザクションをブロードキャストし、その署名を提供し、図8で与えられるTxID'net-addの第2の出力を消費する。
【0132】
ネットワークを更新するときに起こり得るシナリオは次の通りであり、この方式のインセンティブおよびセキュリティを強調する。
・N1が正当なノードであり、オフラインになるときにその署名を通じてトランザクションの第2の出力を消費し、金銭を取り戻す。これは主要なシナリオであり、それは、N1には金銭を取り戻すための経済的なインセンティブもあるからである。
・N1が不正なノードであり、オフラインになることをネットワークに示すためにTxID'net-addの第2の出力を消費しない。この場合、ノードN2は、N1が更新合意に従わなかったことを証明する信用される関係者に連絡することができる。
【0133】
【数4】
【0134】
を発行した認証機関がオンラインになると、N2は、TxID'net-addの第2の出力をアンロックする際に用いるチャレンジCを取得し、その結果、N1がオフラインになったことをネットワークに示すことができる。
【0135】
N1がオフラインになるときにネットワークを更新しないという挙動を繰り返す場合、N2は信用できないものとしてN1にフラグを付けて、ノードかN1からのさらなる参加要求を拒否することができる。その上、認証機関に、信用できないものとしてノードN1へフラグを付けさせて、発行された識別情報を無効にすることもできる。たとえば、フラグを付けることはトランザクションを通じて行われ得る。最後に、N1がどのようにその専門性SPECを変えることができるかを示す。そうするには、N1図11で与えられるように新しいトランザクションを作成し、TxID'net-addの第2の出力を消費するだけでよい。
【0136】
結論として、提案した更新手順は、ネットワークの構造を最新に保ち、必要とされる経済的なインセンティブを提供することによって、ネットワークの完全性を確保する。
【0137】
説明される実施形態による例示的なP2Pオーバーレイモデルが、図12に示される。上で説明されたように、P2Pネットワークはノードの専門化を通じていくつかのサービスを実施することができる。これはネットワークのモジュール化につながり、それにより、P2Pネットワーク通信をより効率的にするために、ノードは何らかの役割を引き受ける。
【0138】
以下のサービスを実施するために、P2Pネットワークに参加する各ノードN1は、自身のSPECフラグを定義する必要がある。図12は、P2Pのモジュール化の視覚的な表現を提供し、ノードは以下のサービスを提供する。
・DNSサービス:SPEC:={"role":"dns"}
・認証機関サービス:SPEC:={"role":"CA"}
・マルチパーティ計算(MPC)サービス:SPEC:={"role":"MPC"}
【0139】
P2Pネットワークはその構造の証明をブロックチェーン上に保持するので、DNSサービスは、ネットワークを検索可能にできるサービス(クローラーサービスとも呼ばれる)を提供することができる。ネットワーク構造を監視することによって、クローラーは、検索アプリケーションを支援できる現在のネットワークのグラフを保持することができる。
【0140】
8. データ伝送の協調
8.1 グラフ理論
任意のP2Pネットワーク上の各ノード間の接続はグラフを形成するので、グラフ理論におけるいくつかの基本的な考え方を思い起こす。グラフは、オブジェクトのいくつかのペアが関連付けられる(エッジとして表現される)ような、オブジェクト(ノード)の集合体である。例示的なグラフが図13に示されており、グラフのノードはNiにより標識され、iは文脈に応じて正の整数またはインデックスセットである。有向グラフは、ノード間のエッジが方向を有する(これは有向エッジとも呼ばれる)ような特別な種類のグラフである。
【0141】
以下では全体で、ノードN1からNkまでのグラフ情報の流れを管理する。N1が情報要求ノードである場合、N1をソースノードまたは要求ノードと呼ぶ。その上、Nkをシンクノードまたはターゲットノードと呼び、Nkは情報の流れの最後のノードである。
【0142】
現実世界の実装形態では、P2Pネットワークは固定されず、ノードは恣意的にピアと接続して切断できることに留意されたい。
【0143】
8.2 Gnutella
例示的な適用の文脈として、Gnutellaは分散型P2Pネットワークファイル共有サービスの一例である。プロトコルがどのように機能するかを示すために、ネットワーク構造を図14におけるようなものとして仮定する。ノードN1はネットワークを通じてデータDを要求し、Gnutellaプロトコルは、データを保持するノードN1,1,2をN1が発見することを可能にする。要求がN1,1,2に到達すると、それは、P2Pネットワーク構造の外側のN1にデータを直接伝送し、これはオフネットワーク伝送とも呼ばれる。図15はこのプロトコルの視覚化を示す。
【0144】
データ伝送プロトコルのステップは次の通りである。
1. ノードN1が、その隣接ピアN1,1およびN1,2にデータDに対するクエリメッセージQueryを送信することによって、ファイルを要求する。
2. 各ノードN1,iが、メッセージQueryをその隣接ピアN1,i,jに転送する。
3. N1,1,2が、メッセージQueryを受信し、その識別情報を含む返答メッセージQueryHitをN1,1に送信する。
4. N1,1がメッセージQueryHitをN1に転送する。
5. N1がN1,1,2に連絡してN1,1,2からデータDを受信する。
【0145】
8.3 オニオンルーティング
例示的な実装形態として、オニオンルーティングプロトコルは、ネットワーク上のノード間の通信プライバシーを確保する例示的なルーティングプロトコルであり、それはたとえばTorネットワークの一部として使用される。ルーティングプロトコルを例示するために、ノードN1はN2に接続され、N2はノードN3に接続されると仮定する。このプロトコルは、図16のようにノードN1がデータDをN3に送信することを可能にし、ここで、ノードNiの公開鍵を
【0146】
【数5】
【0147】
と表記する。
【0148】
プロトコルのステップは次の通りである。
1. N1が自身の公開鍵
【0149】
【数6】
【0150】
をN2に送信し、Diffie-Hellman鍵交換を通じた共有鍵S2の作成に対する要求を送信する。
2. N2がその公開鍵
【0151】
【数7】
【0152】
で返答し、N2が共有鍵S2を作成したことをN1に伝える。N1は自身で鍵S2を計算する。
3. N1がN2に対してN3の公開鍵を要求する。N1は自身の公開鍵を要求に添付する。N1はN3のIPアドレスを知らない。
4. N2がN3に要求を転送し、共有鍵S3の作成を要求する。
5. N3が自身の公開鍵をN2に送信し、鍵S3の作成を確認する。S3はN1とN3との間で共有される。
6. N2がさらに公開鍵を鍵S3の作成の確認と共にN1へ中継する。N1は自身で鍵S3を計算する。
7. N1が最初に鍵S3を用いて、次いでS2:
【0153】
【数8】
【0154】
を用いてデータDを暗号化する。N1はN2に暗号化されたデータを送信する。
8. N2が、S2を使用して暗号化されたデータを復号し、
【0155】
【数9】
【0156】
を取得する。N2は暗号化されたデータ
【0157】
【数10】
【0158】
をN3に送信する。
9. N3
【0159】
【数11】
【0160】
を復号してデータDを受信する。
【0161】
8.4 データ伝送
本発明の実施形態は、ブロックチェーンネットワークがP2PネットワークのP2Pノード間でのデータの伝送の調停者として振る舞うことを可能にする。説明される実施形態を実装するための例示的なシステムが図17に示されている。システムは、複数のP2Pノードおよびブロックチェーンネットワーク106を備えるP2Pネットワークを備える。システムは、図5に示されるP2PネットワークのP2Pノード501を備える。いくつかの実施形態では、P2Pノードは、図5から図12に関して説明されるような接続を形成するプロセスを経ることがある。
【0162】
P2Pネットワークは、ターゲットデータへのアクセス権をもつターゲットノードと、ターゲットデータを要求する要求ノードとを備える。ターゲットデータは、たとえば、1つまたは複数の画像、1つまたは複数のビデオ、1つまたは複数のオーディオファイルなどのメディアデータを備え得る。ターゲットデータは1つまたは複数の文書を備え得る。一般に、ターゲットデータはあらゆる形態をとり得る。P2Pネットワークは、複数の中間ノードも備える。要求ノードおよびターゲットノードは、中間ノードを介して接続される。すなわち、要求ノードは1つまたは複数の中間ノードに接続され、それらの中間ノードの1つまたは複数は1つまたは複数のさらなる中間ノードに接続され、中間ノードがターゲットノードに接続されるまでこれが続く。たとえば、図17に示されるように、要求ノードN1はノードN1,1およびN1,2に接続され、ノードN1,1はターゲットノードNkに接続される。図17は単なる例であり、実際には、要求ノードをターゲットノードに接続するより多くの中間ノードがあり得ることが理解されるだろう。P2Pネットワークの各ノードは、それぞれの公開鍵と関連付けられる。
【0163】
要求ノードは、ターゲットデータに対する要求に基づくハッシュ値を取得する。より具体的には、ターゲットデータに対する要求(「ターゲット要求」)は、第1のハッシュ値を取得するために第1のハッシュ関数を用いてハッシュされ、その結果は第2のハッシュ値を取得するために第2のハッシュ関数を用いてハッシュされる。第1のハッシュ関数および第2のハッシュ関数は同じであってもよく、またはそれらは異なっていてもよい。第1および/または第2のハッシュ関数は、暗号学的関数(たとえば、SHA256などの、ハッシュ関数のSHAファミリーからの)であり得る。代替として、非暗号学的ハッシュ関数が使用されてもよい。いくつかの例では、要求ノードは第1のハッシュ値および第2のハッシュ値を生成する。他の例では、要求ノードは、異なるノードから、または、要求をデータと対応付ける集中型のサービスなどの信用される第三者から、第1および/または第2のハッシュ値を受信し得る。
【0164】
ターゲット要求は、ターゲットデータまたはその識別子に基づいてもよく、たとえば、ターゲット要求はターゲットデータのハッシュであってもよい。ターゲット要求はターゲットデータと(たとえば、任意選択の集中型のサービスによって)対応付けられ得るので、ターゲットノードはどのデータが要求されているかを決定し得る。たとえば、ターゲットノードは、ターゲットデータに対応付けられるデータ要求のデータベースを記憶し得る。ターゲットノードは、対応付けを集中型のサービスに知らせ得る。たとえば、ターゲットノードは、要求番号123と対応付けられるメディアファイルAを有することを集中型のサービスに知らせ得る。いくつかの例では、そのような集中型のサービスは、ネットワークノードの集合体によって提供され得る。要求ノードは、集中型サービスに連絡して、メディアファイルAの取得を望んでいることをサービスに知らせ得る。それに応答して、集中型のサービスは、要求番号123を要求ノードに提供し得る。要求ノードがターゲット要求を取得する方式は、説明される実施形態を実装するのに必須ではない。
【0165】
いくつかの例では、第1のハッシュ値は、タイムスタンプ、または要求ノードおよびターゲットノードに知られている秘密の値などの、ターゲット要求および追加のデータをハッシュすることによって取得され得る。たとえば、ある選択肢として、集中型のサービスは、秘密の値を要求ノードおよび/またはターゲットノードに送信し得る。
【0166】
集中型のサービスへのあらゆる言及は任意選択であり、少なくともいくつかの実施形態では、そのような集中型のサービスは存在しないことが想像されることに留意されたい。
【0167】
8.4.1 フラッディング要求
本明細書で説明されるいくつかの実施形態は、ターゲットデータに対する要求を用いたP2Pネットワークのフラッディングを伴う。
【0168】
要求ノードは主要求トランザクションを生成し、これはブロックチェーントランザクションである。主要求トランザクションは、第2のハッシュ値および1つまたは複数の出力を含む。各出力は、P2Pネットワーク上で要求ノードが接続される中間ノードのそれぞれのノードのそれぞれ1つの公開鍵にロックされる。たとえば、(図17に示されるように)要求ノードが2つのノードに接続される場合、主要求トランザクションは、2つのノードのうちの第1のノードにロックされる出力と、2つのノードのうちの第2のノードにロックされる別個の出力とを含む。第2のハッシュ値は、それぞれのノードのそれぞれの公開鍵にロックされる出力に含まれ得る。たとえば、各出力はハッシュパズルを実装するように構成されるロッキングスクリプトを含んでもよく、ハッシュパズルは第2のハッシュ値を備える。ハッシュパズルは、消費トランザクション(すなわち、ハッシュパズルを含むロッキングスクリプトをアンロックしようとするトランザクション)のアンロッキングスクリプトに、第1のハッシュ値またはターゲット要求を含むことを要求し得る。追加または代替として、いくつかの例では、第2のハッシュ値はOP_RETURN出力に含まれ得る。主要求トランザクションはまた、要求ノードのネットワーク識別子(たとえば、要求ノードのIPアドレス)および/または要求ノードの証明された識別子(たとえば、要求ノードの身元を証明する認証機関によって証明される識別子)を備え得る。要求ノードは、主要求トランザクションをブロックチェーンネットワーク106に提出する。要求ノードはまた、関連する中間ノード、すなわち、その公開鍵にトランザクションの出力がロックされるノードに、主要求トランザクションを直接送信し得る。これは、新しい要求トランザクションを見つけるためにブロックチェーンを聴取するのはノードにとって高価であるので、中間ノードにとって有益である。図20は、要求ノードに接続される中間ノードのそれぞれの公開鍵に2つの出力がロックされる、主要求トランザクションの例を示す。この例では、トランザクションはまた、要求ノードのネットワークアドレスおよび識別子を含む。
【0169】
図20に示されるように、主要求トランザクションはロックタイムを含み得る。ロックタイムは、その時点から主要求トランザクションがブロックに含まれ得る、すなわちブロックチェーンに記録され得る、最も早い時間を指定する。ロックタイムは、UNIX(登録商標、以下同じ)時間またはブロック高さを使用して指定され得る。ロックタイムは、指定された時間内に要求に応答するためのインセンティブを中間ノードに与える。
【0170】
主要求を受信する中間ノードの各々は次いで、それぞれの副要求トランザクションを生成する。ここで、トランザクションを「受信する」とは、トランザクションがそれぞれのノードのそれぞれの公開鍵にロックされる出力を備えると決定することを意味する。それぞれの中間ノードによって生成される各副要求トランザクションは、第2のハッシュ値および1つまたは複数の出力を含むという点で主要求トランザクションと似ており、各出力は、それぞれの中間ノードが接続されるそれぞれのノードのそれぞれの公開鍵にロックされる。たとえば、中間ノードの第1のノードは3つの他の中間ノードに接続されてもよく、したがって、そのノードによって生成される副要求トランザクションは、3つの他の中間ノードのそれぞれの公開鍵にロックされる3つの出力(出力ごとに1つの鍵)を含む。主要求トランザクションのように、第2のハッシュ値はハッシュパズルに含まれ得る。副要求トランザクションは、ブロックチェーンネットワーク106に提出される。図21は、副要求トランザクションの例を示す。
【0171】
主要求トランザクションのように、各副要求トランザクションは、その時点からそれぞれの副要求トランザクションがブロックに含まれ得る、すなわちブロックチェーンに記録され得る、最も早い時間を指定するロックタイムも含み得る。
【0172】
いくつかの例では、中間ノードの第1のセット(すなわち、要求ノードに直接接続されるノード)によって提出される副要求トランザクションの1つは、ターゲットノードの公開鍵にロックされる。他の例では、中間ノードの第1のセットは、中間ノードの第2のセットのそれぞれの公開鍵にロックされた1つまたは複数の出力を備えるそれぞれの要求トランザクションを各々生成する。ターゲットノードが副要求トランザクションを受信するまで、このプロセスは続く。このようにして、1つまたは複数の中間ノードを介して、要求ノードからターゲットノードへのノードの経路が形成される。ターゲットノードを例外として、経路の中の各ノードは、次のノードの公開鍵への要求トランザクション(要求ノードの場合は主要求トランザクション、中間ノードの場合は副要求トランザクション)の送信を介して次のノードに接続される。たとえば、図17では、1つの中間ノードN1,1を介して、要求ノードN1からターゲットノードNkへの経路が形成される。図18は、それぞれ要求ノードおよび中間ノードからの、主トランザクションおよび副トランザクションの送信を示す。
【0173】
したがって、ターゲットノードはターゲットデータに対する要求について警告され、ターゲットデータは要求ノードに伝送される。ターゲットデータを要求ノードに伝送するためのいくつかの選択肢があり、これは以下で論じられる。副トランザクションを受信したことに応答して、ターゲットノードは、ターゲットノードが要求されたデータを有すること、および要求が受信されたことを示すために、ターゲットノードの公開鍵にロックされる副トランザクションの出力を消費する応答(または回答)トランザクションをブロックチェーンに提出し得る。副トランザクションが第2のハッシュ値に基づくハッシュパズルを含む例では、応答トランザクションの入力は第1のハッシュ値を含む。これは次いで、中間ノードが、それらのそれぞれの公開鍵にロックされるそれぞれの要求トランザクションのそれぞれの出力を消費するそれぞれの応答トランザクションを提出することを可能にする。「出力を消費する」とは、「出力によってロックされるデジタル通貨をその出力をアンロックするトランザクションの出力に割り当てる」を意味するものとして解釈されることに留意されたい。図19は、応答(または回答)トランザクションを使用した要求トランザクションの消費を示し、図22は、ターゲットノードによって出された応答トランザクションの例を示す。
【0174】
いくつかの例では、ターゲットノードは、要求トランザクションに含まれる第2のハッシュ値を特定することによって、それがターゲットデータを有すると決定し得る。すなわち、ターゲットノードは、第2のハッシュ値がターゲットデータアイテム(またはターゲット要求)と関連付けられると認識してもよく、たとえば、第2のハッシュ値は、要求に対応付けられるデータベースに含まれてもよい。他の例では、ターゲットノードは、第1のハッシュ値(たとえば、ターゲット要求に対応付けられるデータベースに記憶されている)へのアクセス権を有し、要求トランザクションから第2のハッシュ値を特定し、第1のハッシュ値が第2のハッシュ値へとハッシュすることを検証し得る。そうである場合、ターゲットノードは対応するターゲット要求を有する。いくつかの例では、第2のハッシュ値は、タイムスタンプで第1のハッシュ値をハッシュすることによって取得され得る。これらの例では、ターゲットノードは、第2のハッシュが既知の第1のハッシュ値に基づくことを検証するために、ある範囲の異なるタイムスタンプを用いて第1の値をハッシュすることを試み得る。
【0175】
ターゲットデータを伝送するための選択肢として、図19に示されるように、ターゲットノードはデータを直接要求ノードに伝送してもよい。ターゲットデータは、オフチェーンで、たとえば、ターゲットノードと要求ノードとの間の(セキュアな)通信チャネルを介して送信されてもよい。これらの例では、ターゲットデータの伝送は、ブロックチェーン上で証明され得る。たとえば、ターゲットデータのハッシュは、証明トランザクションの一部としてブロックチェーンに記録され得る。証明トランザクションは、要求ノードおよび/またはターゲットノードによって生成され得る。代替として、ターゲットデータはオンチェーンで送信されてもよく、すなわち、ターゲットノードによってブロックチェーンネットワーク106に提出されるブロックチェーントランザクションに含まれてもよい。いくつかの例では、ターゲットデータの伝送は、要求ノードが、たとえば証明トランザクションを介して、土台となるデジタル資産の額をターゲットノードに支払うことでのみ(または少なくともそれを条件として)可能である。
【0176】
ターゲットノードは、データをオンチェーンで送信するための要求ノードの公開鍵、および/またはデータをオフチェーンで送信するための要求ノードのネットワークアドレス(たとえば、IPアドレス)へのアクセス権をすでに有し得る。いくつかの例では、要求ノードは、公開鍵および/またはネットワークアドレスをターゲットノードに送信し得る。たとえば、副要求トランザクションを受信したことに応答して、ターゲットノードは、ターゲットノードのネットワーク識別子(たとえば、IPアドレス)および第1のハッシュ値を含むメッセージを公開し得る。メッセージの公開は、メッセージをP2Pネットワークにブロードキャストすることを備え得る。第1のハッシュ値を含めることによって、要求ノードは、ターゲットノードが要求を受信したと決定し得る。要求ノードは次いで、ターゲットノードと接続するためにターゲットノードのネットワーク識別子を使用してもよく、ターゲットノードはターゲットデータを要求ノードに送信してもよい。いくつかの例では、ターゲットノードへの接続の前に、要求ノードは、メッセージに含まれる第1のハッシュ値が正しいことを検証し得る。
【0177】
ターゲットデータを要求ノードに送信するための代替の選択肢として、ターゲットノードは、要求ノードをターゲットノードに接続する経路を形成する中間ノードを介して、ターゲットデータを要求ノードに伝送し得る。ターゲットノードは、経路の中の他のノード、すなわち要求ノードおよび1つまたは複数の中間ノードのそれぞれの公開鍵を取得し得る。ターゲットノードは、たとえばメモリに記憶されている公開鍵へのアクセス権をすでに有していることがあり、または、公開鍵は、ブロックチェーンから、たとえば要求トランザクションから、または集中型のサービスから取得されてもよい。ターゲットノードは、取得された公開鍵を使用してターゲットデータを暗号化する。すなわち、ターゲットデータは、ターゲットデータが各公開鍵を用いて暗号化されるまで、最初に要求ノードの公開鍵を用いて、次いで経路の中の第1の中間ノードの公開鍵を用いて、次いで経路の中の第2の中間ノードの公開鍵を用いてなど、公開鍵の各々を用いて暗号化される。いくつかの例では、ターゲットデータはまず1つまたは複数のデータパケットへと分割されてもよく、各データパケットは公開鍵のセットを用いて暗号化されてもよい。
【0178】
公開鍵のセットを用いて暗号化されるデータパケットは、「最後の暗号化されたメッセージ」と呼ばれる。要求ノードの公開鍵だけを用いて暗号化されるデータパケットは、「最初の暗号化されたメッセージ」と呼ばれる。すなわち、データパケットは、最初の暗号化されたメッセージを取得するために要求ノードの公開鍵を用いて各々暗号化され、最初の暗号化されたメッセージは、最後の暗号化されたメッセージを取得するために残りの公開鍵を用いて各々暗号化される。
【0179】
ターゲットノードは、最後の暗号化されたメッセージを、経路の中の最後の中間ノード、すなわちターゲットノードの公開鍵にロックされる出力を有する副要求トランザクションを提出した中間ノードに送信する。最後の中間ノードは、暗号化されたメッセージのセットを取得するために、そのノードの公開鍵に対応する秘密鍵を使用して、最後の暗号化されたメッセージを復号する。暗号化されたメッセージのそのセットは、他の中間ノードおよび要求ノードの公開鍵を用いて暗号化される。最後の中間ノードは、暗号化されたメッセージのセットを(要求ノードの方向において)経路の中の次の中間ノードに送信し、または、経路の中に1つの中間ノードしかない場合、要求ノードに送信する。暗号化されたメッセージのセットを受信する各中間ノードは、それらのそれぞれの秘密鍵を用いてメッセージを復号し、暗号化されたメッセージの得られたセットを経路の中の次のノードに送信する。最終的に、要求ノードは1つまたは複数の最初の暗号化されたメッセージを受信する。要求ノードは次いで、1つまたは複数のデータパケットを取得するために、その秘密鍵を用いて1つまたは複数の最初の暗号化されたメッセージを復号し得る。ターゲットデータは次いで、データパケットを組み合わせることによって取得される。
【0180】
いくつかの例では、暗号化されたメッセージはノードからノードへ1つのバッチで提出される。他の例では、暗号化されたメッセージはノードからノードへ一度に提出される。
【0181】
暗号化されたメッセージは、オフチェーンチャネルを介してノード間で送信され得る。代替として、暗号化されたメッセージはブロックチェーンを介して送信され得る。たとえば、各ノードは1つまたは複数のデータトランザクションをブロックチェーンに送信してもよく、各データトランザクションは1つまたは複数の暗号化されたメッセージを備える。
【0182】
任意選択で、要求ノードは、データパケットの取得を証明するために、証明トランザクションをブロックチェーンに提出し得る。たとえば、証明トランザクションは、ターゲットデータのハッシュを含み得る。要求ノードは、単一の証明トランザクションをブロックチェーンに提出してもよく、または、それぞれの証明トランザクションは各データパケットに対して出されてもよく、たとえば、各トランザクションはそれぞれのデータパケットのハッシュを含んでもよい。同様に、各中間ノードは、経路の中の前のノードから1つまたは複数の暗号化されたメッセージを受信したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンに提出し得る。いくつかの例では、各々の暗号化されたデータパケットの伝送は、暗号化されたデータパケットを受信するノードが、たとえば証明トランザクションを介して、暗号化されたデータパケットを送信するノードに土台となるデジタル資産の額を支払うことでのみ(または少なくともそれを条件として)可能である。
【0183】
8.4.2 チェーン接続された要求
本明細書で説明されるいくつかの実施形態は、ターゲットノードへの中間ノードのチェーンを介してターゲットデータに対する要求を送信することを伴う。
【0184】
要求ノードは、要求ノードに接続される1つまたは複数の中間ノードに第2のハッシュ値(ターゲットデータに対する要求に基づく)を送信する。要求ノードはその公開鍵も送信する。たとえば、図23に示されるように、要求ノードN1は、第2のハッシュ値H1(H0(R))およびその公開鍵PKN1を、それが接続される各ノード、この例では中間ノードN1,1および中間ノードN1,2に送信する。第2のハッシュ値を受信する各中間ノードは、第2のハッシュ値および要求ノードの公開鍵PKN1を、その中間ノードに接続される1つまたは複数の中間ノードに転送する。中間ノードの公開鍵はまた、第2のハッシュ値および要求ノードの公開鍵PKN1と共に送信される。たとえば、中間ノードN1,2は、第2のハッシュ値、要求ノードの公開鍵PKN1、および自身の公開鍵PKN1,2を、中間ノードN1,2,1および中間ノードN1,2,2に送信する。このプロセスは、第2のハッシュ値がターゲットノードに到達するまで続く。たとえば、図23に示されるように、中間ノードN1,1は、第2のハッシュ値、要求ノードの公開鍵PKN1、および自身の公開鍵PKN1,1を、中間ノードN1,1,1およびターゲットノードNkに転送する。実際には、P2Pネットワークに、より多くのノードがあってもよく、最終的にターゲットノードが第2のハッシュ値を受信するまで、第2のハッシュ値、受信された公開鍵、および自身の公開鍵を中間ノードが他の中間ノードに転送する、より多くのラウンドがあってもよいことが理解されるだろう。
【0185】
要求ノードからターゲットノードへのノードのチェーンが形成される。チェーンは、要求ノードからターゲットノードへの第2のハッシュ値および公開鍵の転送によって形成される。チェーンは、ターゲットノードによって受信される公開鍵によって表され得る。たとえば、図23では、チェーンは、要求ノードN1、中間ノードN1,1、およびターゲットノードNkで形成され、公開鍵PKN1およびPKN1,1によって表される。要求ノードは常にチェーンの一端にあり、ターゲットノードは他端にある。
【0186】
要求ノードは、たとえばP2Pネットワークプロトコルの一部として、オフチェーンチャネルを介して、第2のハッシュ値およびその公開鍵を中間ノードに送信し得る。他の例では、要求ノードは、第2のハッシュ値およびその公開鍵をオンチェーンで中間ノードに送信し得る。すなわち、要求ノードは要求トランザクションをブロックチェーンに提出してもよく、要求トランザクションは第2のハッシュ値および要求ノードの公開鍵を含む。要求ノードはまた、オフチェーンチャネルを介して要求トランザクションを中間ノードに直接送信し得る。これは、ノードがブロックチェーンを監視しなくてもよいので、性能を改善する。要求トランザクションは1つまたは複数の出力を含んでもよく、各出力は、要求ノードが接続されるそれぞれの中間ノードのそれぞれの公開鍵にロックされる。たとえば、要求ノードが3つの中間ノードに接続される場合、要求トランザクションは、各々がそれぞれの中間ノードの公開鍵にロックされる、3つの出力を含み得る。
【0187】
同様に、中間ノードは、要求トランザクションをブロックチェーンに提出することによって、オフチェーンチャネルを介して第2のハッシュ値および公開鍵を転送し得る。第2のハッシュ値および公開鍵が中間ノードによってどのように送信されるかに応じて、ターゲットノードは、第2のハッシュ値および公開鍵を、中間ノード(オフチェーンチャネルを介して)またはブロックチェーンのいずれかから直接取得する。
【0188】
いくつかの例では、ターゲットノードは、第2のハッシュ値がターゲットデータアイテム(またはターゲット要求)と関連付けられること、たとえば、第2のハッシュ値が要求に対応付けられるデータベースに含まれ得ることを認識し得る。他の例では、ターゲットノードは、第1のハッシュ値(たとえば、ターゲット要求に対応付けられるデータベースに記憶されている)へのアクセス権を有し、第2のハッシュ値を中間ノードから受信し、第1のハッシュ値が第2のハッシュ値へとハッシュすることを検証し得る。そうである場合、ターゲットノードは対応するターゲット要求を有する。いくつかの例では、第2のハッシュ値は、タイムスタンプを用いて第1のハッシュ値をハッシュすることによって取得され得る。これらの例では、ターゲットノードは、第2のハッシュが既知の第1のハッシュ値に基づくことを検証するために、ある範囲の異なるタイムスタンプを用いて第1の値をハッシュすることを試み得る。
【0189】
ターゲットノードは、取得された公開鍵(すなわち、要求ノードの公開鍵およびチェーンの中の各々の他のノードのそれぞれの公開鍵)を使用してターゲットデータを暗号化する。すなわち、ターゲットデータは、ターゲットデータが各公開鍵を用いて暗号化されるまで、最初に要求ノードの公開鍵を用いて、次いで経路の中の第1の中間ノードの公開鍵を用いて、次いで経路の中の第2の中間ノードの公開鍵を用いてなど、公開鍵の各々を用いて暗号化される。いくつかの例では、ターゲットデータはまず1つまたは複数のデータパケットへと分割されてもよく、各データパケットは公開鍵のセットを用いて暗号化されてもよい。
【0190】
公開鍵のセットを用いて暗号化されるデータパケットは、「最後の暗号化されたメッセージ」と呼ばれる。要求ノードの公開鍵だけを用いて暗号化されるデータパケットは、「最初の暗号化されたメッセージ」と呼ばれる。すなわち、データパケットは、最初の暗号化されたメッセージを取得するために要求ノードの公開鍵を用いて各々暗号化され、最初の暗号化されたメッセージは、最後の暗号化されたメッセージを取得するために残りの公開鍵を用いて各々暗号化される。
【0191】
ターゲットノードは、最後の暗号化されたメッセージを、経路の中の最後の中間ノード、すなわちターゲットノードの公開鍵にロックされる出力を有する副要求トランザクションを提出した中間ノードに送信する。最後の中間ノードは、暗号化されたメッセージのセットを取得するために、そのノードの公開鍵に対応する秘密鍵を使用して、最後の暗号化されたメッセージを復号する。暗号化されたメッセージのセットの中の暗号化されたメッセージの各々は、他の中間ノードおよび要求ノードの公開鍵を用いて暗号化される。最後の中間ノードは、暗号化されたメッセージのセットを(要求ノードの方向において)経路の中の次の中間ノードに送信し、または、経路の中に1つの中間ノードしかない場合、要求ノードに送信する。暗号化されたメッセージのセットを受信する各中間ノードは、それらのそれぞれの秘密鍵を用いてメッセージを復号し、暗号化されたメッセージの得られたセットを経路の中の次のノードに送信する。最終的に、要求ノードは1つまたは複数の最初の暗号化されたメッセージを受信する。要求ノードは次いで、1つまたは複数のデータパケットを取得するために、その秘密鍵を用いて1つまたは複数の最初の暗号化されたメッセージを復号し得る。ターゲットデータは次いで、データパケットを組み合わせることによって取得される。
【0192】
いくつかの例では、暗号化されたメッセージはノードからノードへ1つのバッチで提出される。他の例では、暗号化されたメッセージはノードからノードへ一度に提出される。
【0193】
暗号化されたメッセージは、オフチェーンチャネルを介してノード間で送信され得る。代替として、暗号化されたメッセージはブロックチェーンを介して送信され得る。たとえば、各ノードは1つまたは複数のデータトランザクションをブロックチェーンに送信してもよく、各データトランザクションは1つまたは複数の暗号化されたメッセージを備える。
【0194】
要求ノードは、データパケットの取得を証明するために、1つまたは複数の証明トランザクションをブロックチェーンに提出する。たとえば、証明トランザクションは、ターゲットデータのハッシュを含み得る。証明トランザクションは、最初の暗号化されたメッセージを要求ノードに送信する、チェーンの中のノードの公開鍵にロックされた出力を備え得る。要求ノードが単一の証明トランザクションをブロックチェーンに提出してもよく、または、それぞれの証明トランザクションが各データパケットに対して出されてもよく、たとえば、各トランザクションはそれぞれのデータパケットのハッシュを含んでもよい。同様に、各中間ノードは、経路の中の前のノードから1つまたは複数の暗号化されたメッセージを受信したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンに提出し得る。追加または代替として、ターゲットノードは、ターゲットノードに接続されるチェーンの中のノードへの最後の暗号化されたメッセージの送信を証明するために、1つまたは複数の証明トランザクションをブロックチェーンに提出してもよい。
【0195】
図24は、中間ノードを介して要求ノードに暗号化されたメッセージを送信するプロセスを示す。示されるように、ターゲットノードは、複数の暗号化されたメッセージを取得するために、複数のデータパケットを暗号化する。暗号化されたメッセージは、一度に中間ノードに送信される。中間ノードは、暗号化されたメッセージを受信したことへの返答として、または受信するために、証明トランザクションをブロックチェーンネットワークに提出する。暗号化されたメッセージは、最初の暗号化されたメッセージを明らかにするために、中間ノードの公開鍵を使用して復号される。最初の暗号化されたメッセージは次いで要求ノードに送信され、要求ノードは最初の暗号化されたメッセージの受信を証明する。最初の暗号化されたメッセージは、ターゲットデータを明らかにするために復号される。
【0196】
いくつかの例では、ターゲットノードは、第1のハッシュ値と共にターゲットデータ(またはターゲットデータのそれぞれのチャンク)を暗号化して、最初の暗号化されたメッセージを生成し得る。すなわち、各データパケット(それがターゲットデータ全体であるか、またはそのチャンクであるかにかかわらず)は、要求ノードの公開鍵を用いて暗号化される前に、第1のハッシュ値と組み合わせられる。最初の暗号化されたメッセージを復号するとき、要求ノードは、復号された第1のハッシュ値が、第2のハッシュ値の根拠であった正しい第1のハッシュ値であることを検証し得る。このようにして、要求ノードは、データパケットがターゲットノードによって提供されていることについて確信することができ、それは、ターゲットノードが、たとえばデータ要求をハッシュすることによって、第1のハッシュ値へのアクセス権を有していたからである。
【0197】
9. 例示的な実装形態
以下は、フラッディング要求の実施形態およびチェーン要求の実施形態の例示的な実装形態を提供する。
【0198】
P2Pデータ伝送のインセンティブを追加するために、ノードは、後で伝送プロセスに関与するノードにより受信されるトランザクションを使用して、ブロックチェーン上での各伝送を証明し得る。ブロックチェーンネットワークを使用することによって、不正を行うノードが責任を負い得るように、通信の監査可能な痕跡が作成される。図17は、ノードN1とN1,1との間の伝送の視覚化を提供する。P2PネットワークからのデータDをソースノードN1が要求することを考え、シンクノードNk=N1,1,2がデータを所有すると仮定する。要求されるデータは、たとえば、ファイル、ネットワーククエリ、または身元の証明であり得る。NkからN1にそれを伝送するために、実装形態に対して2つのレイヤがある。
・データ要求によるP2Pネットワークのフラッディングにインセンティブを与える。
・それを要求するノードへのデータ分配にインセンティブを与える。
【0199】
ネットワークに応じて、ノードは、要求フラッディングとデータ分配の両方にインセンティブを与えるプロトコルへと2つのレイヤを組み合わせることができる。各ノードは、ノードがそれを通じてP2Pネットワークにおいて一意に識別可能になる関連する公開鍵を有すると仮定される。
【0200】
9.1 フラッディング報酬
N1は、P2PネットワークにおいてデータDに対する要求Rを送信し、要求を転送したことに対する支払報酬を添付する。要求がNkに到達すると、Nkは支払報酬のためにデータDを直接N1に伝送する。プロトコルは、Nkを見つけるためのピア発見段階(図18)と、支払およびデータ伝送のための決済段階(図19)へと分けられる。プロトコルは次の通りである。
【0201】
9.1.1 ピア発見段階:
1. N1がその要求R、H1(H0(R))をハッシュし、H1とH0はハッシュ関数であるが、必ずしも異ならない。
2. N1が、ハッシュされた要求H1(H0(R))を含むロックタイムT1でトランザクションをその隣接ノードN1,1、N1,2に送信する(図20)。N1がUTXO
【0202】
【数12】
【0203】
を消費する。
【0204】
N1がロックタイムT1の前にその要求への応答を受信しない場合、N1はロックタイムなしで、資金を自身に返すトランザクションをブロードキャストする。
3. 各ノードN1,iが、ロックタイムT2,iでトランザクションを作成することによって、ネットワークの中の要求を転送する(図21)。N1,iがUTXO
【0205】
【数13】
【0206】
を消費する。
【0207】
N1,iがロックタイムT2,iの前にその要求への応答を受信しない場合、N1,iはロックタイムなしで、資金を自身に返すトランザクションをブロードキャストする。
4. シンクノードNkが、H1(H0(R))を受信し、(たとえば、ローカルに記憶されているデータベースからの)要求Rを認識する。Nkが、その識別情報およびH0(R)を含むメッセージをP2Pネットワークにブロードキャストする。
【0208】
9.1.2 決済段階:
5. すべてのノードがH0(R)を含むブロードキャストされるメッセージを受信すると、ノードN1,iは、図20においてトランザクションのi番目の出力を消費し、ノードN1,I,jは、図21においてトランザクションのj番目の出力を消費する。たとえば、Nkが、図22において与えられるようにトランザクションTxIDans-Nkをビットコインネットワークにブロードキャストする。
6. ノードN1が、ステップ4において明らかにされたH0(R)およびNkの識別情報を受信する。N1がNkに連絡する。
7. Nkが、たとえば支払チャネルプロトコルを使用して、データDをN1に送信し、y BSVの支払を受け取る。
【0209】
スクリプト[Hash-puzzle<H1(H0(R))>]は、
OP_SHA256<H1(H0(R))>OP_EQUALVERIFY
として定義され、H1をオペコードOP_SHA256に対応するハッシュ関数として固定する。ハッシュパズルは、スクリプト<H0(R)>を用いてアンロックされ得る。
【0210】
ノードN1は、その隣接ノードN1,1およびN1,2の各々に2x BSVを支払うトランザクション要求に資金提供する。我々のネットワーク構造では、Nkに到達するために1つだけのホップを考えるが、2x BSVという額は、要求がどれだけ速く回答されるべきか、およびどれだけのホップが予想されるかに基づいて選ばれるべきである。N1,1およびN1,2は、H0(R)を知らない限り支払を受け取ることができないので、N1,1およびN1,2は、x BSVという報酬のために、それらの隣接ピアにH1(H0(R))を転送することについてインセンティブを与えられる。
【0211】
Nkは、H0(R)を公開し、それをP2Pネットワークにおいてブロードキャストすることについてインセンティブを与えられ、それは、このようにすると、自身の身元がN1に知られるようになり、データ伝送に対する支払を受け取るからである。合計で、Nkは、データ伝送に対してy BSVの支払を受け取り、TxIDans-Nkをブロードキャストすることによってx-ε BSVの支払を受け取る。次いで、各ノードN1,1およびN1,2
2x-x-ε=x-εBSV
の利益を得る。
【0212】
同様に、N1,1,1、N1,2,1、N1,2,2は、ステップ5によってx-ε BSVの利益を得る。以下の表はこのインセンティブを要約する。
【0213】
【表1】
【0214】
N1,2が不正を行い、H0(R)がNkによりブロードキャストされることを待ち、要求を転送することなく2x BSVを受け取るような状況があり得る。このシナリオはN1により回避されるべきであり、それは、プロトコルに従わないことで、データDが発見される確率をN1,2が下げているからである。したがって、N1は、その隣接ピアがトランザクションを中継することによって要求を転送した場合、ブロックチェーン上で常に確認を行うことについてインセンティブを与えられる。それらのいずれもが要求を転送しない場合、セクション6および7において上で説明されたように、N1は、不正なピアに対する報酬を減らし、または、認証機関に連絡することによって不正なピアをネットワークから切断させることができる。
【0215】
同様に、N1,2は、x BSV未満をそのピアに支払い、要求を転送することに対するインセンティブを減らすことができる。上記の場合のように、N1は、N1,2の支払をブロックチェーン上で常に確認し、未来の報酬を減らし、N1,2をネットワークから切断することができる。
【0216】
追加の論点は、要求Rに関係する。ノードが不正を行い、Nkが発見されることを待たずに要求報酬を得ることを望む場合、ノードはH0(R)を見つけるために力ずくでH1(H0(R))を得なければならない。Rが長ければ、そのような手法はあまりにも高価であり得る。注意深い読者は、ここで書かれているように、このプロトコルに脆弱性があることにも気づくことができる。要求Rは、必ずしも同じソースノードN1によってではなく、ネットワークを通じて複数回送信され得る。この場合、ノードは不正に振る舞い得る。第1の要求からH0(R)を知ると、ノードはステップ2においてトランザクションを消費することができる。この問題に対する1つの軽減策は、N1がUnix時間値unixtimeなどの時間変数を次のようにH0(R)に付加し、
H0(R)||unixtime
ハッシュH1(H0(R)||unixtime)を使用してトランザクションを作成することである。Nkが要求を受信すると、Nkは要求を照合するために現在のUnix時間に近い値について確認しなければならない。これは、正しいUnix時間値およびデータベースの中の要求Rを見つけることについて、Nkに小さな負担を加える。
【0217】
9.2 チェーン報酬
フラッディング報酬のセクションでは、N1はデータを受信するためにNkに直接連絡した。しかしながら、このセクションでは、データDは、NkをN1に接続するネットワーク経路を通じて広められており、そのような経路を勝利チェーンと呼ぶ。勝利チェーン上のノードだけが報酬を受け、NkからN1へチェーンを通じてデータDをセキュアに伝送するために、データを暗号化する必要がある。図23および図24は、通信の視覚化を提供する。
【0218】
9.2.1 ピア発見段階:
1. N1がH1(H0(R))およびその公開鍵
【0219】
【数14】
【0220】
を各隣接ノードN1,iに送信する。
2. H1(H0(R))および
【0221】
【数15】
【0222】
を受信した後、N1,iはさらに、H1(H0(R))を
【0223】
【数16】
【0224】
および
【0225】
【数17】
【0226】
と共に各隣接ノード
【0227】
【数18】
【0228】
に送信する。
3. N1,i,jがH1(H0(R))および
【0229】
【数19】
【0230】
【0231】
【数20】
【0232】
を受信する。
【0233】
ピア発見ステップ1-3を実行することによって、NkはH1(H0(R))を公開鍵N1およびN1,1と共に受信するので、勝利チェーンNk、N1,1、N1が形成される。チェーンに対する支払を決済するためのプロトコルは次の通りである。
【0234】
9.2.2 決済段階:
4. NkがデータDをm個のデータパケットDiへと分割し、1≦i≦mである。たとえば、データDが128kbのサイズを有する場合、Nkは、それを、各々32kbのサイズであるm=4個のパケットDiに分割することができる。
各データパケットDiに対して、以下を実行する。
5. NkがデータパケットDiを暗号化する。
【0235】
【数21】
【0236】
6. NkがEiをN1,1に送信し、N1,1がビットコイントランザクションを通じてx BSVの報酬をNkに支払う。
7. N1,1がEiをNkから受信すると、N1,1
【0237】
【数22】
【0238】
に関連する秘密鍵を使用して暗号化されたデータEiを復号し、
【0239】
【数23】
【0240】
を取得する。
【0241】
N1,1は、H0(R):H1(H0(R))をハッシュし、要求を検証することによって、正当性を確認する。正当性確認が失敗する場合、プロセスは停止する。
8. N1,1が、N1に向けられた暗号化されたデータを抽出する。
【0242】
【数24】
【0243】
9. N1,1
【0244】
【数25】
【0245】
をN1に送信し、N1はビットコイントランザクションを通じてx+y BSVの報酬をN1,1に支払う。
10. N1
【0246】
【数26】
【0247】
に関連する秘密鍵を使用して
【0248】
【数27】
【0249】
を復号して、
H0(R)||Di
を取得する。
【0250】
N1は、H0(R):H1(H0(R))をハッシュし、要求を検証することによって、正当性を確認する。正当性確認が失敗する場合、プロセスは停止する。
11. ステップ5に戻り、次のデータパケットを取り出す。
【0251】
以下の表は各ノードに対するインセンティブを要約する。
【0252】
【表2】
【0253】
N1,1のインセンティブに対する根拠は次の通りである。N1,1はステップ6においてx BSVをNkに支払い、N1,1はステップ9においてN1からy+x BSVを受け取る。したがって、N1,1の利幅は各データパケットに対してy BSVである。
【0254】
以下は、暗号化フォーマットがどのように不正を防ぐかを説明する。
・プリペンドされたハッシュ:N1がP2Pネットワークにおいてデータに対する複数の要求を行う場合、各々の暗号化されたデータEiおよび
【0255】
【数28】
【0256】
はH0(R)を含む。このようにして、N1,1とN1は、暗号化されたデータがどの要求に関連付けられるかを知る。
・暗号化レイヤ:Nkはステップ5において
【0257】
【数29】
【0258】
【0259】
【数30】
【0260】
の両方を用いて各パケットDiを暗号化するので、これはN1がN1,1を騙すことを次のように防ぐ。Nk
【0261】
【数31】
【0262】
だけを用いてデータパケットDiを暗号化する場合、
【0263】
【数32】
【0264】
N1は、NkとN1,1との間の接続を盗聴することによって、N1,1に宛てられたデータを取得して復号することができる。この場合、N1,1は暗号化されたデータパケットに対して支払うが、それをN1に送信するとき、N1はすでにパケットDiを獲得しているので、支払を拒否する。
【0265】
Nk
【0266】
【数33】
【0267】
【0268】
【数34】
【0269】
の両方を用いて各パケットDiを暗号化する場合、N1は、盗聴しても、暗号化されたデータ
【0270】
【数35】
【0271】
から何の情報も得ることができない。
【0272】
データ品質を確認し、N1により必要とされる品質をNkから受信される品質と照合することは、難しい問題である[7]。我々のシステムは、N1,1とN1に対してある程度の保護を実装する。Nkが不正に振る舞い、データ品質が適切ではない場合、Nkは、多くても1つの不正なデータパケットDiに対して支払うようにしかN1,1とN1を騙すことができず、Nkへの後続のデータパケットおよび支払は拒否される。
【0273】
データ品質の不一致の場合、Nkの隣接ピアであるN1,1は、Nkが不正を行ったという公開の証拠をブロックチェーン上に有する後続の支払を減らすことができる。不正が続く場合、N1,1はNkを認証機関に報告し、Nkをネットワークから切断することができる。
【0274】
ノードは、複数のIPアドレスおよび関連する身元証明をネットワーク全体で使用し、それにより異なるエンティティであるように見える場合、身元を複製していると言われる。Sybil攻撃を通じて、ノードは、より多くの報酬を得ようとして、自身の身元を複製することができる。そのような攻撃がチェーン報酬プロトコルにもたらす影響は、不正ノードが偽の身元にデータを送信することによってフィーを増やすことができるというものである。これは、ネットワークセットアップ段階において異なる身元を同じノードに発行しないように認証機関に求めることによって、防がれ得る。
【0275】
正当なノードには、証明なしでノードからの接続を受け入れる動機がなく、それは、このことが、支払う報酬の増大につながる可能性があるからである。不正ノードは、コピーを自身に付加することでしかネットワークにおいて自身の存在を複製することができない。我々のP2Pネットワークにおいて、N1,1の不正が勝利チェーンNk、N1,1、N1,1、N1をもたらすと仮定する。この攻撃を実行することによって、N1,1は、勝利チェーンはより長かったとN1に確信させることによって、N1から受け取る報酬を増やす。
【0276】
すべてのトランザクションはブロックチェーンに記録されているので、N1は、N1,1が勝利チェーンに沿って自身を複製していたかどうかを確認し、支払を拒否することができる。その上、ノードNkが、ステップ3において受信する公開鍵を重複について確認するのは簡単である。シンクノードは、重複する身元について確認を行わず、したがって不正な計画に参加する場合、不正な挙動に対する責任を負い得る。
【0277】
9.3 フラッディングおよびチェーン報酬
セクション9.1および9.2のプロトコルは、P2Pネットワークにおける要求とデータの伝播のためのインセンティブ機構へと組み合わせられ得る。
・ピア発見:N1から開始して、セクション9.1において与えられるステップ1-4を実行する。
・決済:要求がNkに到達すると、セクション9.2において与えられるステップ4-11を実行する。
【0278】
このプロトコルは、セクション9.1および9.2のプロトコルを次のように改善する。
・セクション9.1では、データDはP2Pネットワーク構造の外側でNkからN1に伝送されたので、NkとN1は、データ伝送遅延があり得る異なるインフラストラクチャを使用しなければならない。しかしながら、既存のP2Pネットワーク構造では、N1は、その要求トランザクションにロックタイムを追加することによって遅延を推定することができる。したがって、セクション9.2のプロトコルの決済段階を使用してデータを伝送することによって、伝送遅延に対する制御を追加する。
・セクション9.2のプロトコルでは、ノードN1,2は勝利チェーンの一部ではなく、以降の要求の転送を止め得る。要求はブロックチェーンに対して証明されないので、N1はN1,2がプロトコルに従っていないことを証明できない。したがって、フラッディング報酬を提供することによって、要求を転送することについてN1,2にインセンティブを与える。
【0279】
10. さらなる所見
開示される技法の他の変形または使用事例は、本明細書の開示が与えられれば当業者に明らかになり得る。本開示の範囲は、説明される実施形態ではなく、添付の特許請求の範囲だけによって限定される。
【0280】
たとえば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上記の説明は全般に任意のブロックチェーンに当てはまり得ることが理解されるだろう。すなわち、本発明は、決してビットコインブロックチェーンに限定されない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上でのあらゆる言及はそれぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への言及で置き換えられ得る。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上で説明されたように、ビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の説明される特性の一部またはすべてを共有し得る。
【0281】
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成し、公開し、広め、および記憶するという説明された機能の少なくともすべてを実行する。これらの機能のすべてではなく1つまたはいくつかしか実行しない他のネットワークエンティティ(またはネットワーク要素)があり得ることは排除されない。すなわち、ネットワークエンティティは、ブロックを作成して公開することなく、ブロックを広めるおよび/または記憶するという機能を実行し得る(これらのエンティティは好ましいビットコインネットワーク106のノードであると考えられないことを思い出されたい)。
【0282】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークではなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を作成し、公開し、広め、および記憶するという機能のすべてではなく少なくとも1つまたはいくつかを実行し得ることは排除されない。たとえば、それらの他のブロックチェーンネットワーク上では、「ノード」は、ブロック151を作成して公開するが、それらのブロック151を他のノードに記憶しないおよび/または広めないように構成される、ネットワークエンティティを指すために使用され得る。
【0283】
さらにより一般的には、上の「ビットコインノード」104という用語へのあらゆる言及は、「ネットワークエンティティ」または「ネットワーク要素」という用語で置き換えられてもよく、そのようなエンティティ/要素は、ブロックを作成し、公開し、広め、および記憶するという役割の一部またはすべてを実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照して上で説明されたのと同じ方法でハードウェアで実装され得る。
【0284】
上の実施形態は例として説明されるだけであることが理解されるだろう。より一般的には、以下の陳述の任意の1つまたは複数に従って、方法、装置、またはプログラムが提供され得る。
【0285】
陳述1.ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのうちのターゲットノードが、ターゲットデータアイテムへのアクセス権を有し、方法が、要求P2Pノードによって実行され、
第2のハッシュ値を取得するステップであって、第2のハッシュ値が、第1のハッシュ値を生成するために第1のハッシュ関数を用いて少なくともデータ要求をハッシュし、次いで、第2のハッシュ値を生成するために第2のハッシュ関数を用いて少なくとも第1のハッシュ値をハッシュすることによって生成され、データ要求が、ターゲットデータアイテムと関連付けられる、ステップと、
要求P2Pノードに接続される1つまたは複数のP2Pノードに第2のハッシュ値および要求P2Pノードの公開鍵を送信するステップであって、P2Pノードのチェーンが、要求P2PノードとターゲットP2Pノードとの間に形成され、チェーンの中の各P2Pノードが、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続され、チェーンの中の各P2Pノードが、チェーンの中の次のP2Pノードに、第2のハッシュ値およびチェーンの中の各々のそれぞれの先行するP2Pノードに関連するそれぞれの公開鍵を送信するように構成され、それにより、ターゲットP2Pノードが、第2のハッシュ値および1つまたは複数のそれぞれの公開鍵を受信する、ステップと
を含み、
ターゲットP2Pノードが、ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットへと分割し、要求P2Pノードの公開鍵を使用して第1のハッシュ値と共に1つまたは複数のそれぞれのデータパケットの各々を暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成し、受信された1つまたは複数のそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化することによって、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するように構成され、方法は、
要求P2Pノードに接続されるチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得するステップであって、要求P2Pノード以外のチェーンの中の各々のそれぞれのP2Pノードが、チェーンの中の次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得し、それぞれのP2Pノードに関連するそれぞれの公開鍵を使用して1つまたは複数の暗号化されたメッセージを復号し、1つまたは複数の暗号化されたメッセージをチェーンの中の前のそれぞれのP2Pノードに送信し、それにより、1つまたは複数の最後の暗号化されたメッセージが、ターゲットP2Pノードから要求P2Pノードへチェーンに沿って送信されるにつれて復号に成功する、ステップと、
1つまたは複数のそれぞれの最初の暗号化されたメッセージを復号して1つまたは複数のそれぞれのデータパケットを取得し、それに基づいてターゲットデータアイテムを構築するステップと、
要求P2Pノードに接続されるチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンネットワークに提出するステップと
を含む。
【0286】
陳述2.チェーンの中の次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得するチェーンの中の各P2Pノードが、チェーンの中のそれぞれの次のP2Pノードから1つまたは複数の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンネットワークに提出するように構成される、陳述1の方法。
【0287】
陳述3.各々のそれぞれの最初の暗号化されたメッセージを復号するステップが、第1のハッシュ値候補およびそれぞれのデータパケットを明らかにし、方法が、
第2のハッシュ関数を用いて第1のハッシュ値候補をハッシュして第2のハッシュ値候補を生成するステップと、
第2のハッシュ値候補が第2のハッシュ値と一致することを検証するステップとを含む、陳述1または陳述2の方法。
【0288】
陳述4.要求P2Pノードに接続される1つまたは複数のP2Pノードへの第2のハッシュ値の前記送信が、第2のハッシュ値を1つまたは複数のP2Pノードに直接送信することを含む、先行する陳述のいずれかに記載の方法。
【0289】
陳述5.要求P2Pノードに接続される1つまたは複数のP2Pノードへの第2のハッシュ値の前記送信が、要求トランザクションをブロックチェーンネットワークに提出するステップを含み、要求トランザクションが、第2のハッシュ値および1つまたは複数のそれぞれの出力を含み、各々のそれぞれの出力が、P2Pノードのそれぞれのノードのそれぞれの公開鍵にロックされる、陳述1から4のいずれかの方法。
【0290】
陳述6.ターゲットデータアイテムが、複数のデータパケットへと分割される、先行する陳述のいずれかに記載の方法。
【0291】
陳述7.それぞれのP2Pノードからの1つまたは複数の最初の暗号化されたメッセージの前記取得が、1つまたは複数の最初の暗号化されたメッセージをそれぞれのP2Pノードから直接取得することを含む、先行する陳述のいずれかに記載の方法。
【0292】
陳述8.ブロックチェーンが、1つまたは複数のそれぞれのデータトランザクションを含み、各々のそれぞれのデータトランザクションが、それぞれの最初の暗号化されたメッセージを含み、それぞれのP2Pノードからの1つまたは複数の最初の暗号化されたメッセージの前記取得が、ブロックチェーンから1つまたは複数の最初の暗号化されたメッセージを取得することを含む、先行する陳述のいずれかに記載の方法。
【0293】
陳述9.第2のハッシュ値の前記取得が、第2のハッシュ値を生成することを含む、先行する陳述のいずれかに記載の方法。
【0294】
代替として、第2のハッシュ関数は、異なるP2Pノードまたは信用される第三者から取得され得る。
【0295】
陳述10.第1のハッシュ関数と第2のハッシュ関数とが、同じハッシュ関数である、先行する陳述のいずれかに記載の方法。
【0296】
陳述11.第1のハッシュ関数と第2のハッシュ関数とが、異なるハッシュ関数である、陳述1から9のいずれかの方法。
【0297】
陳述12.第1のハッシュ関数が、暗号学的ハッシュ関数であり、および/または第2のハッシュ関数が、暗号学的ハッシュ関数である、先行する陳述のいずれかに記載の方法。
【0298】
陳述13.データ要求が、ターゲットデータアイテムのハッシュに基づく、先行する陳述のいずれかに記載の方法。
【0299】
陳述14.ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのうちのターゲットノードが、要求P2Pノードによって要求されるターゲットデータアイテムへのアクセス権を有し、方法が、ターゲットP2Pノードによって実行され、
第2のハッシュ値および1つまたは複数の公開鍵を取得するステップであって、各公開鍵がそれぞれのP2Pノードと関連付けられ、1つまたは複数の公開鍵のうちの1つが、要求P2Pノードの公開鍵であり、他の1つまたは複数の公開鍵の各々が、要求P2PノードとターゲットP2Pノードとの間のP2Pノードのチェーンに属するそれぞれのP2Pノードと関連付けられ、チェーンの中の各P2Pノードが、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続される、ステップと、
第2のハッシュ値が第1のハッシュ値に基づくと決定するステップであって、第1のハッシュ値が、ターゲットデータアイテムに関連するデータ要求に基づく、ステップと、
ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割するステップと、
要求P2Pノードの公開鍵を使用して第1のハッシュ値と共に1つまたは複数のそれぞれのデータパケットの各々を暗号化して、1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成するステップと、
チェーンの中のそれぞれのP2Pノードに関連するそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化して、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するステップと、
ターゲットP2Pノードに接続されるチェーンの中のP2Pノードに1つまたは複数のそれぞれの最後の暗号化されたメッセージを送信するステップと
を含み、
1つまたは複数のそれぞれの証明トランザクションが、1つまたは複数のそれぞれの最後の暗号化されたメッセージの送信を証明するためにブロックチェーンネットワークへ提出される、コンピュータ実装方法。
【0300】
陳述15. 1つまたは複数のそれぞれの証明トランザクションが、ターゲットP2Pノードによってブロックチェーンネットワークへ提出される、陳述14の方法。
【0301】
陳述16.
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、メモリが、処理装置上で実行されるように配置されるコードを記憶し、コードが、処理装置上で実行されると、陳述1から15のいずれかの方法を実行するように構成される、コンピュータ機器。
【0302】
陳述17.コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されると、陳述1から15のいずれかの方法を実行するように構成される、コンピュータプログラム。
【0303】
本明細書で開示される別の態様によれば、要求P2PノードおよびターゲットP2Pノードのアクションを備える方法が提供され得る。
【0304】
本明細書で開示される別の態様によれば、要求P2PノードおよびターゲットP2Pノードのコンピュータ機器を備えるシステムが提供され得る。
【符号の説明】
【0305】
101 インターネット、パケット交換ネットワーク
102 コンピュータ端末、機器
103 ユーザ
104 ブロックチェーンノード
105 クライアントアプリケーション
106 P2Pネットワーク
107 サイドチャネル
150 ブロックチェーン
151 ブロック
152 トランザクション
153 ジェネシスブロック
154 プール
155 ブロックポインタ
201 ヘッダ
202 入力
203 出力
401 トランザクションエンジン
402 UIレイヤ
451 プロトコルエンジン
452 スクリプトエンジン
454 アプリケーションレベル決定エンジン
455 ブロックチェーン関連機能モジュール
500 UI
501 P2Pノード
502 データエントリフィールド
503 情報要素、UI要素
図1
図2
図3A
図3B
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
【手続補正書】
【提出日】2024-04-16
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、前記P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、前記P2Pノードのうちのターゲットノードが、ターゲットデータアイテムへのアクセス権を有し、前記方法が、要求P2Pノードによって実行され、
第2のハッシュ値を取得するステップであって、前記第2のハッシュ値が、第1のハッシュ値を生成するために第1のハッシュ関数を用いて少なくともデータ要求をハッシュし、次いで、第2のハッシュ値を生成するために第2のハッシュ関数を用いて少なくとも前記第1のハッシュ値をハッシュすることによって生成され、前記データ要求が、前記ターゲットデータアイテムと関連付けられる、ステップと、
前記要求P2Pノードに接続される1つまたは複数のP2Pノードに前記第2のハッシュ値および前記要求P2Pノードの公開鍵を送信するステップであって、P2Pノードのチェーンが、前記要求P2Pノードと前記ターゲットP2Pノードとの間に形成され、前記チェーンの中の各P2Pノードが、前記チェーンの中の先行するP2Pノードおよび/または前記チェーンの中の次のP2Pノードに接続され、前記チェーンの中の各P2Pノードが、前記チェーンの中の前記次のP2Pノードに、前記第2のハッシュ値および前記チェーンの中の各々のそれぞれの先行するP2Pノードに関連する前記それぞれの公開鍵を送信するように構成され、それにより、前記ターゲットP2Pノードが、前記第2のハッシュ値および1つまたは複数のそれぞれの公開鍵を受信する、ステップと
を含み、
前記ターゲットP2Pノードが、前記ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットへと分割し、前記要求P2Pノードの公開鍵を使用して前記第1のハッシュ値と共に前記1つまたは複数のそれぞれのデータパケットの各々を暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成し、前記受信された1つまたは複数のそれぞれの公開鍵の各々を用いて前記1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化することによって、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するように構成され、前記方法が、
前記要求P2Pノードに接続される前記チェーンの中の前記それぞれのP2Pノードから前記1つまたは複数の最初の暗号化されたメッセージを取得するステップであって、前記要求P2Pノード以外の前記チェーンの中の各々のそれぞれのP2Pノードが、前記チェーンの中の前記次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得し、前記それぞれのP2Pノードに関連する前記それぞれの秘密鍵を使用して前記1つまたは複数の暗号化されたメッセージを復号し、前記1つまたは複数の暗号化されたメッセージを前記チェーンの中の前記先行するそれぞれのP2Pノードに送信し、それにより、前記1つまたは複数の最後の暗号化されたメッセージが、前記ターゲットP2Pノードから前記要求P2Pノードへ前記チェーンに沿って送信されるにつれて復号に成功する、ステップと、
前記要求P2Pノードの秘密鍵を使用して前記1つまたは複数のそれぞれの最初の暗号化されたメッセージを復号して前記1つまたは複数のそれぞれのデータパケットを取得し、それに基づいて前記ターゲットデータアイテムを構築するステップと、
前記要求P2Pノードに接続される前記チェーンの中の前記それぞれのP2Pノードから前記1つまたは複数の最初の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションを前記ブロックチェーンネットワークに提出するステップと
を含む、コンピュータ実装方法。
【請求項2】
前記チェーンの中の前記次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得する前記チェーンの中の各P2Pノードが、前記チェーンの中の前記次のそれぞれのP2Pノードから前記1つまたは複数の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションを前記ブロックチェーンネットワークに提出するように構成される、請求項1に記載の方法。
【請求項3】
各々のそれぞれの最初の暗号化されたメッセージを復号するステップが、第1のハッシュ値候補および前記それぞれのデータパケットを明らかにし、前記方法が、
前記第2のハッシュ関数を用いて前記第1のハッシュ値候補をハッシュして第2のハッシュ値候補を生成するステップと、
前記第2のハッシュ値候補が前記第2のハッシュ値と一致することを検証するステップと
を含む、請求項1または2に記載の方法。
【請求項4】
前記要求P2Pノードに接続される前記1つまたは複数のP2Pノードへの前記第2のハッシュ値の前記送信が、前記第2のハッシュ値を前記1つまたは複数のP2Pノードに直接送信することを含む、請求項1に記載の方法。
【請求項5】
前記要求P2Pノードに接続される前記1つまたは複数のP2Pノードへの前記第2のハッシュ値の前記送信が、要求トランザクションを前記ブロックチェーンネットワークに提出するステップを含み、前記要求トランザクションが、前記第2のハッシュ値および1つまたは複数のそれぞれの出力を含み、各々のそれぞれの出力が、前記P2Pノードのそれぞれのノードの前記それぞれの公開鍵にロックされる、請求項1に記載の方法。
【請求項6】
前記ターゲットデータアイテムが、複数のデータパケットへと分割される、請求項1に記載の方法。
【請求項7】
前記それぞれのP2Pノードからの前記1つまたは複数の最初の暗号化されたメッセージの前記取得が、前記1つまたは複数の最初の暗号化されたメッセージを前記それぞれのP2Pノードから直接取得することを含む、請求項1に記載の方法。
【請求項8】
前記ブロックチェーンが、1つまたは複数のそれぞれのデータトランザクションを含み、各々のそれぞれのデータトランザクションが、それぞれの最初の暗号化されたメッセージを含み、前記それぞれのP2Pノードからの前記1つまたは複数の最初の暗号化されたメッセージの前記取得が、前記ブロックチェーンから前記1つまたは複数の最初の暗号化されたメッセージを取得することを含む、請求項1に記載の方法。
【請求項9】
前記第2のハッシュ値の前記取得が、前記第2のハッシュ値を生成することを含む、請求項1に記載の方法。
【請求項10】
前記第1のハッシュ関数と前記第2のハッシュ関数とが、同じハッシュ関数である、請求項1に記載の方法。
【請求項11】
前記第1のハッシュ関数と前記第2のハッシュ関数とが、異なるハッシュ関数である、請求項1に記載の方法。
【請求項12】
前記第1のハッシュ関数が、暗号学的ハッシュ関数であり、および/または前記第2のハッシュ関数が、暗号学的ハッシュ関数である、請求項1に記載の方法。
【請求項13】
前記データ要求が、前記ターゲットデータアイテムのハッシュに基づく、請求項1に記載の方法。
【請求項14】
ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、前記P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、前記P2Pノードのうちのターゲットノードが、要求P2Pノードによって要求されるターゲットデータアイテムへのアクセス権を有し、前記方法が、前記ターゲットP2Pノードによって実行され、
第2のハッシュ値および1つまたは複数の公開鍵を取得するステップであって、各公開鍵がそれぞれのP2Pノードと関連付けられ、前記1つまたは複数の公開鍵のうちの1つが、前記要求P2Pノードの公開鍵であり、前記他の1つまたは複数の公開鍵の各々が、前記要求P2Pノードと前記ターゲットP2Pノードとの間のP2Pノードのチェーンに属するそれぞれのP2Pノードと関連付けられ、前記チェーンの中の各P2Pノードが、前記チェーンの中の先行するP2Pノードおよび/または前記チェーンの中の次のP2Pノードに接続される、ステップと、
前記第2のハッシュ値が第1のハッシュ値に基づくと決定するステップであって、前記第1のハッシュ値が、前記ターゲットデータアイテムに関連するデータ要求に基づく、ステップと、
前記ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割するステップと、
前記要求P2Pノードの公開鍵を使用して前記第1のハッシュ値と共に前記1つまたは複数のそれぞれのデータパケットの各々を暗号化して、1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成するステップと、
前記チェーンの中の前記それぞれのP2Pノードに関連する前記それぞれの公開鍵の各々を用いて前記1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化して、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するステップと、
前記ターゲットP2Pノードに接続される前記チェーンの中の前記P2Pノードに前記1つまたは複数のそれぞれの最後の暗号化されたメッセージを送信するステップと
を含み、
1つまたは複数のそれぞれの証明トランザクションが、前記1つまたは複数のそれぞれの最後の暗号化されたメッセージの前記送信を証明するために前記ブロックチェーンネットワークへ提出される、コンピュータ実装方法。
【請求項15】
前記1つまたは複数のそれぞれの証明トランザクションが、前記ターゲットP2Pノードによって前記ブロックチェーンネットワークへ提出される、請求項14に記載の方法。
【請求項16】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、前記メモリが、前記処理装置上で実行されるように配置されるコードを記憶し、前記コードが、前記処理装置上で実行されると、請求項1から15のいずれか一項に記載の方法を実行するように構成される、コンピュータ機器。
【請求項17】
コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されると、請求項1から15のいずれか一項に記載の方法を実行するように構成される、コンピュータプログラム。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ピアツーピア(P2P)ネットワークのノード間でデータの伝送を調整するためにブロックチェーンを使用する方法に関する。この方法は、データ伝送の証明を可能にする。
【背景技術】
【0002】
ブロックチェーンとは分散型データ構造の一形態を指し、ブロックチェーンの重複コピーは、分散型ピアツーピア(P2P)ネットワーク(以下では「ブロックチェーンネットワーク」と呼ばれる)内の複数のノードの各々において維持され、広く公開される。ブロックチェーンは、データのブロックのチェーンを備え、各ブロックは、1つまたは複数のトランザクションを備える。いわゆる「コインベーストランザクション」以外の各トランザクションは、あるシーケンスの中の先行するトランザクションを指し示し、シーケンスは、1つまたは複数のブロックにまたがって、1つまたは複数のコインベーストランザクションにまで戻り得る。コインベーストランザクションは、以下でさらに論じられる。ブロックチェーンネットワークに出されたトランザクションは、新しいブロックに含められる。新しいブロックは、「マイニング」と呼ばれることが多いプロセスによって作成され、マイニングは、複数のノードの各々が競って「プルーフオブワーク」を実行すること、すなわち、ブロックチェーンの新しいブロックに含められることを待機している順序付けられた正当性確認済みの未処理のトランザクションの定義されたセットの表現に基づいて暗号パズルを解くことを伴う。ブロックチェーンは一部のノードにおいて剪定されることがあり、ブロックの公開はブロックヘッダのみの公開を通じて達成され得ることに留意されたい。
【0003】
ブロックチェーンにおけるトランザクションは、デジタル資産(すなわち、ある数のデジタルトークン)を動かすこと、仮想化された台帳もしくはレジストリのエントリのセットを順序付けること、タイムスタンプエントリを受信して処理すること、および/またはインデックスポインタを時間的に順序付けることという目的の1つまたは複数のために使用され得る。ブロックチェーンは、ブロックチェーンの上に追加の機能を重ねるためにも活用され得る。たとえば、ブロックチェーンプロトコルは、追加のユーザデータの記憶またはトランザクションの中のデータに対するインデックスを可能にし得る。単一のトランザクションに記憶できる最大のデータ容量には事前に指定された限界がないので、ますますより複雑なデータを組み入れることができる。たとえば、これは、ブロックチェーンに電子文書を、またはオーディオもしくはビデオデータを記憶するために使用され得る。
【0004】
ブロックチェーンネットワークのノード(「マイナー」と呼ばれることが多い)は、分散されたトランザクションの登録と検証のプロセスを実行し、これは後でより詳しく説明される。要約すると、このプロセスの間に、ノードは、トランザクションを正当性確認し、トランザクションが正当なプルーフオブワークの解を特定しようとする対象のブロックテンプレートへとトランザクションを挿入する。正当な解が見つかると、新しいブロックはネットワークの他のノードに広められるので、各ノードがブロックチェーンに新しいブロックを記録することが可能になる。ブロックチェーンにトランザクションが記録されるようにするために、ユーザ(たとえば、ブロックチェーンクライアントアプリケーション)は、広められるべきネットワークのノードのうちの1つにトランザクションを送信する。トランザクションを受信するノードは、正当性確認されたトランザクションを新しいブロックに組み入れるプルーフオブワークの解を見つけるために争い得る。各ノードは同じノードプロトコルを施行するように構成され、これはトランザクションが正当であるための1つまたは複数の条件を含む。不正なトランザクションは、広められず、ブロックにも組み入れられない。トランザクションが正当性確認され、それによりブロックチェーン上で受け入れられると仮定すると、トランザクション(任意のユーザデータを含む)は、変更不可能な公開記録としてブロックチェーンネットワーク中のノードの各々において登録されインデクシングされたままである。
【0005】
プルーフオブワークパズルを解くことに成功して最新のブロックを作成したノードは、ある量のデジタル資産、すなわちある数のトークンを分配する、通常は「コインベーストランザクション」と呼ばれる新しいトランザクションで報いられる。不正なトランザクションの検出と拒絶は、ネットワークの代理として振る舞い不正行為を報告して阻止するようにインセンティブを与えられた、競合するノードのアクションによって実施される。情報の広範な公開が、ユーザがノードの挙動を継続的に監査することを可能にする。単なるブロックヘッダの公開が、ブロックチェーンの持続的な完全性を参加者が保証することを可能にする。
【0006】
「出力ベース」モデル(UTXOベースモデルと呼ばれることがある)では、所与のトランザクションのデータ構造は1つまたは複数の入力および1つまたは複数の出力を備える。あらゆる消費可能な出力は、トランザクションの先行するシーケンスから導出可能なデジタル資産の量を指定する要素を備える。消費可能な出力は、UTXO(「未消費トランザクション出力」)と呼ばれることがある。出力はさらに、出力の将来の引き換え(redemption)のための条件を指定するロッキングスクリプト(locking script)を備え得る。ロッキングスクリプトは、デジタルトークンまたは資産を正当性確認して伝送するために必要な条件を定義する述部である。トランザクション(コインベーストランザクション以外)の各入力は、先行するトランザクションにおけるそのような出力へのポインタ(すなわち、参照)を備え、指し示された出力のロッキングスクリプトをアンロックするためのアンロッキングスクリプトをさらに備え得る。よって、トランザクションのペアを考え、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の量を指定する少なくとも1つの出力を備え、出力をアンロックする1つまたは複数の条件を定義するロッキングスクリプトを備える。第2のターゲットトランザクションは少なくとも1つの入力を備え、これは、第1のトランザクションの出力へのポインタと、第1のトランザクションの出力をアンロックするためのアンロッキングスクリプトとを備える。
【0007】
そのようなモデルでは、第2のターゲットトランザクションが、ブロックチェーンにおいて広められ記録されるようにブロックチェーンネットワークに送信されるとき、各ノードにおいて適用される正当性の基準の1つは、アンロッキングスクリプトが第1のトランザクションのロッキングスクリプトにおいて定義される1つまたは複数の条件のすべてを満たすことである。別の基準は、第1のトランザクションの出力が別のより早い正当なトランザクションによってまだ引き換えられていないということである。これらの条件のいずれかに従ってターゲットトランザクションが不正であることを見出すいずれのノードも、ターゲットトランザクションを広めず(正当なトランザクションとして広めず、しかし場合によっては不正なトランザクションを登録するために広める)、また、ブロックチェーンに記録されるようにターゲットトランザクションを新しいブロックに含めない。
【0008】
代替のタイプのトランザクションモデルはアカウントベースモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOに戻って参照することによって伝送されるべき量を定義するのではなく、絶対的なアカウントの残高を参照することによってそれを定義する。すべてのアカウントの現在の状態が、複数のノードによって別々にブロックチェーンに記憶され、常に更新される。
【発明の概要】
【発明が解決しようとする課題】
【0009】
ピアツーピア(P2P)ネットワークは、インターネット通信および情報共有の発展の駆動力の1つになっている。特に、2009年以降は、ブロックチェーンネットワークがP2Pネットワークサービスにおける暗号学的なブレイクスルーになっている。BitTorrentネットワーク、KazaaまたはGnutellaなどの主要なファイル共有サービスが、よく知られているP2Pネットワークの他の例である。
【0010】
一部のP2Pネットワークには、ノード間の信用とセキュリティが欠けているという問題があり、これは、ネットワークのノード間のデータの転送に参加することに躊躇する向きがあることを意味する。そして、これはP2Pネットワークの規模拡大が困難になることにつながり得る。
【課題を解決するための手段】
【0011】
本明細書で開示される一態様によれば、ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法が提供され、P2Pネットワークは複数のP2Pノードを備え、各P2Pノードは少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのターゲットノードはターゲットデータアイテムへのアクセス権を有し、方法は、要求P2Pノードによって実行され、第2のハッシュ値を取得するステップであって、第2のハッシュ値が、第1のハッシュ関数を用いて少なくともデータ要求をハッシュして第1のハッシュ値を生成し、次いで第2のハッシュ関数を用いて少なくとも第1のハッシュ値をハッシュして第2のハッシュ値を生成することによって生成され、データ要求がターゲットデータアイテムと関連付けられる、ステップと、第2のハッシュ値および要求P2Pノードの公開鍵を要求P2Pノードに接続された1つまたは複数のP2Pノードに送信するステップとを備え、P2Pノードのチェーンは要求P2PノードとターゲットP2Pノードとの間で形成され、チェーンの中の各P2Pノードは、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続され、チェーンの中の各P2Pノードは、チェーンの中の次のP2Pノードに、第2のハッシュ値と、チェーンの中の各々のそれぞれの先行するP2Pノードに関連するそれぞれの公開鍵とを送信するように構成され、それにより、ターゲットP2Pノードが第2のハッシュ値および1つまたは複数のそれぞれの公開鍵を受信し、ターゲットP2Pノードは、ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割し、要求P2Pノードの公開鍵を使用して1つまたは複数のそれぞれのデータパケットの各々を第1のハッシュ値と共に暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成し、受信された1つまたは複数のそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化することによって1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するように構成され、方法は、要求P2Pノードに接続されたチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得するステップであって、要求P2Pノード以外のチェーンの中の各々のそれぞれのP2Pノードが、1つまたは複数の暗号化されたメッセージをチェーンの中の次のそれぞれのP2Pノードから取得し、それぞれのP2Pノードに関連するそれぞれの秘密鍵を使用して1つまたは複数の暗号化されたメッセージを復号し、1つまたは複数の暗号化されたメッセージをチェーンの中の前のそれぞれのP2Pノードに送信し、それにより、1つまたは複数の最後の暗号化されたメッセージが、ターゲットP2Pノードから要求P2Pノードへチェーンに沿って送信されるにつれて復号に成功する、ステップと、
要求P2Pノードの秘密鍵を使用して1つまたは複数のそれぞれの最初の暗号化されたメッセージを復号して1つまたは複数のそれぞれのデータパケットを取得し、それに基づいてターゲットデータアイテムを構築するステップと、
要求P2Pノードに接続されたチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンネットワークに提出するステップとを含む。
【0012】
本明細書で開示される別の態様によれば、ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法が提供され、P2Pネットワークは複数のP2Pノードを備え、各P2Pノードは、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのターゲットノードは、要求P2Pノードによって要求されるターゲットデータアイテムへのアクセス権を有し、方法は、ターゲットP2Pノードによって実行され、第2のハッシュ値および1つまたは複数の公開鍵を取得するステップであって、各公開鍵がそれぞれのP2Pノードと関連付けられ、1つまたは複数の公開鍵のうちの1つが要求P2Pノードの公開鍵であり、他の1つまたは複数の公開鍵の各々が、要求P2PノードとターゲットP2Pノードとの間のP2Pノードのチェーンに属するそれぞれのP2Pノードと関連付けられ、チェーンの中の各P2Pノードが、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続される、ステップと、第2のハッシュ値が第1のハッシュ値に基づくと決定するステップであって、第1のハッシュ値がターゲットデータアイテムに関連するデータ要求に基づく、ステップと、ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割するステップと、要求P2Pノードの公開鍵を使用して1つまたは複数のそれぞれのデータパケットの各々を第1のハッシュ値と共に暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成するステップと、チェーンの中のそれぞれのP2Pノードに関連するそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化して1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するステップと、1つまたは複数のそれぞれの最後の暗号化されたメッセージをターゲットP2Pノードに接続されるチェーンの中のP2Pノードに送信するステップとを備え、1つまたは複数のそれぞれの最後の暗号化されたメッセージの送信を証明するために、1つまたは複数のそれぞれの証明トランザクションが、ブロックチェーンネットワークへ提出される。
【0013】
本開示は、特にデータ分配の間に、P2Pネットワークの信用とセキュリティを改善するためにブロックチェーンを利用する。ブロックチェーンは、P2Pノード間の協調を改善してデータ伝送の効率を高めるために使用される。データに対する要求は、1つまたは複数の中間ノードを介して要求ノードからターゲットノードに送信される。要求ノードは、その公開鍵と共にこの要求を第1の中間ノードに送信する。第1の中間ノードは、この要求、要求ノードの公開鍵、および自身の公開鍵を第2の中間ノード(または、第1の中間ノードがターゲットノードに接続される場合、ターゲットノード)に転送する。要求を受信する各中間ノードは、要求、受信された公開鍵、および自身の公開鍵を次のノードに転送する同じプロセスを実行し、要求がターゲットノードによって受信されるまでこれが行われる。このようにして、1つまたは複数の中間ノードを介して要求ノードからターゲットノードへのチェーンが形成され、チェーンの中の各ノードは、チェーンの中の少なくとも1つの他のノードに接続される(要求ノードおよびターゲットノードはチェーンの最後にあるので、1つの他のノードにしか接続されないことがある)。ノードのチェーンは、要求ノードとターゲットノードとの間のあり得る最短の経路を表し得る。
【0014】
ターゲットノードの公開鍵ではなく、チェーンの中の各ノードのそれぞれの公開鍵を使用して、ターゲットデータがターゲットノードによって暗号化される。これは、ターゲットノード以外のチェーンの中のノードの各々が、ターゲットデータの復号に参加することが必要とされることを意味する。より具体的には、暗号化されたターゲットデータは、ノードのチェーンに沿ってターゲットノードから要求ノードに送信される。チェーンの中の各ノードは、自身の秘密鍵を用いて暗号化されたターゲットデータを部分的に復号する。暗号化されたデータが要求ノードに到達するときには、そのデータは要求ノードの公開鍵により暗号化されているだけであるので、要求ノードは暗号化されたターゲットデータを復号してターゲットデータを明らかにすることができる。要求ノードは、データの受信を証明するために、証明トランザクションをブロックチェーンに提出する。同様に、各々の他のノードは、チェーンの中の前のノードからの暗号化されたデータの受信を証明するために、証明トランザクションをブロックチェーンに提出し得る。
【0015】
いくつかの実施形態では、ターゲットデータは、暗号化されて要求ノードに伝送される前に、1つまたは複数のチャンクへと分割される。要求ノードへの各データチャンクの送信は、ブロックチェーン上で証明され得る。
【0016】
したがって、(暗号化された)ターゲットデータの送信は(証明トランザクションの形式で)ブロックチェーンに記録され、これは、関与する各ノードの識別情報がブロックチェーンに変更不可能に記録されるので、データ伝送プロセスのセキュリティを改善する。言い換えると、ターゲットデータが何に由来するか、およびそれが要求ノードまでどのように伝わったかの、明確で恒久的な記録がある。要求ノードからターゲットノードへの要求の伝送も、ブロックチェーンに記録され得る(またはブロックチェーン上で少なくとも証明され得る)。
【0017】
本明細書では、「P2Pネットワーク」へのあらゆる言及は、ブロックチェーンネットワーク以外のP2Pネットワーク、たとえば一般的なP2Pコンピュータネットワークを意味するものとして理解されるべきであることに留意されたい。P2Pノードへのあらゆる言及は、P2Pネットワークのノードを意味するものとして理解されるべきである。
【0018】
本開示の実施形態の理解を助け、そのような実施形態がどのように具体化され得るかを示すために、単なる例として、添付の図面が参照される。
【図面の簡単な説明】
【0019】
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
図2】ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す図である。
図3A】クライアントアプリケーションの概略ブロック図である。
図3B図3Aのクライアントアプリケーションによって提示され得る例示的なユーザインターフェースの概略的なモックアップである。
図4】トランザクションを処理するための何らかのノードソフトウェアの概略ブロック図である。
図5】ブロックチェーンネットワークと対話するP2Pネットワークの例を概略的に示す図である。
図6】第1のノードについて利用可能な接続を第2のノードに警告するために使用される例示的なトランザクションを概略的に示す図である。
図7】第1のノードについて利用可能な接続を第2のノードに警告して第1のノードの専門を詳述するために使用される例示的なトランザクションを概略的に示す図である。
図8】第1のノードについて利用可能な接続を第2のノードに警告するために使用される別の例示的なトランザクションを概略的に示す図である。
図9】第1のノードとの接続が利用不可能であることを第2のノードに警告するために使用される例示的なトランザクションを概略的に示す図である。
図10】第1のノードとの接続を終了するために第2のノードによって使用される例示的なトランザクションを概略的に示す図である。
図11】第1のノードの専門を更新するために使用される例示的なトランザクションを概略的に示す図である。
図12】ブロックチェーンネットワークと対話するP2Pネットワークの別の例を概略的に示す図である。
図13】6つのノードをもつ有向非巡回グラフの例を示す図である。
図14】7つのノードをもち、エッジが直接のネットワーク接続を表す、例示的なP2Pネットワークを概略的に示す図である。
図15】Gnutellaプロトコルに従ったプロトコルメッセージおよびデータ伝送の例示的な流れを概略的に示す図である。
図16】3つのノードを伴うオニオンルーティングプロトコルの例を示す流れ図である。
図17】P2Pノードがデータ伝送を受信して証明トランザクションをブロックチェーンネットワークにブロードキャストすることを概略的に示す図である。
図18】要求ノードからデータ要求を転送する要求トランザクションの例示的な流れを概略的に示す図である。
図19】P2Pノードがデータ要求を転送することに対する報酬を受け取り、ターゲットノードがデータを要求ノードに伝送することを概略的に示す図である。
図20】例示的な主要求トランザクションを概略的に示す図である。
図21】例示的な副要求トランザクションを概略的に示す図である。
図22】例示的な応答トランザクションを概略的に示す図である。
図23】要求ノードから開始するデータ要求および公開鍵の例示的な流れを概略的に示す図である。
図24】データを要求ノードに伝送するための例示的なルーティングプロトコルを概略的に示す図である。
【発明を実施するための形態】
【0020】
1. 例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、パケット交換ネットワーク101、通常はインターネットなどのワイドエリアインターネットワークを備え得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピアツーピア(P2P)ネットワーク106を形成するように配置され得る複数のブロックチェーンノード104を備える。示されていないが、ブロックチェーンノード104は、準完全グラフ(near-complete graph)として構成され得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
【0021】
各ブロックチェーンノード104はピアのコンピュータ機器を備え、ノード104の異なるノードは異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、たとえば、1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)を備える処理装置、ならびに、特定用途向け集積回路(ASIC)などの他の機器を備える。各ノードはまた、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を利用する、1つまたは複数のメモリユニットを備え得る。
【0022】
ブロックチェーン150はデータのブロック151のチェーンを備え、ブロックチェーン150のそれぞれのコピーは、分散型ネットワークまたはブロックチェーンネットワーク106の中の複数のブロックチェーンノード104の各々において維持される。上で言及されたように、ブロックチェーン150のコピーを維持することは、ブロックチェーン150を完全に記憶することを必ずしも意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下で論じられる)を記憶する限り、データについて剪定され得る。チェーンの中の各ブロック151は1つまたは複数のトランザクション152を備え、この文脈におけるトランザクションはある種のデータ構造を指す。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、1つの特定のトランザクションプロトコルを全体で使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を備える。各出力は、デジタル資産の量を表す額をプロパティとして指定し、その例は、出力が暗号的にロックされる対象であるユーザ103である(アンロックされ、それにより引き換えられまたは消費されるために、そのユーザの署名または他の解を必要とする)。各入力は先行するトランザクション152の出力を指し示し、それによりトランザクションをつなぐ。
【0023】
各ブロック151はまた、ブロック151に対する逐次的な順序を定義するために、チェーンの中の以前に作成されたブロック151を指し示すブロックポインタ155を備える。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスに対する順序を定義するために、以前のトランザクションへのポインタを備える(トランザクション152のシーケンスは分岐することが許容されることに注意)。ブロック151のチェーンは、チェーンの中の最初のブロックであったジェネシスブロック(Gb)153まで戻る。チェーン150の中の初期の1つまたは複数の元のトランザクション152は、先行するトランザクションではなくジェネシスブロック153を指し示していた。
【0024】
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104に転送し、それにより、トランザクション152がネットワーク106全体に広められるようにするように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151へと組み入れられることを待機しているトランザクション152の順序付けられたセット(または「プール」)154を維持する。順序付けられたプール154はしばしば、「メムプール」と呼ばれる。本明細書では、この用語は、特定のブロックチェーン、プロトコル、またはモデルに限定するものではない。それは、ノード104が正当であるものとして受け入れた、かつ、同じ出力を消費しようとする他のトランザクションをノード104が受け入れる義務をそれについて負わない、トランザクションの順序付けられたセットを指す。
【0025】
所与の現在のトランザクション152jにおいて、その(または各)入力は、トランザクションのシーケンスの中の先行するトランザクション152iの出力を参照するポインタを備え、これは、この出力が現在のトランザクション152jにおいて引き換えられるまたは「消費される」べきであることを指定する。一般に、先行するトランザクションは、順序付けられたセット154または任意のブロック151の中の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクション152jが作成される時点で、またはネットワーク106に送信される時点ですら、必ずしも存在していなくてもよいが、現在のトランザクションが正当であるためには、先行するトランザクション152iは存在しており正当性確認されている必要がある。したがって、本明細書では「先行する」とは、ポインタによってつながれた論理的なシーケンスにおいて先行するものを指し、時系列における作成または送信の時間を必ずしも指さないので、トランザクション152i、152jが異なる順序で作成または送信されることを必ずしも排除しない(オーファントランザクションについての以下の議論を参照)。先行するトランザクション152iは、祖先トランザクションまたは前任トランザクションとして等価的に呼ばれ得る。
【0026】
現在のトランザクション152jの入力は、入力の認可、たとえば、先行するトランザクション152iの出力がロックされるユーザ103aの署名も備える。そして、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義される額を、現在のトランザクション152jの出力において定義されるような新しいユーザまたはエンティティ103bに移すことができる。いくつかの場合、トランザクション152は、複数のユーザまたはエンティティ(それらの1名は変化を与えるために元のユーザまたはエンティティ103aであり得る)の間で入力された額を分割するための複数の出力を有し得る。いくつかの場合、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額を共に集めるために複数の入力を有し、現在のトランザクションの1つまたは複数の出力に再分配し得る。
【0027】
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個人のユーザまたは組織などの関係者103が新しいトランザクション152jを制定する(手動で、または関係者によって利用される自動プロセスによってのいずれかで)ことを望むとき、制定する関係者は、そのコンピュータ端末102から受信者に新しいトランザクションを送信する。制定する関係者または受信者は最終的に、このトランザクションをネットワーク106のブロックチェーンノード104(これは今日では通常はサーバまたはデータセンターであるが、原則として他のユーザ端末であってもよい)のうちの1つまたは複数に送信する。新しいトランザクション152jを制定する関係者103が、ブロックチェーンノード104のうちの1つまたは複数にトランザクションを直接送信してもよく、いくつかの例では受信者に送信しなくてもよいことも排除されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々において適用されるブロックチェーンノードプロトコルに従って、トランザクションが正当であるかどうかを確認する。ブロックチェーンノードプロトコルは通常、新しいトランザクション152jにおける暗号署名が予想される署名と一致することをブロックチェーンノード104が確認することを必要とし、これは、トランザクション152の順序付けられたシーケンスにおける以前のトランザクション152iに依存する。そのような出力ベースのトランザクションプロトコルでは、これは、新しいトランザクション152jの入力に含まれる関係者103の暗号署名または他の認可が、新しいトランザクションが割り当てる先行するトランザクション152iの出力において定義される条件と一致することを確認することを備えてもよく、この条件は通常、新しいトランザクション152jの入力における暗号署名または他の認可が、新しいトランザクションの入力がリンクされる対象である以前のトランザクション152iの出力をアンロックすることを、少なくとも確認することを備える。この条件は、先行するトランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義され得る。代替として、それは、単にブロックチェーンノードプロトコルだけによって定められてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが正当である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106の中の1つまたは複数の他のブロックチェーンノード104に転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、新しいトランザクション152jを1つまたは複数のさらなるノード104に転送するなどする。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に広められる。
【0028】
出力ベースのモデルでは、所与の出力(たとえば、UTXO)が割り当てられる(たとえば、消費される)かどうかの定義は、それがブロックチェーンノードプロトコルに従って別の前方のトランザクション152jの入力によってまだ正当に引き換えられていないかどうかである。トランザクションが正当であるための別の条件は、それが引き換えようとする先行するトランザクション152iの出力が別のトランザクションによってまだ引き換えられていないことである。やはり、正当ではない場合、トランザクション152jは、ブロックチェーン150において広められず(不正であるとフラグを付けられて警告のために広められない限り)、または記録されない。これは、取引者が同じトランザクションの出力を1回より多く割り当てようとするような二重消費から保護する。一方、アカウントベースモデルは、アカウントの残高を維持することによって二重消費から保護する。やはり、トランザクションに定義された順序はないので、アカウントの残高は任意のある時間において単一の定義された状態を有する。
【0029】
トランザクションを正当性確認することに加えて、ブロックチェーンノード104はまた、マイニングと一般に呼ばれるプロセスにおいてトランザクションのブロックを競って最初に作成しようとし、これは「プルーフオブワーク」によって支援される。ブロックチェーンノード104において、ブロックチェーン150に記録されたブロック151にまだ現れていない新しいトランザクションが、正当なトランザクションの順序付けられたプール154に追加される。そして、ブロックチェーンノードは、暗号パズルを解こうとすることによって、トランザクション154の順序付けられたセットからトランザクション152の新しい正当なブロック151を競って組み立てる。通常、これは、「ノンス」が未処理のトランザクション154の順序付けられたプールの表現と連結されハッシュされると、ハッシュの出力が所定の条件を満たすような、ノンス値を探すことを備える。たとえば、所定の条件は、ハッシュの出力がある定義された数の先頭の0を有することであり得る。これは、1つの特定のタイプのプルーフオブワークのパズルにすぎず、他のタイプが排除されないことに留意されたい。ハッシュ関数の性質は、その入力に関して予測不可能な出力を有するというものである。したがって、この探索は、力ずくで実行することしかできないので、パズルを解こうとする各ブロックチェーンノード104において大量の処理リソースを消費する。
【0030】
パズルを解くことになる第1のブロックチェーンノード104は、これをネットワーク106に告知し、解を証明として提供し、証明は次いでネットワークの中の他のブロックチェーンノード104によって容易に確認され得る(ハッシュに対する解が与えられれば、その解によりハッシュの出力が条件を満たすようになることを確認するのは簡単である)。第1のブロックチェーンノード104は、ブロックを受け入れてプロトコルルールを施行する、合意された閾値の数の他のノード(threshold consensus of other nodes)にブロックを広める。そして、トランザクション154の順序付けられたセットは、ブロックチェーンノード104の各々によってブロックチェーン150の中の新しいブロック151として記録されるようになる。ブロックポインタ155は、チェーンの中の以前に作成されたブロック151n-1を指し示す新しいブロック151nにも割り当てられる。プルーフオブワークの解を作り出すために必要とされる、たとえばハッシュの形態の大量の努力は、ブロックチェーンプロトコルのルールに従おうとする第1のノード104の意思を示す。そのようなルールは、以前に正当性確認されたトランザクションと同じ出力を割り当てる場合(これは二重消費としても知られている)、正当であるものとしてトランザクションを受け入れないことを含む。作成されると、ブロック151を改変することはできず、それは、ブロックチェーンネットワーク106の中のブロックチェーンノード104の各々においてブロック151が認識されて維持されるからである。ブロックポインタ155はまた、ブロック151に逐次的な順序を課す。トランザクション152はネットワーク106の中の各ブロックチェーンノード104において順序付けられたブロックに記録されるので、これはトランザクションの変更不可能な公開台帳になる。
【0031】
任意の所与の時間においてパズルを競って解く異なるブロックチェーンノード104は、解の探索をいつ開始したか、またはトランザクションが受信された順序に応じて、任意の所与の時間においてまだ公開されていないトランザクション154のプールの異なるスナップショットに基づいて、それを行い得ることに留意されたい。それぞれのパズルを最初に解いた者が、どのトランザクション152が次の新しいブロック151nに含まれてどの順序で含まれるかを定義し、公開されていないトランザクションの現在のプール154が更新される。次いで、ブロックチェーンノード104は、公開されていないトランザクション154の新しく定義された順序付けられたプールからブロックを競って作成し続けるなどする。生じ得るあらゆる「フォーク」を解くためのプロトコルも存在し、これは、2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解き、ブロックチェーンの矛盾する見方がノード104間で広められるような状況である。つまり、フォークの枝が最も長くなったものが、最終的なブロックチェーン150になる。同じトランザクションが両方のフォークに現れるので、これはネットワークのユーザまたはエージェントに影響しないはずであることに留意されたい。
【0032】
ビットコインブロックチェーン(および大半の他のブロックチェーン)に従うと、新しいブロック104を構築することに成功するノードは、追加の定められた量のデジタル資産を分配する新しい特別な種類のトランザクション(あるエージェントまたはユーザから別の者にある額のデジタル資産を移すエージェント間またはユーザ間トランザクションではなく)において、追加の受け入れられる額のデジタル資産を新しく割り当てるための能力を与えられる。この特別なタイプのトランザクションは通常、「コインベーストランザクション」と呼ばれるが、「初期トランザクション」または「生成トランザクション」とも名付けられ得る。それは、通常は新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、この特別なトランザクションが後で引き換えられることを可能にするプロトコルルールに従おうという、新しいブロックを構築するノードの意思を示す。ブロックチェーンプロトコルルールは、この特別なトランザクションが引き換えられるようになるまでに、成熟期間、たとえば100ブロックを必要とし得る。しばしば、普通の(非生成)トランザクション152は、そのトランザクションがその中で公開されるブロック151nを作成したブロックチェーンノード104にさらに報いるために、その出力の1つにおいて追加のトランザクションフィーも指定する。このフィーは通常、「トランザクションフィー」と呼ばれ、以下で論じられる。
【0033】
トランザクションの正当性確認および公開に関与するリソースにより、通常はブロックチェーンノード104の少なくとも各々が、1つまたは複数の物理的なサーバユニットを備えるサーバ、またはデータセンター全体という形態すらもとる。しかしながら、原則として、任意の所与のブロックチェーンノード104は、ユーザ端末、または共にネットワーク接続されるユーザ端末のグループの形態をとり得る。
【0034】
各ブロックチェーンノード104のメモリは、それぞれの役割を実行してブロックチェーンノードプロトコルに従ってトランザクション152を扱うために、ブロックチェーンノード104の処理装置上で実行するように構成されるソフトウェアを記憶する。本明細書でブロックチェーンノード104に帰されるあらゆるアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行されてもよいことが理解されるだろう。ノードソフトウェアは、アプリケーションレイヤにおける1つまたは複数のアプリケーション、またはオペレーティングシステムレイヤもしくはプロトコルレイヤなどのより下のレイヤ、またはこれらの任意の組合せにおいて実装され得る。
【0035】
消費するユーザの役割を果たす複数の関係者103の各々のコンピュータ機器102も、ネットワーク101に接続される。これらのユーザは、ブロックチェーンネットワーク106と対話し得るが、トランザクションを正当性確認することまたはブロックを構築することに参加しない。これらのユーザまたはエージェント103の一部は、トランザクションにおいて送信者および受信者として振る舞い得る。他のユーザは、送信者または受信者として必ずしも振る舞わずにブロックチェーン150と対話し得る。たとえば、一部の関係者は、ブロックチェーン150のコピーを記憶する(たとえば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)記憶エンティティとして振る舞い得る。
【0036】
関係者103の一部またはすべてが、異なるネットワーク、たとえばブロックチェーンネットワーク106に重畳されるネットワークの一部として接続され得る。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれることが多い)は、ブロックチェーンネットワーク106を含むシステムの一部であると言われることがあるが、これらのユーザは、ブロックチェーンノードに必要とされる役割を実行しないので、ブロックチェーンノード104ではない。代わりに、各関係者103は、ブロックチェーンネットワーク106と対話し、それにより、ブロックチェーンノード106に接続する(すなわち、それと通信する)ことによってブロックチェーン150を利用し得る。2名の関係者103およびそれらのそれぞれの機器102、すなわち、第1の関係者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の関係者103bおよびそのそれぞれのコンピュータ機器102bが、例示を目的に示されている。より多くのそのような関係者103およびそのそれぞれのコンピュータ機器102がシステム100に存在して参加していてもよいが、便宜的に示されていないことが理解されるだろう。各参加者103は、個人または組織であり得る。単なる例示として、第1の関係者103aは本明細書ではAliceと呼ばれ、第2の関係者103bはBobと呼ばれるが、これは限定するものではなく、AliceまたはBobへの本明細書でのあらゆる言及は、それぞれ「第1の関係者」および「第2の関係者」で置き換えられ得ることが理解されるだろう。
【0037】
各関係者103のコンピュータ機器102は、1つまたは複数のプロセッサ、たとえば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを備える、それぞれの処理装置を備える。各関係者103のコンピュータ機器102はさらに、メモリ、すなわち、非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。このメモリは、1つまたは複数のメモリ媒体、たとえば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリ、もしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光媒体を利用する、1つまたは複数のメモリユニットを備え得る。各関係者103のコンピュータ機器102のメモリは、処理装置上で実行されるように配置される少なくとも1つのクライアントアプリケーション105のそれぞれの実体を備えるソフトウェアを記憶する。所与の関係者103に本明細書では帰されるあらゆるアクションが、それぞれのコンピュータ機器102の処理装置で実行されるソフトウェアを使用して実行され得ることが理解されるだろう。各関係者103のコンピュータ機器102は、少なくとも1つのユーザ端末、たとえば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを備える。所与の関係者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの、1つまたは複数の他のネットワーク接続されたリソースを備え得る。
【0038】
クライアントアプリケーション105は最初に、適切なコンピュータ可読記憶媒体上で任意の所与の関係者103のコンピュータ機器102に提供され、たとえば、サーバからダウンロードされ、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどの、リムーバブル記憶デバイスで提供されてもよい。
【0039】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これには2つの主要な機能がある。これらの一方は、それぞれの関係者103が、トランザクション152を作成し、認可し(たとえば署名し)、1つまたは複数のビットコインノード104に送信して、トランザクション152がブロックチェーンノード104のネットワーク全体に広められ、それによりブロックチェーン150に含まれるようにすることを可能にすることである。他方は、それぞれの関係者が現在所有するデジタル資産の額をそれぞれの関係者に報告することである。出力ベースのシステムでは、第2の機能は、対象の関係者に属する、ブロックチェーン150全体に散在した様々なトランザクション152の出力において定義される額を照合することを備える。
【0040】
注意:様々なクライアント機能は、所与のクライアントアプリケーション105へと統合されるものとして説明されることがあるが、これは必ずしも限定するものではなく、本明細書で説明されるあらゆるクライアント機能は代わりに、たとえばAPIを介してインターフェースする、または一方が他方へのプラグインである、2つ以上の別個のアプリケーションのスイートで実装されてもよい。より一般的には、クライアント機能は、アプリケーションレイヤ、オペレーティングシステムなどのより下のレイヤ、またはこれらの任意の組合せにおいて実装され得る。以下は、クライアントアプリケーション105に関して説明されるが、これは限定するものではないことが理解されるだろう。
【0041】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105の実体は、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作可能に結合される。これは、クライアント105のウォレット機能がトランザクション152をネットワーク106に送信することを可能にする。クライアント105は、それぞれの関係者103がその受信者であるあらゆるトランザクションについてブロックチェーン150に尋ねるために(または、実施形態において、ブロックチェーン150が、一部には公に見えていることによりトランザクションに信用をもたらす公的な機関であるので、ブロックチェーン150における他の関係者のトランザクションを実際に調査するために)、ブロックチェーンノード104に連絡することも可能である。各コンピュータ機器102のウォレット機能は、トランザクションプロトコルに従ってトランザクション152を編成して送信するように構成される。上で述べられたように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従ってトランザクション152を正当性確認し、ブロックチェーンネットワーク106全体にトランザクション152を広めるためにトランザクション152を転送するように構成される、ソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルに付随し、所与のトランザクションモデルを共に実装する。ブロックチェーン150の中のすべてのトランザクション152に同じトランザクションプロトコルが使用される。同じノードプロトコルは、ネットワーク106の中のすべてのノード104によって使用される。
【0042】
所与の関係者103、たとえばAliceが、ブロックチェーン150に含められるように新しいトランザクション152jを送信することを望むとき、Aliceは関連するトランザクションプロトコルに従って(Aliceのクライアントアプリケーション105のウォレット機能を使用して)新しいトランザクションを編成する。Aliceは次いで、クライアントアプリケーション105から、Aliceが接続されている1つまたは複数のブロックチェーンノード104に、トランザクション152を送信する。たとえば、これは、Aliceのコンピュータ102に最良に接続されるブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信するとき、ブロックチェーンノード104は、ブロックチェーンノードプロトコルおよびそのそれぞれの役割に従ってトランザクション152jを扱う。これは、新しく受信されたトランザクション152jが「正当である」ためのある条件を満たすかどうかをまず確認することを備え、この例がまもなく詳しく論じられる。いくつかのトランザクションプロトコルでは、正当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替として、条件は単に、ノードプロトコルの内蔵機能であってもよく、またはスクリプトとノードプロトコルの組合せによって定義されてもよい。
【0043】
新しく受信されたトランザクション152jが正当であると見なされるための(すなわち、それが「正当性確認される」条件についての)テストに合格することを条件に、トランザクション152jを受信するあらゆるブロックチェーンノード104が、そのブロックチェーンノード104において維持されるトランザクション154の順序付けられたセットに新しく正当性確認されたトランザクション152を追加する。さらに、トランザクション152jを受信するあらゆるブロックチェーンノード104が、正当性確認されたトランザクション152を、ネットワーク106内の1つまたは複数の他のブロックチェーンノード104へ前方に広める。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが正当であると仮定すると、これは、トランザクション152jがネットワーク106全体にまもなく広められることを意味する。
【0044】
所与のブロックチェーンノード104において維持される未処理のトランザクション154の順序付けられたプールに入ることを認められると、そのブロックチェーンノード104は、新しいトランザクション152を含むそれぞれのプール154の最新のバージョンについてプルーフオブワークのパズルを競って解き始める(他のブロックチェーンノード104はトランザクション154の異なるプールに基づいてパズルを解こうとしていることがあるが、最初に解いた者が最新のブロック151に含まれるトランザクションのセットを定義することを思い出されたい。最終的に、ブロックチェーンノード104は、Aliceのトランザクション152jを含む順序付けられたプール154の部分に対するパズルを解く)。新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは変更不可能に、ブロックチェーン150の中のブロック151の1つの一部になる。各トランザクション152は、より早いトランザクションへのポインタを備えるので、トランザクションの順序も変更不可能に記録される。
【0045】
異なるブロックチェーンノード104は、所与のトランザクションの異なる実例を最初に受信するので、ある実例が新しいブロック151において公開される前にはどの実例が「正当」であるかについての矛盾する見方を有することがあり、その公開の時点では、すべてのブロックチェーンノード104が、公開された実例が唯一の正当な実例であることに合意する。ブロックチェーンノード104がある実例を正当であるものとして受け入れ、ブロックチェーン150に第2の実例が記録されていることを発見する場合、そのブロックチェーンノード104はこれを受け入れなければならず、それが最初に受け入れた実例(すなわち、ブロック151において公開されていないもの)を廃棄する(すなわち、不正として扱う)。
【0046】
一部のブロックチェーンネットワークによって運用される代替のタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」のプロトコルと呼ばれ得る。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスの中の先行するトランザクションのUTXOを参照することによってではなく、絶対的なアカウントの残高を参照することによって、移されるべき額を定義する。すべてのアカウントの現在の状態は、そのネットワークのノードによって、ブロックチェーンに別々に記憶され、常に更新される。そのようなシステムでは、トランザクションは、アカウントのトランザクション実行記録(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者の暗号署名の一部として送信者によって署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドは、署名されたトランザクションでもあり得る。このデータフィールドは、たとえば以前のトランザクションIDがこのデータフィールドに含まれる場合、以前のトランザクションを指し示し得る。
【0047】
2. UTXOベースモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と省略される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151が1つまたは複数のトランザクション152を備える)。以下は、出力ベースまたは「UTXO」ベースプロトコルを参照して説明される。しかしながら、これはすべての可能な実施形態に対する制限ではない。例示的なUTXOベースプロトコルはビットコインを参照して説明されるが、それは他の例示的なブロックチェーンネットワーク上で等しく実装され得ることに留意されたい。
【0048】
UTXOベースモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を備えるデータ構造を備える。各出力203は未消費トランザクション出力(UTXO)を備えてもよく、これは、別の新しいトランザクションの入力202のためのソースとして使用され得る(UTXOがまだ引き換えられていない場合)。UTXOはデジタル資産の額を指定する値を含む。これは、分散型台帳上の設定された数のトークンを表す。UTXOはまた、情報の中でもとりわけ、それが由来するトランザクションのトランザクションIDを含み得る。トランザクションデータ構造はヘッダ201も備えてもよく、これは、入力フィールド202および出力フィールド203のサイズを示すものを備えてもよい。ヘッダ201はまた、トランザクションのIDを含んでもよい。実施形態では、トランザクションIDは、トランザクションデータのハッシュ(トランザクションID自体を除く)であり、ノード104に提出される生のトランザクション152のヘッダ201に記憶される。
【0049】
Alice103aが、対象のデジタル資産の額をBob103bに移すトランザクション152jを作成することを望んでいるとする。図2では、Aliceの新しいトランザクション152jは「Tx1」と標識される。それは、シーケンスの中の先行するトランザクション152iの出力203においてAliceにロックされるデジタル資産の額をもち、この少なくとも一部をBobに移す。先行するトランザクション152iは図2では「Tx0」と標識される。Tx0およびTx1は恣意的なラベルにすぎない。それらは、Tx0がブロックチェーン151において最初のトランザクションであることも、Tx1がプール154において直後のトランザクションであることも必ずしも意味しない。Tx1は、Aliceにロックされた未消費の出力203をまだ有する任意の先行する(すなわち、祖先)トランザクションを指し示し得る。
【0050】
Aliceが新しいトランザクションTx1を作成するときには、または少なくとも、Aliceがそれをネットワーク106に送信するまでには、その時点で先行するトランザクションTx0はすでに正当性確認されており、ブロックチェーン150のブロック151に含められていることがある。それは、その時点でブロック151の1つにすでに含められていることがあり、または、順序付けられたセット154においてまだ待機していることがあり、その場合、それは新しいブロック151にまもなく含められる。代替として、Tx0およびTx1は、作成されてネットワーク106に共に送信されてもよく、または、ノードプロトコルが「オーファン」トランザクションのバッファリングを許容する場合、Tx0がTx1の後に送信されることすらあってもよい。トランザクションのシーケンスの文脈において本明細書で使用されるような「先行する」および「後続の」という用語は、トランザクションにおいて指定されるトランザクションポインタによって定義されるようなシーケンスにおけるトランザクションの順序を指す(どのトランザクションがどの他のトランザクションを指し示すかなど)。それらは、「前任者」および「後任者」、または「祖先」および「子孫」、「親」および「子」などで等しく置き換えられ得る。それは、それらが作成される順序、ネットワーク106に送信される順序、または任意の所与のブロックチェーンノード104に到達する順序を必ずしも示唆しない。それでも、先行するトランザクション(祖先トランザクションまたは「親」)を指し示す後続のトランザクション(子孫トランザクションまたは「子」)は、親トランザクションが正当性確認されるまで、かつそうされない限り、正当性確認されない。その親より前にブロックチェーンノード104に到達する子は、オーファンであると見なされる。それは、ノードプロトコルおよび/またはノード挙動に応じて、廃棄されてもよく、または親を待機するためにある期間バッファリングされてもよい。
【0051】
先行するトランザクションTx0の1つまたは複数の出力203の1つは、UTXO0とここでは標識される特定のUTXOを備える。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、後続のトランザクションが正当性確認されるために、したがってUTXOの引き換えが成功するために、後続のトランザクションの入力202の中のアンロッキングスクリプトによって満たされなければならない条件を定義する、ロッキングスクリプトとを備える。通常、ロッキングスクリプトは、その額を特定の関係者(ロッキングスクリプトが含まれるトランザクションの受取人)にロックする。すなわち、ロッキングスクリプトはアンロッキング条件を定義し、これは通常、後続のトランザクションの入力の中のアンロッキングスクリプトが、先行するトランザクションがロックされる先の関係者の暗号署名を備えるという条件を備える。
【0052】
ロッキングスクリプト(scriptPubKeyとしても知られている)は、ノードプロトコルによって認識される分野固有の言語によって書かれるコードである。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「Script」(大文字のS)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を消費するためにどのような情報が必要とされるか、たとえば、Aliceの署名の要件を指定する。アンロッキングスクリプトは、トランザクションの出力に現れる。アンロッキングスクリプト(scriptSigとしても知られている)は、ロッキングスクリプト基準を満たすために必要とされる情報を提供する分野固有の言語で書かれたコードである。たとえば、それはBobの署名を含み得る。アンロッキングスクリプトは、トランザクションの入力202に現れる。
【0053】
よって、示される例では、Tx0の出力203の中のUTXO0はロッキングスクリプト[Checksig PA]を備え、これは、UTXO0が引き換えられるために(厳密には、UTXO0を引き換えることを試みる後続のトランザクションが正当であるために)、Aliceの署名Sig PAを必要とする。[Checksig PA]は、Aliceの公開鍵-秘密鍵ペアからの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、Tx1を指し示す(たとえば、トランザクションID TxID0によって指し示す、ここで、実施形態ではTxID0はトランザクションTx0全体のハッシュである)ポインタを備える。Tx1の入力202は、Tx0のあらゆる他のあり得る出力の中からUTXO0を特定するために、Tx0内のUTXO0を特定するインデックスを備える。Tx1の入力202はさらにアンロッキングスクリプト<Sig PA>を備え、これは、Aliceが鍵のペアからの自分の秘密鍵をデータのあらかじめ定められた部分(暗号学では「メッセージ」と呼ばれることがある)に適用することによって作成される、Aliceの暗号署名を備える。正当な署名を提供するためにAliceによって署名される必要のあるデータ(または「メッセージ」)は、ロッキングスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
【0054】
新しいトランザクションTx1がブロックチェーンノード104に到達すると、そのノードはノードプロトコルを適用する。これは、アンロッキングスクリプトがロッキングスクリプトにおいて定義される条件(ここで、この条件は1つまたは複数の基準を備え得る)を満たすかどうかを確認するために、ロッキングスクリプトとアンロッキングスクリプトを共に実行することを備える。実施形態では、これは2つのスクリプトを連結することを伴う。
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、「<…>」はスタックにデータを置くことを意味し、「[…]」はロッキングスクリプトが含む機能(この例ではスタックベースの言語)である。等価的に、スクリプトは、スクリプトを連結するのではなく、共通のスタックを用いて次々に実行されてもよい。いずれにしても、共に実行されると、これらのスクリプトは、Tx0の出力の中のロッキングスクリプトに含まれるようなAliceの公開鍵PAを使用して、Tx1の入力の中のアンロッキングスクリプトがデータの予想される部分に署名するAliceの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)も、この認証を実行するために含まれる必要がある。実施形態では、署名されたデータはTx1の全体を備える(よって、データの署名された部分を平文で指定する別個の要素は、本質的にすでに存在しているので、含まれる必要はない)。
【0055】
公開-秘密暗号による認証の詳細は、当業者に馴染みがある。基本的に、Aliceが自分の秘密鍵を使用してメッセージを署名している場合、Aliceの公開鍵と平文と平文のメッセージがあれば、ノード104などの別のエンティティが、メッセージがAliceによって署名されたに違いないと認証することが可能である。署名は通常、メッセージをハッシュすること、ハッシュに署名すること、およびこれを署名としてメッセージにタグ付けして、それにより公開鍵のあらゆる保有者が署名を認証することを可能にすることを備える。したがって、特定のデータまたはトランザクションの部分などに署名することへの本明細書におけるあらゆる言及は、実施形態において、そのデータまたはトランザクションの部分のハッシュに署名することを意味し得ることに留意されたい。
【0056】
Tx1におけるアンロッキングスクリプトがTx0のロッキングスクリプトにおいて指定される1つまたは複数の条件を満たす場合(よって示される例では、Aliceの署名がTx1において提供されて認証される)、ブロックチェーンノード104はTx1を正当であると見なす。これは、ブロックチェーンノード104がTx1を未処理のトランザクション154の順序付けられたプールに追加することを意味する。ブロックチェーンノード104はまた、トランザクションTx1をネットワーク106内の1つまたは複数の他のブロックチェーンノード104に転送するので、トランザクションTx1はネットワーク106全体に広められる。Tx1が正当性確認されてブロックチェーン150に含められると、これはTx0からのUTXO0を消費されたものとして定義する。Tx1は、それが未消費トランザクション出力203を消費する場合にのみ、正当であり得ることに留意されたい。Tx1が別のトランザクション152によってすでに消費されている出力を消費しようとする場合、Tx1はすべての他の条件が満たされる場合でも不正である。したがって、ブロックチェーンノード104はまた、先行するトランザクションTx0における参照されるUTXOがすでに消費されているかどうか(すなわち、それが別の正当なトランザクションへの正当な入力をすでに形成したかどうか)を確認する必要もある。これは、トランザクション152に定められた順序を課すことがブロックチェーン150にとって重要である1つの理由である。実際には、所与のブロックチェーンノード104は、トランザクション152がどのUTXO203で消費されたかをマークする別個のデータベースを維持し得るが、UTXOが消費されたかどうかを最終的に定義するものは、それがブロックチェーン150において別の正当なトランザクションへの正当な入力をすでに形成しているかどうかである。
【0057】
所与のトランザクション152のすべての出力203において指定される総額がすべてのその入力202によって指し示される総額より大きい場合、これは、大半のトランザクションモデルにおいて無効性の別の根拠になる。したがって、そのようなトランザクションは、ブロック151において広められることも含められることもない。
【0058】
UTXOベースのトランザクションモデルでは、所与のUTXOは全体として消費される必要があることに留意されたい。UTXOにおいて定義される額の一部が未消費として「置き去りにされる」一方で、別の一部が消費されることはない。しかしながら、UTXOからの額は、次のトランザクションの複数の出力の間で分割され得る。たとえば、Tx0の中のUTXO0において定義される額は、Tx1において複数のUTXOの間で分割され得る。したがって、AliceがUTXO0において定義される額のすべてをBobに与えたくない場合、Aliceは、リマインダーを使用して、Tx1の第2の出力において自分自身に釣銭を与え、または別の関係者に支払うことができる。
【0059】
実際には、Aliceは通常、ブロック151に自分のトランザクション104を含めることに成功するビットコインノード104のためのフィーを含める必要もある。Aliceがそのようなフィーを含めない場合、Tx0はブロックチェーンノード104によって拒否され得るので、技術的に正当であっても、ブロックチェーン150において広められず、含められないことがある(ノードプロトコルは、ブロックチェーンノード104が望まない場合、トランザクション152を受け入れることを強いない)。いくつかのプロトコルでは、トランザクションフィーは、固有の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力202によって指し示される総額と出力203において指定される総額とのあらゆる差が、トランザクションを発行するブロックチェーンノード104に自動的に与えられる。たとえば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1が1つだけの出力UTXO1を有するとする。UTXO0において指定されるデジタル資産の額がUTXO1において指定される額より大きい場合、UTXO1を含むブロックを作成するためのプルーフオブワークの競争に勝つノード104によって差が割り当てられ得る。しかしながら、代替または追加として、トランザクションフィーがトランザクション152のUTXO203のうちの固有の1つにおいて明確に指定され得ることも必ずしも排除されない。
【0060】
AliceとBobのデジタル資産は、ブロックチェーン150の中の任意の場所の任意のトランザクション152において彼らにロックされたUTXOからなる。したがって、通常は、所与の関係者103の資産は、ブロックチェーン150全体の様々なトランザクション152のUTXO全体に散在する。所与の関係者103の全体の残高を定義する1つの数字が、ブロックチェーン150のどこかに記憶されることはない。それぞれの関係者にロックされ、別の前方のトランザクションにおいてまだ消費されていないすべての様々なUTXOの値を共に照合することが、クライアントアプリケーション105のウォレット機能の役割である。ウォレット機能は、ビットコインノード104のいずれかに記憶されているようなブロックチェーン150のコピーをクエリすることによってこれを行うことができる。
【0061】
スクリプトコードは、しばしば概略的に表される(すなわち、厳密な言語を使用しない)ことに留意されたい。たとえば、特定の機能を表すために、オペレーションコード(オペコード)を使用することがある。「OP_...」はScript言語の特定のオペコードを指す。例として、OP_RETURNは、ロッキングスクリプトの最初においてOP_FALSEが前にあるときに、トランザクション内のデータを記憶できるトランザクションの消費不可能な出力を作成し、それによりブロックチェーン150に変更不可能にデータを記録するような、Script言語のオペコードである。たとえば、データは、ブロックチェーンに記憶することが望まれる文書を備え得る。
【0062】
通常、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は特定のデータに署名する。いくつかの実施形態では、所与のトランザクションに対して、署名は、トランザクション入力の一部、およびトランザクション出力の一部またはすべてに署名する。デジタル署名が署名する出力の具体的な部分は、SIGHASHフラグに依存する。SIGHASHフラグは通常、どの出力が署名されるかを選択するための(したがって署名の時点で固定される)、署名の最後に含まれる4バイトコードである。
【0063】
ロッキングスクリプトは「scriptPubKey」と呼ばれることがあり、これは、それぞれのトランザクションがロックされる先の関係者の公開鍵をロッキングスクリプトが通常は備えるという事実に関連している。アンロッキングスクリプトは「scriptSig」と呼ばれることがあり、これは、アンロッキングスクリプトが対応する署名を通常は供給するという事実に関連している。しかしながら、より一般的には、UTXOが引き換えられるための条件が署名を認証することを含むことは、ブロックチェーン150のすべての適用例において必須ではない。より一般的には、スクリプティング言語は、任意の1つまたは複数の条件を定義するために使用され得る。したがって、より一般的な用語「ロッキングスクリプト」および「アンロッキングスクリプト」が好まれ得る。
【0064】
3. サイドチャネル
図1に示されるように、Aliceのコンピュータ機器102aおよびBobのコンピュータ機器102bの各々のクライアントアプリケーションは、追加の通信機能を備え得る。この追加の機能は、Alice103aが(関係者または第三者のいずれかの教唆により)Bob103bとの別個のサイドチャネル107を確立することを可能にする。サイドチャネル107は、ブロックチェーンネットワークとは別個にデータの交換を可能にする。そのような通信は、「オフチェーン」通信と呼ばれることがある。たとえば、これは、AliceとBobの一方がAliceとBobとの間のトランザクション152をネットワーク106にブロードキャストすることを選ぶまで、トランザクション152が(まだ)ブロックチェーンネットワーク106に登録されることなく、またはチェーン150に進入することなく、トランザクション152を交換するために使用され得る。このようにトランザクションを共有することは、「トランザクションテンプレート」の共有と呼ばれることがある。トランザクションテンプレートは、完全なトランザクションを形成するために必要とされる1つまたは複数の入力および/または出力を欠いていることがある。代替または追加として、サイドチャネル107は、鍵、交渉される額または条項、データコンテンツなどの、任意の他のトランザクション関連データを交換するために使用され得る。
【0065】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替または追加として、サイドチャネル301は、モバイルセルラーネットワークなどの異なるネットワーク、またはローカルワイヤレスネットワークなどのローカルエリアネットワーク、またはさらにはAliceのデバイス102aとBobのデバイス102bの間の直接の有線もしくはワイヤレスリンクなどを介して確立され得る。一般に、本明細書の任意の箇所で言及されるサイドチャネル107は、「オフチェーン」で、すなわちブロックチェーンネットワーク106とは別個にデータを交換するための1つまたは複数のネットワーキング技術または通信媒体を介した、任意の1つまたは複数のリンクを備え得る。1つより多くのリンクが使用される場合、オフチェーンリンクの束または集合体は全体として、サイドチャネル107と呼ばれ得る。したがって、AliceとBobがサイドチャネル107を介してある情報またはデータなどを交換すると言われる場合、これは、すべてのこれらのデータが厳密に同じリンクを介して送信されなければならないこと、または同じタイプネットワークを送信されなければならないことすらも、必ずしも示唆しないことに留意されたい。
【0066】
4. クライアントソフトウェア
図3Aは、ここで開示される方式の実施形態を実装するためのクライアントアプリケーション105の例示的な実装形態を示す。クライアントアプリケーション105は、トランザクションエンジン401およびユーザインターフェース(UI)レイヤ402を備える。トランザクションエンジン401は、上で論じられた方式に従って、かつまもなくさらに詳しく論じられるように、トランザクション152を編成すること、サイドチャネル301を介してトランザクションおよび/もしくは他のデータを受信および/もしくは送信すること、ならびに/またはブロックチェーンネットワーク106を通じて広められるようにトランザクションを1つまたは複数のノード104に送信することなどの、クライアント105の土台のトランザクション関連機能を実装するように構成される。
【0067】
UIレイヤ402は、機器102のユーザ出力手段を介して情報をそれぞれのユーザ103に出力すること、および機器102のユーザ入力手段を介して入力をそれぞれのユーザ103から受け取ることを含む、それぞれのユーザのコンピュータ機器102のユーザ入力/出力(I/O)手段を介してユーザインターフェースをレンダリングするように構成される。たとえば、ユーザ出力手段は、視覚的な出力を提供するための1つまたは複数の表示画面(タッチスクリーンまたは非タッチスクリーン)、オーディオ出力を提供するための1つまたは複数のスピーカー、および/または、触覚出力を提供するための1つまたは複数の触覚出力デバイスなどを備え得る。ユーザ入力手段は、たとえば、1つまたは複数のタッチスクリーンの入力アレイ(出力手段のために使用されるものと同じまたは異なる)、マウス、トラックパッド、もしくはトラックボールなどの1つまたは複数のカーソルベースのデバイス、発話もしくは音声入力を受け取るための1つまたは複数のマイクロフォンおよび発話もしくは音声認識アルゴリズム、手もしくは体のジェスチャの形式の入力を受け取るための1つまたは複数のジェスチャベース入力デバイス、または、1つまたは複数の機械的なボタン、スイッチ、もしくはジョイスティックなどを備え得る。
【0068】
注意:本明細書の様々な機能は同じクライアントアプリケーション105へと統合されるものとして説明され得るが、これは必ずしも限定するものではなく、代わりに、それらは2つ以上の別個のアプリケーションのスイートとして実装されてもよく、たとえば一方が他方へのプラグインであり、またはAPI(アプリケーションプログラミングインターフェース)を介してインターフェースする。たとえば、トランザクションエンジン401の機能は、UIレイヤ402とは別のアプリケーションにおいて実装されてもよく、または、トランザクションエンジン401などの所与のモジュールの機能は、1つより多くのアプリケーション間で分割されてもよい。説明される機能の一部またはすべてが、たとえばオペレーティングシステムレイヤにおいて実装され得ることも排除されない。本明細書の任意の箇所で単一または所与のアプリケーション105などへの言及が行われる場合、これは例にすぎず、より一般的には、説明される機能は任意の形態のソフトウェアで実装され得ることが理解されるだろう。
【0069】
図3Bは、Aliceの機器102aのクライアントアプリケーション105aのユーザインターフェース(UI)レイヤ402によってレンダリングされ得るUI500の例のモックアップを与える。同様のUIは、Bobの機器102b上または任意の他の関係者の機器のクライアント105bによってレンダリングされ得ることが、理解されるだろう。
【0070】
例示として、図3Bは、Aliceの観点からのUI500を示す。UI500は、ユーザ出力手段を介して別個のUI要素としてレンダリングされる1つまたは複数のUI要素501、502、503を備え得る。
【0071】
たとえば、UI要素は、異なる画面上のボタン、またはメニューの中の異なるオプションなどであり得る、1つまたは複数のユーザ選択可能要素501を備え得る。ユーザ入力手段は、UI要素を画面上でクリックもしくはタッチすること、または所望のオプションの名前を話すことなどによって、ユーザ103(この場合はAlice103a)がオプションの1つを選択すること、または別様に動作させることを可能にするように配置される(本明細書で使用される「手動」という用語は、自動と対比することのみが意図され、手の使用に必ずしも限定されないことに注意)。
【0072】
代替または追加として、UI要素は1つまたは複数のデータエントリフィールド502を備え得る。これらのデータエントリフィールドは、ユーザ出力手段を介して、たとえば画面上でレンダリングされ、データは、ユーザ入力手段、たとえばキーボードまたはタッチスクリーンを通じてフィールドに入力され得る。代替として、データは、たとえば発話認識に基づいて口頭で受け取られ得る。
【0073】
代替または追加として、UI要素は、情報をユーザに出力するために、1つまたは複数の情報要素503の出力を備え得る。たとえば、これ/これらは画面上でまたは音声でレンダリングされ得る。
【0074】
様々なUI要素をレンダリングし、オプションを選択し、データを入力する具体的な手段は、不可欠ではないことが理解されるだろう。これらのUI要素の機能はまもなくより詳しく論じられる。図3に示されるUI500は、概略的なモックアップにすぎず、実際には、簡潔にするために示されていない1つまたは複数のさらなるUI要素を備えてもよいことも、理解されるだろう。
【0075】
5. ノードソフトウェア
図4は、UTXOベースモデルまたは出力ベースモデルの例における、ネットワーク106の各ブロックチェーンノード104上で実行されるノードソフトウェア450の例を示す。別のエンティティは、ネットワーク106上でノード104として分類されることなく、すなわち、ノード104について必要とされるアクションを実行することなく、ノードソフトウェア450を実行し得ることに留意されたい。ノードソフトウェア450は、限定はされないが、プロトコルエンジン451、スクリプトエンジン452、スタック453、アプリケーションレベル決定エンジン454、および1つまたは複数のブロックチェーン関連機能モジュール455のセットを含み得る。各ノード104は、限定はされないが、合意モジュール455C(たとえば、プルーフオブワーク)、伝播モジュール455P、および記憶モジュール455S(たとえば、データベース)の3つすべてを含む、ノードソフトウェアを実行し得る。プロトコルエンジン401は通常、トランザクション152の異なるフィールドを認識し、ノードプロトコルに従ってそれらを処理するように構成される。別の先行するトランザクション152i(Txm-1)の出力(たとえば、UTXO)を指し示す入力を有するトランザクション152j(Txj)が受信されると、プロトコルエンジン451は、Txjにおけるアンロッキングスクリプトを特定し、それをスクリプトエンジン452に渡す。プロトコルエンジン451はまた、Txjの入力におけるポインタに基づいてTxiを特定して取り出す。Txiはブロックチェーン150上で公開されてもよく、この場合、プロトコルエンジンは、ノード104に記憶されているブロックチェーン150のブロック151のコピーからTxiを取り出し得る。代替として、Txiはまだブロックチェーン150上で公開されていないことがある。その場合、プロトコルエンジン451は、ノード104によって維持されている未公開のトランザクションの順序付けられたセット154からTxiを取り出し得る。いずれにしても、スクリプトエンジン451は、Txiの参照された出力におけるロッキングスクリプトを特定し、これをスクリプトエンジン452に渡す。
【0076】
したがって、スクリプトエンジン452は、TxiのロッキングスクリプトおよびTxjの対応する入力からのアンロッキングスクリプトを有する。たとえば、Tx0およびTx1と標識されるトランザクションが図2に示されているが、同じことが任意のトランザクションの任意のペアに適用され得る。スクリプトエンジン452は、前に論じられたように2つのスクリプトを共に実行し、これは、使用されているスタックベースのスクリプティング言語(たとえば、Script)に従ってスタック453にデータを置き、それからデータを取り出すことを含む。
【0077】
スクリプトを共に実行することによって、スクリプトエンジン452は、アンロッキングスクリプトがロッキングスクリプトにおいて定義される1つまたは複数の基準を満たすかどうか、すなわち、ロッキングスクリプトが含まれる出力を「アンロックする」かどうかを決定する。スクリプトエンジン452は、この決定の結果をプロトコルエンジン451に返す。アンロッキングスクリプトが対応するロッキングスクリプトにおいて指定される1つまたは複数の基準を満たすと、スクリプトエンジン452が決定する場合、スクリプトエンジン452は結果「真」を返す。それ以外の場合、それは結果「偽」を返す。
【0078】
出力ベースモデルでは、スクリプトエンジン452からの結果「真」は、トランザクションの正当性の条件の1つである。通常、同様に満たされなければならないプロトコルエンジン451により評価される1つまたは複数のさらなるプロトコルレベル条件もあり、それはたとえば、Txjの出力において指定されるデジタル資産の総額がその入力により指し示される総額を超えないこと、およびTxjの指し示される出力が別の正当なトランザクションによりまだ消費されていないことである。プロトコルエンジン451は、1つまたは複数のプロトコルレベル条件と共にスクリプトエンジン452からの結果を評価し、それらがすべて真である場合にのみ、トランザクションTxjを正当性確認する。プロトコルエンジン451は、トランザクションが正当であるかどうかの標示をアプリケーションレベル決定エンジン454に出力する。Txjが実際に正当性確認されるという条件のもとでのみ、決定エンジン454は、Txjに関してそれぞれのブロックチェーン関連機能を実行するように合意モジュール455Cと伝播モジュール455Pの両方を制御することを選択し得る。これは、ブロック151に組み入れるためのトランザクション154のノードのそれぞれの順序付けられたセットにTxjを追加する合意モジュール455Cと、ネットワーク106の中の別のブロックチェーンノード104にTxjを転送する伝播モジュール455Pとを備える。任意選択で、実施形態では、アプリケーションレベル決定エンジン454は、これらの機能のいずれかまたは両方をトリガする前に、1つまたは複数の追加の条件を適用し得る。たとえば、決定エンジンは、トランザクションが正当であり、かつ十分なトランザクションフィーを残すという条件のもとでのみ、トランザクションを公開することを選択し得る。
【0079】
本明細書での「真」および「偽」という用語は、単一の二進の桁(ビット)の形態でのみ表される結果を返すことに必ずしも限定しないが、それは当然1つの可能な実装形態であることにも留意されたい。より一般的には、「真」は成功したまたは肯定的な結果を示すあらゆる状態を指すことができ、「偽」は失敗したまたは否定的な結果を示すあらゆる状態を指すことができる。たとえば、アカウントベースモデルでは、「真」の結果は、署名の暗黙的なプロトコルレベルの正当性確認と、スマートコントラクトの追加の肯定的な出力との組合せによって示され得る(両方の個々の結果が真である場合、全体の結果は真を示すと見なされる)。
【0080】
6. P2Pネットワーク接続
図5は、P2Pノード間の接続を形成するために使用され得る例示的なシステムを示す。システムは、ピアツーピア(P2P)ネットワーク500およびブロックチェーンネットワーク106を備える。P2Pネットワーク500は複数のノードを備え、これらは本明細書ではP2Pノードと呼ばれる。たとえば、P2Pネットワークは、第1のP2Pノード501a、第2のP2Pノード501bなどを備える。5つのP2Pノード501だけが図5に示されているが、一般に、P2Pネットワーク500は任意の数のP2Pノード501を有し得ることが理解されるだろう。本明細書では、「第1の」、「第2の」などは、文脈が別段必要としない限り、恣意的な標識として使用されるだけであり、順序を必ずしも示唆しないことに留意されたい。当業者は、P2Pネットワークの概念、すなわち、ピアが等しく優先され、ネットワークにおいて参加者が等しい力をもつような分散型ネットワークについて馴染みがあるので、P2Pネットワークがネットワークアドレスを有するということを以外に、P2Pネットワーク500自体は詳しく説明されない。ネットワークアドレスは任意の適切な形態をとり得る。たとえば、ネットワークアドレスはIPアドレスまたはドメイン名であり得る。ネットワークアドレスは、全体としてP2Pネットワークのアドレス(または識別子)であってもよく、または各P2Pノードがネットワーク上のアドレスを有してもよい。P2Pネットワーク500は、1つまたは複数の目的または用途を有し得る。たとえば、P2Pネットワークは、コンテンツもしくはファイル共有ネットワーク、または通信(たとえば、ビデオ通話)ネットワーク、クラウドコンピューティングネットワーク、リモートデスクトップネットワークなどであり得る。
【0081】
各P2Pノード501は、P2Pノード501によって実行されるものとして以下で説明されるアクションを実行するように構成されるそれぞれのコンピュータ機器で実行されるソフトウェアを含み(またはそれにより含まれ)、またはそれにおいて実装される。いくつかの実施形態では、各P2Pノード501は、図1から図3Bに関してAlice103aおよび/またはBob103bによって実行されるものとして説明されるアクションの一部またはすべてを実行するように構成され得る。各P2Pノード501は、それぞれの公開鍵を有し、すなわち対応する秘密鍵へのアクセス権を有する。
【0082】
図5に示されるように、P2Pノード501のいくつかは既存の接続を有し、これはP2Pノード501を接続する実線により示されている。たとえば、第4のP2Pノード501dおよび第5のP2Pノード501eに接続される第3のP2Pノード501cが示されている。第2のP2Pノード501bは第4のP2Pノード501dに接続される。さらなる接続が示される。第1のP2Pノードが形成することを望む接続も図に示されており、これらは第1のP2Pノード501aを他のP2Pノードに接続する破線によって示されている。たとえば、第1のP2Pノード501aは、第2のP2Pノード501bおよび第3のP2Pノード501cに接続することを望み、たとえば、これらのノードが第1のP2Pノード501aに最も近いからである。ここで、「最も近い」とは地理的な用語または他の用語であり得る。
【0083】
第2のP2Pノード501bと接続するために、第1のP2Pノード501aは第2のP2Pノード501bに関連する公開鍵を取得する。第1のP2Pノード501aは、メモリから、公にアクセス可能なリソース、たとえばウェブページもしくはブロックチェーンから、信用される機関から、またはP2Pノード501の別のノードから公開鍵を取得し得る。別の例として、第1のP2Pノード501aは、たとえばP2Pネットワークアドレスを使用して、ドメイン名システム(DNS)サービスにクエリすることによって、第2のP2Pノードの公開鍵を取得し得る。
【0084】
第1のP2Pノード501aは、ブロックチェーントランザクション(第1のトランザクションと呼ばれる)を生成するように構成される。第1のトランザクションは、第2のノードの公開鍵にロックされる第1の出力を備える。たとえば、出力はP2PKH出力であり得る。第1の出力は、P2Pが接続を形成しようとしているという事実を第2のP2Pノード501bに警告するために使用される。たとえば、第2のP2Pノード501bは、第2のP2Pノードの公開鍵にロックされる出力についてブロックチェーンを監視するウォレットアプリケーションを動作させ得る。当業者は、公開鍵に送信される「支払」を特定する他の方法について馴染みがある。第1のトランザクションはP2Pネットワークアドレスも備え、これは、第1のP2Pノード501aが第2のP2Pノード501bに接続する際に用いることを望むP2Pネットワークを特定するために使用される。ネットワークアドレスは、第1のトランザクションの第1の出力、または第2の出力の一部として含まれ得る。第2の出力は、消費不可能な出力および/またはOP_RETURN出力であり得る。第1のトランザクションは、第1のP2Pノードの公開鍵を使用して検証され得る署名で署名される。これは、どのP2Pノード501が接続を形成しようとしているかを第2のP2Pノード501bが決定することを可能にする。
【0085】
第1のP2Pノード501aは、第1のトランザクションをブロックチェーンネットワーク106に提出し、または代替として、第1のトランザクションを中間者に提出して、中間者が次いで第1のトランザクションをブロックチェーンネットワーク106に提出する。
【0086】
第2のP2Pノード501bは、第1のブロックチェーントランザクションがブロックチェーン150に出された(またはそれに記録された)と決定するように構成される。上で言及されたように、これは、第2のP2Pノード501bによって動作させられるウォレットアプリケーションによって実行され得る。または、第2のP2Pノード501は、第2のP2Pノードの公開鍵にロックされる出力を有するトランザクションについてブロックチェーン150を手動でスキャンし得る。別の例として、サービス提供者は、第2のP2Pノード501bの代わりにブロックチェーン150を監視し、第1のトランザクションが特定されるときに第2のP2Pノード501bに知らせ得る。第1のトランザクションの存在を検出したこと、または別様に特定したことに応答して、第2のP2Pノード501bは、第1のP2Pノード501aと接続するように構成される。第1のP2Pノード501aと接続することは、第2のP2Pノード501bがP2Pネットワーク500上で通信するノードのリストに、第2のP2Pノード501bが第1のP2Pノード501aを追加することを伴い得る。ここで、第1のP2Pノード501aと通信することは、第1のP2Pノード501aから入ってくるデータを受け入れ、出ていくデータを第1のP2Pノード501aに送信することを意味するものと解釈される。追加または代替として、第1のP2Pノード501と接続することは、第1のP2Pノード501aと能動的に通信すること、すなわちデータを第1のP2Pノード501aに送信することを伴い得る。
【0087】
第1のトランザクションは、第1のP2Pノード501aおよび第2のP2Pノード501bにとって有益であるだけではなく、全体としてP2Pネットワーク500にも有益である。第1のトランザクションは、他のノード501が、第1のP2Pノード501aおよび第2のP2Pノード501bが接続されていると決定することを可能にする。言い換えると、ブロックチェーン150に記録されている第1のトランザクションを見ると、P2Pネットワーク500の他のノードは、それらがそれぞれ第2のP2Pノードまたは第1のP2Pノードを介して第1のP2Pノードまたは第2のP2Pノードと通信できることを知る。これは、ノード501が他のノード501へのさらなる接続およびさらなる経路を認識するようになるので、P2Pネットワーク500の接続を改善する。
【0088】
図6は、第1のP2Pノード501aと第2のP2Pノード501bとの間の接続を示すために使用される第1のトランザクションの例を示す。第1のP2Pノード501aの署名および公開鍵は、トランザクションのアンロッキングスクリプトにおいて示される。この例では、第1の出力は第2のP2Pノード501bの公開鍵にロックされ、第2の異なる出力はP2Pネットワーク500のネットワークアドレスを備える。この例において示されるように、第1のトランザクションは、第1のP2Pノード501aの識別子を備え得る。識別子は、P2Pネットワーク上の第1のP2Pノード501aを一意に識別し、認証機関(またはP2Pネットワーク500によって信用される別の形態の機関)によって証明され得る。識別子は、第1のP2Pノードの公開鍵と対応付けられてもよく、これにより、第2のP2Pノード501bは、それが実際に第1のトランザクションを生成した第1のP2Pノード501aであることについて確信できる。この対応付けは、事前に知られていてもよく、または公にアクセス可能なリソース、たとえばウェブページもしくはブロックチェーンに記憶されていてもよい。識別子は、第1のP2Pノードの身元について信用を確立するために使用される。それは、第1のP2Pノードの公開鍵(および場合によってはその所有者についての情報)を含む証明であり得る。好ましくは、証明は第1のP2PノードのIPアドレスを含まず、それは、IPアドレスがブロックチェーン上で公開されることになり、第1のP2Pノードのコンピュータを攻撃にさらす可能性があるからである。
【0089】
上で言及されたように、第2のP2Pノードの公開鍵は、DNSサービスから取得され得る。DNSサービスにクエリしたことに応答して、第1のP2Pノード501aは、第2のP2Pノード501bの公開鍵およびインターネットプロトコル(IP)アドレスを受信し得る。第1のP2Pノード501aは、IPアドレスに基づいて第2のP2Pノード501bに接続することを選び得る。第2のP2PノードのIPアドレスは代替の方法で取得されてもよく、たとえば、それは、第1のP2Pノード501aおよび第2のP2Pノード501bとの接続をすでに確立した異なるノード501によって提供されてもよいことに留意されたい。
【0090】
第1のトランザクションを生成する前に、第1のP2Pノード501aは、第2のP2Pノード501bのIPアドレスを使用して、第2のP2Pノード501bとのインターネットハンドシェイク(たとえば、TCP3ウェイハンドシェイク)を実行し得る。これは、第1のP2Pノード501aが第2のP2Pノードの身元について信用を確立することを可能にする。第2のP2Pノード501bは、第2のP2Pノードの公開鍵に対応する署名で署名された自身のIPアドレスを第1のP2Pノード501aに送信し得る。第1のP2Pノード501aは次いで、第2のP2Pノードの公開鍵を使用して署名を検証し得る。これらの例では、署名が検証される場合にのみ、第1のP2Pノード501aは第1のトランザクションをブロックチェーンネットワーク106に提出する。
【0091】
第1のP2Pノード501aは、その専門性、たとえば能力、機能、特性などを第2のP2Pノード501bに示すために、第1のトランザクションを使用し得る。すなわち、第1のP2Pノード501aは、すべてのノードが実行できるとは言えない何らかのアクションをP2Pネットワーク500上で実行することが可能であることがあり、または、第1のP2Pノード501aは、他よりも良い何らかの動作を実行すること、または他のノードよりも良好に何らかのアクションを実行することが可能であり得る。専門性の例は、グリッドコンピューティング、マイニング、DNSノードであること、信用される機関のノードであること、ファイル共有などの能力を含む。いくつかの例では、専門性は、良い帯域幅、接続性、インターネット接続、記憶などの特性であり得る。ここで、「良い」とは、P2Pネットワークノード501の平均よりも良いことを意味するものと解釈され得る。P2Pノード501の1つまたは複数のサブセットがあってもよく、各サブセットは少なくとも1つの専門性を共通に有する。第1のトランザクションは、その各々がそれぞれの専門性を示す、1つまたは複数のフラグを含み得る。これはP2Pネットワーク500の効率を改善し、それは、第2のP2Pノード501bが、第1のP2Pノードの専門性に基づいて、何らかのタイプのデータまたは要求を第1のP2Pノード501aに送信するかどうかを知っているからである。
【0092】
図7は、専門性フラグを含む第1のトランザクションの例を示す。専門性フラグは、第1の出力または第2の出力に含まれ得る。
【0093】
任意選択で、第1のトランザクションは、第2のP2Pノードの公開鍵にロックされる第1の出力に加えて、少なくとも2つの代替のロッキング条件を含む別の消費可能な出力を含み得る。この出力は第3の出力と呼ばれるが、それは出力のリストにおいて3番目に現れる必要はない。第1のロッキング条件として、第3の出力は第1のP2Pノード501aの公開鍵にロックされ得る。第2のロッキング条件として、第3の出力は第2のP2Pノード501bの公開鍵にロックされ得る。公開鍵は、上で論じられた公開鍵と同じであっても、または異なっていてもよい。言い換えると、第1のP2Pノード501aおよび/または第2のP2Pノード501bは、1つより多くの公開鍵を有し得る。これらの例では、第3の出力が未消費であることは、第1のP2Pノード501aと第2のP2Pノード501bとの間の接続が利用可能である(すなわち、終了されない)ものとして第2のP2Pノード501bによって解釈される。第3の出力が消費されると、この接続は、たとえば第1のノード501aがオフラインになったので、この接続が終了されることとして解釈される。第3の出力が消費されたことを確認すると、第2のP2Pノード501bは第1のP2Pノード501aから切断し得る。
【0094】
第1のP2Pノード501aは、たとえば、第1のP2Pノード501aが第2のP2Pノード501bとの接続をもはや維持できない場合、第3の出力を消費する第2のトランザクションを生成し得る。第2のトランザクションは、第1のトランザクションの第3の出力を参照する入力を含み、第3の出力がロックされる先の第1のP2Pノードの公開鍵に対応する署名を含む。図9は、第2のトランザクションの例を示す。
【0095】
代替として、第2のP2Pノード501bは、たとえば、第2のP2Pノード501bが第1のP2Pノード501aとの接続をもはや維持できない場合、または、第1のP2Pノード501aが悪意をもってアクションした、もしくはP2Pネットワークのポリシーに反してアクションした場合、またはハッキングされた場合などにおいて、第3の出力を消費する第2のトランザクションを生成し得る。第1のP2Pノード501aは、少なくとも第2のP2Pノード501bの観点からはオフラインであり、いくつかの例では、他のノード、たとえば第3のP2Pノード501cとのアクティブな接続を維持し得る。第2のトランザクション信号の第3の出力の消費は、第1のP2Pノード501aがネットワークプロトコルに正しく従っていないので第2のP2Pノード501bを介して第1のP2Pノード501aと通信することが推奨されないこと、または、第1のP2Pノード501aと通信することがまったく推奨されないことを、ネットワークの他のノードに示す。第2のトランザクションは、第1のトランザクションの第3の出力を参照する入力を含み、第3の出力がロックされる先の第1のP2Pノードの公開鍵に対応する署名を含む。
【0096】
いくつかの例では、図8に示されるように、第3の出力(図8では出力のリストにおいて2番目に現れる)の第2のロッキング条件はハッシュ値を含んでもよく、第3の出力がアンロックされるには、第3の出力を消費する入力はハッシュ値の原像を含まなければならない。原像は、第3の出力をアンロックするために第2のP2Pノード501bが取得しなければならないチャレンジであり得る。たとえば、チャレンジは信用される機関から取得され得る。チャレンジデータを含む第2のP2Pノード501bによって生成される第2のトランザクションの例は、図10に示される。
【0097】
図11は、更新された専門性について第2のP2Pノードに知らせるのではなく、第1のP2Pノードの専門性を更新するために使用され得るトランザクションの例を示す。
【0098】
上記の説明は、第1のP2Pノード501aと第2のP2Pノード501bとの間の対話に注目したが、第1のP2Pノード501aは1つまたは複数の追加のP2Pノード501のために等価なアクションを実行してもよい。たとえば、図5において、第1のP2Pノード501aは、第3のP2Pノードの公開鍵を取得し、その公開鍵にロックされる出力を備えるトランザクションを生成することによって、第3のP2Pノード501cと接続する。トランザクションはP2Pネットワークアドレスも含む。
【0099】
第1のP2Pノード501aはまた、他のP2Pノード間の接続、たとえば、ブロックチェーン150に記録されているトランザクション、たとえば、第4のP2Pノード501dによって署名される入力および第5のP2Pノード501eの公開鍵にロックされる出力を有するトランザクションに基づいて、第4のP2Pノード501dと第5のP2Pノード501eとの間の接続を決定する(すなわち、特定する)ように構成される。第1のP2Pノード501aは、データなどを特定のP2Pノード501にルーティングするために、特定された接続を使用し得る。たとえば、図5の例を用いると、第2のP2Pノード501bに接続されると、データは第2のP2Pノード501bと第4のP2Pノード501dを介して第5のP2Pノード501eにルーティングされ得る。
【0100】
いくつかの例では、P2Pノードは、P2Pネットワーク500上でメッセージを署名するために、ブロックチェーンネットワーク106上でトランザクションを署名するために使用できない第1のタイプの秘密鍵(たとえば、RSA)を使用することがあり、ブロックチェーンネットワーク106上でのトランザクションの署名には第2のタイプの秘密鍵(たとえば、ECDSA)を必要とする。P2Pノード501は、第1のタイプのそれぞれの秘密鍵を(同じであってもなくてもよい1つまたは複数のハッシュ関数、たとえばdouble SHA256を用いて)第1のタイプのそれぞれの秘密鍵をハッシュすることによって、第1のタイプのそれぞれの秘密鍵から第2のタイプのそれぞれの秘密鍵に変換し得る。
【0101】
7. P2Pオーバーレイモデル
説明される実施形態の具体的な例がここで与えられる。このセクションは、P2Pネットワークトポロジー証明のためのインセンティブ機構を開示する。P2Pネットワークにインセンティブを追加するために、ノードは、ブロックチェーンネットワーク上の関連するトランザクション支払を通じて、ブロックチェーン上でデータを証明し得る。これらの支払は、通信プロセスに関与するノードによって受け取られる。このセクション全体で、どのようにノードが参加を証明し、P2Pネットワーク上でそれらの仕様を更新し、ブロックチェーン上にそれらの隣接するノードの証拠を保持できるかを詳しく説明する。
【0102】
この方策は、ノード間のすべてのタイプのデータ伝送に対する経済的なインセンティブを追加する。さらに、報酬を伝送する別の通信レイヤをP2Pネットワークノードが追加する対象である元のP2Pプロトコル通信を、P2Pネットワークノードが保持できるという意味で、この方策は柔軟である。P2PネットワークのノードをNiにより標識し、iは文脈に応じて正の整数またはインデックスセットである。
【0103】
7.1 ネットワークセットアップ
このセクションでは、どのようにノードN1がP2Pネットワークに安全に参加でき、受け入れられるのに十分なインセンティブを提供するかを示す。その上、ノードN1がP2Pネットワークからの任意の他のノードに接続することを望むたびに、ノードN1は以下で説明する同じ手順に従うべきである。これは、ブロックチェーンがP2Pネットワークのフルネットワークトポロジーを記憶することを確実にする。
【0104】
参加プロセスは次の通りである。新しいノードN1がアドレスNETADDRをもつネットワークに参加することを望むと仮定する。利用可能なピアを見つけるために、N1はネットワークに接続することができ、それは、以下の形態のリンクにGET様の要求を送信することによってDNSサービスにクエリすることができる。
protocol://mesh.network/chosen_network
【0105】
取り出されるデータはJSONフォーマットであり、ノードのインターネットアドレスのリストと楕円曲線公開鍵(たとえば、ビットコインフォーマットで符号化される)を含む。エントリの例は次の通りである。
{
Address:"192.168.0.1"
pkey:
"0x02f54ba86dc1ccb5bed0224d23f01ed87e4a443c47fc690d7797a13d41d2340e1a"
}
【0106】
利用可能なピアの受信されたリストに基づいて、N1は、上のエントリの例において見られるようなインターネットアドレスを使用して、接続すべきピアN2を選ぶ。この瞬間において、2つのノードN1およびN2は以下で説明されるプロトコルに従う。
1. N1がJSONエントリからN2のインターネットアドレスを取得する。
2. N1がN2とのインターネットハンドシェイクを開始する。そのようなハンドシェイクはネットワーク依存である。たとえば、2つのノードはRFC793において記述されるようなTCP3ウェイハンドシェイクを選ぶことができる。
3. N2がJSONエントリ公開鍵で署名された自身のインターネットアドレスを送信する。
4. N1がJSONエントリからの公開鍵を使用して、N2のインターネットアドレスに対して署名を確認することによって、N2の身元を正当性確認する。
5. N1がブロックチェーン上でトランザクションを作成し、このトランザクションには図6に見られるように2つの出力がある。第1の出力、P2PKHロッキングスクリプトはN2によって引き換え可能である。第2の出力、ロッキングスクリプトは、参加しようとしているネットワークアドレスNETADDRと共に、固有の識別子
【0107】
【数1】
【0108】
を含む。
【0109】
【数2】
【0110】
識別子は認証機関によって発行され、その目的はネットワークノードN1の身元を信用される方式で特定することである。
6. N2が、トランザクションTxIDnet-addがブロックチェーン上で確認されたことを見ると、N2はN1を隣接するピアの自身のリストに追加する。
【0111】
ステップ3および4は、他のノードがなりすまし攻撃を実行してN2のインターネットアドレスを使用することにより騙すことを防ぐ。N1は、ステップ2によって、N2のインターネットアドレスを使用するノードと通信している。N1はノードがN2であることについて確信でき、それは、N2が、JSONエントリにおいて利用可能な公開鍵でそのインターネットアドレスを署名できる唯一のノードであるからである。したがって、ステップ3および4は、公開鍵インフラストラクチャを可能にする。
【0112】
対処すべき1つの問題は、N2が不正なノードであるかどうか、およびN1を隣接ノードの自身のリストに追加しないかどうかである。どのようにN1がネットワークに安全に参加でき、N2により騙されていないことについて確信できるかを示す。各ノードは、信用される機関により発行される自身の識別情報を反映する、割り当てられた身元証明CAを有する。ノードN1は、証明を発行した機関に連絡して、騙されたことを証明することができる。この瞬間において、信用される機関はフラグを発行することができ、これは、ノードN2と協調する他のP2Pノードに、N2が信用されるノードではないことを認識させる。
【0113】
7.2 ネットワーク公平性アーキテクチャ
信用される機関との相互確認を行い、騙されている場合にはノードN2を報告する可能性をノードN1に提供することに加えて、悪意のある者からP2Pネットワークをさらに保護することができる合意を実施することができる。この合意は、大半のノードが正当にアクションしており常にインセンティブを与えられていることに依拠する。
【0114】
ノードN2がノードN2,1、…N2,nに接続されると仮定しよう。N2を正当なままに保つことが、N2の隣接ノードの各々の関心対象である。N2を正当なままに保つことがノードN2,1、…N2,nの関心対象であるような、2つのシナリオについて詳述する。
・N2が不正であり、新しいノードN1を自身の接続に追加していない場合、要求をN2に広めるノードは、要求を不正ノードに送信することにより報酬を失っている可能性がある。
・N1がオフラインになるときにN2がネットワークを正しく更新していない場合、ノードN2,1、…N2,nは、N2が要求をノードN1に広めていることをブロックチェーン上で見ることができる。これは、隣接ノードが追加のノードのためにN2に支払を行っていることを意味する。
【0115】
上記の2つのシナリオの各々において、隣接ノードは、次の要求の伝播においてより低い報酬を提供することによってN2を罰することができ、または、N2を完全にネットワークからオフラインにすることができる。
【0116】
この合意は、N2が正当であるかどうかを確認するN1のプロセスをオフロードしており、その上、ネットワークの中の既存のノードに、それらの隣接ノードが正当に振る舞っていることを確実にするためのインセンティブを与える。N2に接続されたノードについてのさらなる確認を行うことがノードN1の責任である場合、ノードN2は偽の識別情報を作成し、したがってノードN1を騙すことができ、Sybil攻撃を可能にするであろうことも強調しておく。
【0117】
7.3 識別情報の結びつき
RSA鍵を使用するP2Pネットワークの場合、識別情報を確立するための1つの方法は、RSA秘密鍵kRSAを、トランザクションに署名するためにビットコインネットワーク上で使用されるECDSA秘密鍵kECDSAと結びつけることである。これは、以下の式を通じて行うことができ、
kECDSA=H1(H0(kRSA))
H1およびH0は2つのハッシュ関数であるが、必ずしも異ならない。そうすると、ECDSA公開鍵は次のように定義される。
PECDSA=kECDSA・G
【0118】
ノードN1が、ネットワーク内で使用されるいくつかのRSA秘密鍵を保持する場合、鍵のインデックスはそのままECDSA秘密鍵の生成に含められ得る。
kECDSA=H1(H0(kRSA||index))
RSA鍵とECDSA鍵とのつながりを証明するために、P2Pノードは、RSAデジタル署名暗号システムを使用して、自身のRSA秘密鍵を用いて自身のECDSA公開鍵に署名することができる。
【0119】
7.4 ノードの専門性
ネットワークの最適化の一領域は、ノードの専門性を追加することであり、このとき、各ノードは特定の機能を実行することに特化し得る。グリッドコンピューティング、マイニング、DNSノードであること、信用される機関のノードであること、ファイル共有などの、想起できるいくつかのそのような専門性がある。当然、ノードは、P2Pネットワークに参加し、あらゆる種類の要求を受け入れることができ、これは汎用ノードとして分類される。専門性が存在する場合、それは、以下でさらに示されるようにP2Pネットワークをモジュール化するネットワーク構造につながり得る。
【0120】
図7は、そのような専門化が、ネットワークセットアップのステップ5におけるトランザクションTxIDnet-addの簡単な改変により、ネットワークセットアップ段階においてどのように行われ得るかを示す。
【0121】
専門性フラグは、たとえば次のような標準的なフォーマットで表現され得る。
SPEC:={
"role":["data",
"dns"]
}
【0122】
上記のSPECエントリを使用するノードは、そのノードの専門性が、データ共有ノードの専門性であり、DNSサービス提供ノードの一部であり得ることを、ネットワークに伝える。そのような標準化は、たとえば、所望のネットワークをノードN1が最初に見つけることを助けた既存のDNSサービスによって発行され得る。
【0123】
7.5 ネットワーク更新
前のセクションでは、それを通じてノードN1がネットワークに参加してインセンティブを提供でき、ある程度の公平性が確保されるような手順を説明した。ここで、ネットワーク完全性をどのように保つかを示し、このとき、ブロックチェーントランザクションは、ノードがオフラインになり専門性を変更することなどのネットワーク構造の変化を反映しながら、経済的なインセンティブを保証しなければならない。
【0124】
このセクションは、それを通じてノードが完全性を保つためにネットワーク構造を更新することができる、更新手順を構築する。このプロセスを達成するための1つの方法は、TxIDnet-addの第2のトランザクション出力が消費可能となるように前のセクションにおいて説明されたネットワークセットアッププロトコルを改変することである。出力が消費されている場合、これを、ノードがP2Pネットワークから切断したものとして解釈する。簡潔にするために、この場合、ノードがオフラインになると言う。
【0125】
したがって、注目点は、TxIDnet-addの第2の出力がどのように消費され得るかを理解することにある。これは、ネットワークに誤ったインセンティブを与えてその完全性を危うくしたくないので、重要である。
【0126】
そうするためには、証明
【0127】
【数3】
【0128】
を生み出したデータが必要である。このデータをチャレンジC(たとえば、ランダムな整数)と呼ぶ。Cは、ノードN1および発行側の信用される機関だけに知られている。以下の図では、オペコードOP_SHA256によって計算される関数に対応するように、ハッシュ関数Hを固定する。
【0129】
図6において与えられ、上で詳述されたネットワークステップ手順のステップ5において使用されるTxIDnet-addを改変する。ノードは、このセクションにおいて提示される機能を有効にするために、セットアッププロトコルにおいて、図8に示されるトランザクションフォーマットを採用し得る。
【0130】
第2の出力において与えられるロッキングスクリプトは、N1がオフラインになることをN1がP2Pネットワークに示すことを可能にする。そうするために、N1は以下のステップを実行する。
1. N1図9で与えられるようにトランザクションを作成し、その署名を提供し、図8で与えられるTxID'net-addの第2の出力を消費する。
2. N1がP2Pネットワークから安全に切断することができる。
【0131】
N1が不正であり、オフラインになるために上記のプロトコルを実行しない場合、N2は以下のプロトコルに従う。
1. N2が信用される機関からチャレンジCを獲得する。
2. N2図10のトランザクションをブロードキャストし、その署名を提供し、図8で与えられるTxID'net-addの第2の出力を消費する。
【0132】
ネットワークを更新するときに起こり得るシナリオは次の通りであり、この方式のインセンティブおよびセキュリティを強調する。
・N1が正当なノードであり、オフラインになるときにその署名を通じてトランザクションの第2の出力を消費し、金銭を取り戻す。これは主要なシナリオであり、それは、N1には金銭を取り戻すための経済的なインセンティブもあるからである。
・N1が不正なノードであり、オフラインになることをネットワークに示すためにTxID'net-addの第2の出力を消費しない。この場合、ノードN2は、N1が更新合意に従わなかったことを証明する信用される関係者に連絡することができる。
【0133】
【数4】
【0134】
を発行した認証機関がオンラインになると、N2は、TxID'net-addの第2の出力をアンロックする際に用いるチャレンジCを取得し、その結果、N1がオフラインになったことをネットワークに示すことができる。
【0135】
N1がオフラインになるときにネットワークを更新しないという挙動を繰り返す場合、N2は信用できないものとしてN1にフラグを付けて、ノードかN1からのさらなる参加要求を拒否することができる。その上、認証機関に、信用できないものとしてノードN1へフラグを付けさせて、発行された識別情報を無効にすることもできる。たとえば、フラグを付けることはトランザクションを通じて行われ得る。最後に、N1がどのようにその専門性SPECを変えることができるかを示す。そうするには、N1図11で与えられるように新しいトランザクションを作成し、TxID'net-addの第2の出力を消費するだけでよい。
【0136】
結論として、提案した更新手順は、ネットワークの構造を最新に保ち、必要とされる経済的なインセンティブを提供することによって、ネットワークの完全性を確保する。
【0137】
説明される実施形態による例示的なP2Pオーバーレイモデルが、図12に示される。上で説明されたように、P2Pネットワークはノードの専門化を通じていくつかのサービスを実施することができる。これはネットワークのモジュール化につながり、それにより、P2Pネットワーク通信をより効率的にするために、ノードは何らかの役割を引き受ける。
【0138】
以下のサービスを実施するために、P2Pネットワークに参加する各ノードN1は、自身のSPECフラグを定義する必要がある。図12は、P2Pのモジュール化の視覚的な表現を提供し、ノードは以下のサービスを提供する。
・DNSサービス:SPEC:={"role":"dns"}
・認証機関サービス:SPEC:={"role":"CA"}
・マルチパーティ計算(MPC)サービス:SPEC:={"role":"MPC"}
【0139】
P2Pネットワークはその構造の証明をブロックチェーン上に保持するので、DNSサービスは、ネットワークを検索可能にできるサービス(クローラーサービスとも呼ばれる)を提供することができる。ネットワーク構造を監視することによって、クローラーは、検索アプリケーションを支援できる現在のネットワークのグラフを保持することができる。
【0140】
8. データ伝送の協調
8.1 グラフ理論
任意のP2Pネットワーク上の各ノード間の接続はグラフを形成するので、グラフ理論におけるいくつかの基本的な考え方を思い起こす。グラフは、オブジェクトのいくつかのペアが関連付けられる(エッジとして表現される)ような、オブジェクト(ノード)の集合体である。例示的なグラフが図13に示されており、グラフのノードはNiにより標識され、iは文脈に応じて正の整数またはインデックスセットである。有向グラフは、ノード間のエッジが方向を有する(これは有向エッジとも呼ばれる)ような特別な種類のグラフである。
【0141】
以下では全体で、ノードN1からNkまでのグラフ情報の流れを管理する。N1が情報要求ノードである場合、N1をソースノードまたは要求ノードと呼ぶ。その上、Nkをシンクノードまたはターゲットノードと呼び、Nkは情報の流れの最後のノードである。
【0142】
現実世界の実装形態では、P2Pネットワークは固定されず、ノードは恣意的にピアと接続して切断できることに留意されたい。
【0143】
8.2 Gnutella
例示的な適用の文脈として、Gnutellaは分散型P2Pネットワークファイル共有サービスの一例である。プロトコルがどのように機能するかを示すために、ネットワーク構造を図14におけるようなものとして仮定する。ノードN1はネットワークを通じてデータDを要求し、Gnutellaプロトコルは、データを保持するノードN1,1,2をN1が発見することを可能にする。要求がN1,1,2に到達すると、それは、P2Pネットワーク構造の外側のN1にデータを直接伝送し、これはオフネットワーク伝送とも呼ばれる。図15はこのプロトコルの視覚化を示す。
【0144】
データ伝送プロトコルのステップは次の通りである。
1. ノードN1が、その隣接ピアN1,1およびN1,2にデータDに対するクエリメッセージQueryを送信することによって、ファイルを要求する。
2. 各ノードN1,iが、メッセージQueryをその隣接ピアN1,i,jに転送する。
3. N1,1,2が、メッセージQueryを受信し、その識別情報を含む返答メッセージQueryHitをN1,1に送信する。
4. N1,1がメッセージQueryHitをN1に転送する。
5. N1がN1,1,2に連絡してN1,1,2からデータDを受信する。
【0145】
8.3 オニオンルーティング
例示的な実装形態として、オニオンルーティングプロトコルは、ネットワーク上のノード間の通信プライバシーを確保する例示的なルーティングプロトコルであり、それはたとえばTorネットワークの一部として使用される。ルーティングプロトコルを例示するために、ノードN1はN2に接続され、N2はノードN3に接続されると仮定する。このプロトコルは、図16のようにノードN1がデータDをN3に送信することを可能にし、ここで、ノードNiの公開鍵を
【0146】
【数5】
【0147】
と表記する。
【0148】
プロトコルのステップは次の通りである。
1. N1が自身の公開鍵
【0149】
【数6】
【0150】
をN2に送信し、Diffie-Hellman鍵交換を通じた共有鍵S2の作成に対する要求を送信する。
2. N2がその公開鍵
【0151】
【数7】
【0152】
で返答し、N2が共有鍵S2を作成したことをN1に伝える。N1は自身で鍵S2を計算する。
3. N1がN2に対してN3の公開鍵を要求する。N1は自身の公開鍵を要求に添付する。N1はN3のIPアドレスを知らない。
4. N2がN3に要求を転送し、共有鍵S3の作成を要求する。
5. N3が自身の公開鍵をN2に送信し、鍵S3の作成を確認する。S3はN1とN3との間で共有される。
6. N2がさらに公開鍵を鍵S3の作成の確認と共にN1へ中継する。N1は自身で鍵S3を計算する。
7. N1が最初に鍵S3を用いて、次いでS2:
【0153】
【数8】
【0154】
を用いてデータDを暗号化する。N1はN2に暗号化されたデータを送信する。
8. N2が、S2を使用して暗号化されたデータを復号し、
【0155】
【数9】
【0156】
を取得する。N2は暗号化されたデータ
【0157】
【数10】
【0158】
をN3に送信する。
9. N3
【0159】
【数11】
【0160】
を復号してデータDを受信する。
【0161】
8.4 データ伝送
本発明の実施形態は、ブロックチェーンネットワークがP2PネットワークのP2Pノード間でのデータの伝送の調停者として振る舞うことを可能にする。説明される実施形態を実装するための例示的なシステムが図17に示されている。システムは、複数のP2Pノードおよびブロックチェーンネットワーク106を備えるP2Pネットワークを備える。システムは、図5に示されるP2PネットワークのP2Pノード501を備える。いくつかの実施形態では、P2Pノードは、図5から図12に関して説明されるような接続を形成するプロセスを経ることがある。
【0162】
P2Pネットワークは、ターゲットデータへのアクセス権をもつターゲットノードと、ターゲットデータを要求する要求ノードとを備える。ターゲットデータは、たとえば、1つまたは複数の画像、1つまたは複数のビデオ、1つまたは複数のオーディオファイルなどのメディアデータを備え得る。ターゲットデータは1つまたは複数の文書を備え得る。一般に、ターゲットデータはあらゆる形態をとり得る。P2Pネットワークは、複数の中間ノードも備える。要求ノードおよびターゲットノードは、中間ノードを介して接続される。すなわち、要求ノードは1つまたは複数の中間ノードに接続され、それらの中間ノードの1つまたは複数は1つまたは複数のさらなる中間ノードに接続され、中間ノードがターゲットノードに接続されるまでこれが続く。たとえば、図17に示されるように、要求ノードN1はノードN1,1およびN1,2に接続され、ノードN1,1はターゲットノードNkに接続される。図17は単なる例であり、実際には、要求ノードをターゲットノードに接続するより多くの中間ノードがあり得ることが理解されるだろう。P2Pネットワークの各ノードは、それぞれの公開鍵と関連付けられる。
【0163】
要求ノードは、ターゲットデータに対する要求に基づくハッシュ値を取得する。より具体的には、ターゲットデータに対する要求(「ターゲット要求」)は、第1のハッシュ値を取得するために第1のハッシュ関数を用いてハッシュされ、その結果は第2のハッシュ値を取得するために第2のハッシュ関数を用いてハッシュされる。第1のハッシュ関数および第2のハッシュ関数は同じであってもよく、またはそれらは異なっていてもよい。第1および/または第2のハッシュ関数は、暗号学的関数(たとえば、SHA256などの、ハッシュ関数のSHAファミリーからの)であり得る。代替として、非暗号学的ハッシュ関数が使用されてもよい。いくつかの例では、要求ノードは第1のハッシュ値および第2のハッシュ値を生成する。他の例では、要求ノードは、異なるノードから、または、要求をデータと対応付ける集中型のサービスなどの信用される第三者から、第1および/または第2のハッシュ値を受信し得る。
【0164】
ターゲット要求は、ターゲットデータまたはその識別子に基づいてもよく、たとえば、ターゲット要求はターゲットデータのハッシュであってもよい。ターゲット要求はターゲットデータと(たとえば、任意選択の集中型のサービスによって)対応付けられ得るので、ターゲットノードはどのデータが要求されているかを決定し得る。たとえば、ターゲットノードは、ターゲットデータに対応付けられるデータ要求のデータベースを記憶し得る。ターゲットノードは、対応付けを集中型のサービスに知らせ得る。たとえば、ターゲットノードは、要求番号123と対応付けられるメディアファイルAを有することを集中型のサービスに知らせ得る。いくつかの例では、そのような集中型のサービスは、ネットワークノードの集合体によって提供され得る。要求ノードは、集中型サービスに連絡して、メディアファイルAの取得を望んでいることをサービスに知らせ得る。それに応答して、集中型のサービスは、要求番号123を要求ノードに提供し得る。要求ノードがターゲット要求を取得する方式は、説明される実施形態を実装するのに必須ではない。
【0165】
いくつかの例では、第1のハッシュ値は、タイムスタンプ、または要求ノードおよびターゲットノードに知られている秘密の値などの、ターゲット要求および追加のデータをハッシュすることによって取得され得る。たとえば、ある選択肢として、集中型のサービスは、秘密の値を要求ノードおよび/またはターゲットノードに送信し得る。
【0166】
集中型のサービスへのあらゆる言及は任意選択であり、少なくともいくつかの実施形態では、そのような集中型のサービスは存在しないことが想像されることに留意されたい。
【0167】
8.4.1 フラッディング要求
本明細書で説明されるいくつかの実施形態は、ターゲットデータに対する要求を用いたP2Pネットワークのフラッディングを伴う。
【0168】
要求ノードは主要求トランザクションを生成し、これはブロックチェーントランザクションである。主要求トランザクションは、第2のハッシュ値および1つまたは複数の出力を含む。各出力は、P2Pネットワーク上で要求ノードが接続される中間ノードのそれぞれのノードのそれぞれ1つの公開鍵にロックされる。たとえば、(図17に示されるように)要求ノードが2つのノードに接続される場合、主要求トランザクションは、2つのノードのうちの第1のノードにロックされる出力と、2つのノードのうちの第2のノードにロックされる別個の出力とを含む。第2のハッシュ値は、それぞれのノードのそれぞれの公開鍵にロックされる出力に含まれ得る。たとえば、各出力はハッシュパズルを実装するように構成されるロッキングスクリプトを含んでもよく、ハッシュパズルは第2のハッシュ値を備える。ハッシュパズルは、消費トランザクション(すなわち、ハッシュパズルを含むロッキングスクリプトをアンロックしようとするトランザクション)のアンロッキングスクリプトに、第1のハッシュ値またはターゲット要求を含むことを要求し得る。追加または代替として、いくつかの例では、第2のハッシュ値はOP_RETURN出力に含まれ得る。主要求トランザクションはまた、要求ノードのネットワーク識別子(たとえば、要求ノードのIPアドレス)および/または要求ノードの証明された識別子(たとえば、要求ノードの身元を証明する認証機関によって証明される識別子)を備え得る。要求ノードは、主要求トランザクションをブロックチェーンネットワーク106に提出する。要求ノードはまた、関連する中間ノード、すなわち、その公開鍵にトランザクションの出力がロックされるノードに、主要求トランザクションを直接送信し得る。これは、新しい要求トランザクションを見つけるためにブロックチェーンを聴取するのはノードにとって高価であるので、中間ノードにとって有益である。図20は、要求ノードに接続される中間ノードのそれぞれの公開鍵に2つの出力がロックされる、主要求トランザクションの例を示す。この例では、トランザクションはまた、要求ノードのネットワークアドレスおよび識別子を含む。
【0169】
図20に示されるように、主要求トランザクションはロックタイムを含み得る。ロックタイムは、その時点から主要求トランザクションがブロックに含まれ得る、すなわちブロックチェーンに記録され得る、最も早い時間を指定する。ロックタイムは、UNIX(登録商標、以下同じ)時間またはブロック高さを使用して指定され得る。ロックタイムは、指定された時間内に要求に応答するためのインセンティブを中間ノードに与える。
【0170】
主要求を受信する中間ノードの各々は次いで、それぞれの副要求トランザクションを生成する。ここで、トランザクションを「受信する」とは、トランザクションがそれぞれのノードのそれぞれの公開鍵にロックされる出力を備えると決定することを意味する。それぞれの中間ノードによって生成される各副要求トランザクションは、第2のハッシュ値および1つまたは複数の出力を含むという点で主要求トランザクションと似ており、各出力は、それぞれの中間ノードが接続されるそれぞれのノードのそれぞれの公開鍵にロックされる。たとえば、中間ノードの第1のノードは3つの他の中間ノードに接続されてもよく、したがって、そのノードによって生成される副要求トランザクションは、3つの他の中間ノードのそれぞれの公開鍵にロックされる3つの出力(出力ごとに1つの鍵)を含む。主要求トランザクションのように、第2のハッシュ値はハッシュパズルに含まれ得る。副要求トランザクションは、ブロックチェーンネットワーク106に提出される。図21は、副要求トランザクションの例を示す。
【0171】
主要求トランザクションのように、各副要求トランザクションは、その時点からそれぞれの副要求トランザクションがブロックに含まれ得る、すなわちブロックチェーンに記録され得る、最も早い時間を指定するロックタイムも含み得る。
【0172】
いくつかの例では、中間ノードの第1のセット(すなわち、要求ノードに直接接続されるノード)によって提出される副要求トランザクションの1つは、ターゲットノードの公開鍵にロックされる。他の例では、中間ノードの第1のセットは、中間ノードの第2のセットのそれぞれの公開鍵にロックされた1つまたは複数の出力を備えるそれぞれの要求トランザクションを各々生成する。ターゲットノードが副要求トランザクションを受信するまで、このプロセスは続く。このようにして、1つまたは複数の中間ノードを介して、要求ノードからターゲットノードへのノードの経路が形成される。ターゲットノードを例外として、経路の中の各ノードは、次のノードの公開鍵への要求トランザクション(要求ノードの場合は主要求トランザクション、中間ノードの場合は副要求トランザクション)の送信を介して次のノードに接続される。たとえば、図17では、1つの中間ノードN1,1を介して、要求ノードN1からターゲットノードNkへの経路が形成される。図18は、それぞれ要求ノードおよび中間ノードからの、主トランザクションおよび副トランザクションの送信を示す。
【0173】
したがって、ターゲットノードはターゲットデータに対する要求について警告され、ターゲットデータは要求ノードに伝送される。ターゲットデータを要求ノードに伝送するためのいくつかの選択肢があり、これは以下で論じられる。副トランザクションを受信したことに応答して、ターゲットノードは、ターゲットノードが要求されたデータを有すること、および要求が受信されたことを示すために、ターゲットノードの公開鍵にロックされる副トランザクションの出力を消費する応答(または回答)トランザクションをブロックチェーンに提出し得る。副トランザクションが第2のハッシュ値に基づくハッシュパズルを含む例では、応答トランザクションの入力は第1のハッシュ値を含む。これは次いで、中間ノードが、それらのそれぞれの公開鍵にロックされるそれぞれの要求トランザクションのそれぞれの出力を消費するそれぞれの応答トランザクションを提出することを可能にする。「出力を消費する」とは、「出力によってロックされるデジタル通貨をその出力をアンロックするトランザクションの出力に割り当てる」を意味するものとして解釈されることに留意されたい。図19は、応答(または回答)トランザクションを使用した要求トランザクションの消費を示し、図22は、ターゲットノードによって出された応答トランザクションの例を示す。
【0174】
いくつかの例では、ターゲットノードは、要求トランザクションに含まれる第2のハッシュ値を特定することによって、それがターゲットデータを有すると決定し得る。すなわち、ターゲットノードは、第2のハッシュ値がターゲットデータアイテム(またはターゲット要求)と関連付けられると認識してもよく、たとえば、第2のハッシュ値は、要求に対応付けられるデータベースに含まれてもよい。他の例では、ターゲットノードは、第1のハッシュ値(たとえば、ターゲット要求に対応付けられるデータベースに記憶されている)へのアクセス権を有し、要求トランザクションから第2のハッシュ値を特定し、第1のハッシュ値が第2のハッシュ値へとハッシュすることを検証し得る。そうである場合、ターゲットノードは対応するターゲット要求を有する。いくつかの例では、第2のハッシュ値は、タイムスタンプで第1のハッシュ値をハッシュすることによって取得され得る。これらの例では、ターゲットノードは、第2のハッシュが既知の第1のハッシュ値に基づくことを検証するために、ある範囲の異なるタイムスタンプを用いて第1の値をハッシュすることを試み得る。
【0175】
ターゲットデータを伝送するための選択肢として、図19に示されるように、ターゲットノードはデータを直接要求ノードに伝送してもよい。ターゲットデータは、オフチェーンで、たとえば、ターゲットノードと要求ノードとの間の(セキュアな)通信チャネルを介して送信されてもよい。これらの例では、ターゲットデータの伝送は、ブロックチェーン上で証明され得る。たとえば、ターゲットデータのハッシュは、証明トランザクションの一部としてブロックチェーンに記録され得る。証明トランザクションは、要求ノードおよび/またはターゲットノードによって生成され得る。代替として、ターゲットデータはオンチェーンで送信されてもよく、すなわち、ターゲットノードによってブロックチェーンネットワーク106に提出されるブロックチェーントランザクションに含まれてもよい。いくつかの例では、ターゲットデータの伝送は、要求ノードが、たとえば証明トランザクションを介して、土台となるデジタル資産の額をターゲットノードに支払うことでのみ(または少なくともそれを条件として)可能である。
【0176】
ターゲットノードは、データをオンチェーンで送信するための要求ノードの公開鍵、および/またはデータをオフチェーンで送信するための要求ノードのネットワークアドレス(たとえば、IPアドレス)へのアクセス権をすでに有し得る。いくつかの例では、要求ノードは、公開鍵および/またはネットワークアドレスをターゲットノードに送信し得る。たとえば、副要求トランザクションを受信したことに応答して、ターゲットノードは、ターゲットノードのネットワーク識別子(たとえば、IPアドレス)および第1のハッシュ値を含むメッセージを公開し得る。メッセージの公開は、メッセージをP2Pネットワークにブロードキャストすることを備え得る。第1のハッシュ値を含めることによって、要求ノードは、ターゲットノードが要求を受信したと決定し得る。要求ノードは次いで、ターゲットノードと接続するためにターゲットノードのネットワーク識別子を使用してもよく、ターゲットノードはターゲットデータを要求ノードに送信してもよい。いくつかの例では、ターゲットノードへの接続の前に、要求ノードは、メッセージに含まれる第1のハッシュ値が正しいことを検証し得る。
【0177】
ターゲットデータを要求ノードに送信するための代替の選択肢として、ターゲットノードは、要求ノードをターゲットノードに接続する経路を形成する中間ノードを介して、ターゲットデータを要求ノードに伝送し得る。ターゲットノードは、経路の中の他のノード、すなわち要求ノードおよび1つまたは複数の中間ノードのそれぞれの公開鍵を取得し得る。ターゲットノードは、たとえばメモリに記憶されている公開鍵へのアクセス権をすでに有していることがあり、または、公開鍵は、ブロックチェーンから、たとえば要求トランザクションから、または集中型のサービスから取得されてもよい。ターゲットノードは、取得された公開鍵を使用してターゲットデータを暗号化する。すなわち、ターゲットデータは、ターゲットデータが各公開鍵を用いて暗号化されるまで、最初に要求ノードの公開鍵を用いて、次いで経路の中の第1の中間ノードの公開鍵を用いて、次いで経路の中の第2の中間ノードの公開鍵を用いてなど、公開鍵の各々を用いて暗号化される。いくつかの例では、ターゲットデータはまず1つまたは複数のデータパケットへと分割されてもよく、各データパケットは公開鍵のセットを用いて暗号化されてもよい。
【0178】
公開鍵のセットを用いて暗号化されるデータパケットは、「最後の暗号化されたメッセージ」と呼ばれる。要求ノードの公開鍵だけを用いて暗号化されるデータパケットは、「最初の暗号化されたメッセージ」と呼ばれる。すなわち、データパケットは、最初の暗号化されたメッセージを取得するために要求ノードの公開鍵を用いて各々暗号化され、最初の暗号化されたメッセージは、最後の暗号化されたメッセージを取得するために残りの公開鍵を用いて各々暗号化される。
【0179】
ターゲットノードは、最後の暗号化されたメッセージを、経路の中の最後の中間ノード、すなわちターゲットノードの公開鍵にロックされる出力を有する副要求トランザクションを提出した中間ノードに送信する。最後の中間ノードは、暗号化されたメッセージのセットを取得するために、そのノードの公開鍵に対応する秘密鍵を使用して、最後の暗号化されたメッセージを復号する。暗号化されたメッセージのそのセットは、他の中間ノードおよび要求ノードの公開鍵を用いて暗号化される。最後の中間ノードは、暗号化されたメッセージのセットを(要求ノードの方向において)経路の中の次の中間ノードに送信し、または、経路の中に1つの中間ノードしかない場合、要求ノードに送信する。暗号化されたメッセージのセットを受信する各中間ノードは、それらのそれぞれの秘密鍵を用いてメッセージを復号し、暗号化されたメッセージの得られたセットを経路の中の次のノードに送信する。最終的に、要求ノードは1つまたは複数の最初の暗号化されたメッセージを受信する。要求ノードは次いで、1つまたは複数のデータパケットを取得するために、その秘密鍵を用いて1つまたは複数の最初の暗号化されたメッセージを復号し得る。ターゲットデータは次いで、データパケットを組み合わせることによって取得される。
【0180】
いくつかの例では、暗号化されたメッセージはノードからノードへ1つのバッチで提出される。他の例では、暗号化されたメッセージはノードからノードへ一度に提出される。
【0181】
暗号化されたメッセージは、オフチェーンチャネルを介してノード間で送信され得る。代替として、暗号化されたメッセージはブロックチェーンを介して送信され得る。たとえば、各ノードは1つまたは複数のデータトランザクションをブロックチェーンに送信してもよく、各データトランザクションは1つまたは複数の暗号化されたメッセージを備える。
【0182】
任意選択で、要求ノードは、データパケットの取得を証明するために、証明トランザクションをブロックチェーンに提出し得る。たとえば、証明トランザクションは、ターゲットデータのハッシュを含み得る。要求ノードは、単一の証明トランザクションをブロックチェーンに提出してもよく、または、それぞれの証明トランザクションは各データパケットに対して出されてもよく、たとえば、各トランザクションはそれぞれのデータパケットのハッシュを含んでもよい。同様に、各中間ノードは、経路の中の前のノードから1つまたは複数の暗号化されたメッセージを受信したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンに提出し得る。いくつかの例では、各々の暗号化されたデータパケットの伝送は、暗号化されたデータパケットを受信するノードが、たとえば証明トランザクションを介して、暗号化されたデータパケットを送信するノードに土台となるデジタル資産の額を支払うことでのみ(または少なくともそれを条件として)可能である。
【0183】
8.4.2 チェーン接続された要求
本明細書で説明されるいくつかの実施形態は、ターゲットノードへの中間ノードのチェーンを介してターゲットデータに対する要求を送信することを伴う。
【0184】
要求ノードは、要求ノードに接続される1つまたは複数の中間ノードに第2のハッシュ値(ターゲットデータに対する要求に基づく)を送信する。要求ノードはその公開鍵も送信する。たとえば、図23に示されるように、要求ノードN1は、第2のハッシュ値H1(H0(R))およびその公開鍵PKN1を、それが接続される各ノード、この例では中間ノードN1,1および中間ノードN1,2に送信する。第2のハッシュ値を受信する各中間ノードは、第2のハッシュ値および要求ノードの公開鍵PKN1を、その中間ノードに接続される1つまたは複数の中間ノードに転送する。中間ノードの公開鍵はまた、第2のハッシュ値および要求ノードの公開鍵PKN1と共に送信される。たとえば、中間ノードN1,2は、第2のハッシュ値、要求ノードの公開鍵PKN1、および自身の公開鍵PKN1,2を、中間ノードN1,2,1および中間ノードN1,2,2に送信する。このプロセスは、第2のハッシュ値がターゲットノードに到達するまで続く。たとえば、図23に示されるように、中間ノードN1,1は、第2のハッシュ値、要求ノードの公開鍵PKN1、および自身の公開鍵PKN1,1を、中間ノードN1,1,1およびターゲットノードNkに転送する。実際には、P2Pネットワークに、より多くのノードがあってもよく、最終的にターゲットノードが第2のハッシュ値を受信するまで、第2のハッシュ値、受信された公開鍵、および自身の公開鍵を中間ノードが他の中間ノードに転送する、より多くのラウンドがあってもよいことが理解されるだろう。
【0185】
要求ノードからターゲットノードへのノードのチェーンが形成される。チェーンは、要求ノードからターゲットノードへの第2のハッシュ値および公開鍵の転送によって形成される。チェーンは、ターゲットノードによって受信される公開鍵によって表され得る。たとえば、図23では、チェーンは、要求ノードN1、中間ノードN1,1、およびターゲットノードNkで形成され、公開鍵PKN1およびPKN1,1によって表される。要求ノードは常にチェーンの一端にあり、ターゲットノードは他端にある。
【0186】
要求ノードは、たとえばP2Pネットワークプロトコルの一部として、オフチェーンチャネルを介して、第2のハッシュ値およびその公開鍵を中間ノードに送信し得る。他の例では、要求ノードは、第2のハッシュ値およびその公開鍵をオンチェーンで中間ノードに送信し得る。すなわち、要求ノードは要求トランザクションをブロックチェーンに提出してもよく、要求トランザクションは第2のハッシュ値および要求ノードの公開鍵を含む。要求ノードはまた、オフチェーンチャネルを介して要求トランザクションを中間ノードに直接送信し得る。これは、ノードがブロックチェーンを監視しなくてもよいので、性能を改善する。要求トランザクションは1つまたは複数の出力を含んでもよく、各出力は、要求ノードが接続されるそれぞれの中間ノードのそれぞれの公開鍵にロックされる。たとえば、要求ノードが3つの中間ノードに接続される場合、要求トランザクションは、各々がそれぞれの中間ノードの公開鍵にロックされる、3つの出力を含み得る。
【0187】
同様に、中間ノードは、要求トランザクションをブロックチェーンに提出することによって、オフチェーンチャネルを介して第2のハッシュ値および公開鍵を転送し得る。第2のハッシュ値および公開鍵が中間ノードによってどのように送信されるかに応じて、ターゲットノードは、第2のハッシュ値および公開鍵を、中間ノード(オフチェーンチャネルを介して)またはブロックチェーンのいずれかから直接取得する。
【0188】
いくつかの例では、ターゲットノードは、第2のハッシュ値がターゲットデータアイテム(またはターゲット要求)と関連付けられること、たとえば、第2のハッシュ値が要求に対応付けられるデータベースに含まれ得ることを認識し得る。他の例では、ターゲットノードは、第1のハッシュ値(たとえば、ターゲット要求に対応付けられるデータベースに記憶されている)へのアクセス権を有し、第2のハッシュ値を中間ノードから受信し、第1のハッシュ値が第2のハッシュ値へとハッシュすることを検証し得る。そうである場合、ターゲットノードは対応するターゲット要求を有する。いくつかの例では、第2のハッシュ値は、タイムスタンプを用いて第1のハッシュ値をハッシュすることによって取得され得る。これらの例では、ターゲットノードは、第2のハッシュが既知の第1のハッシュ値に基づくことを検証するために、ある範囲の異なるタイムスタンプを用いて第1の値をハッシュすることを試み得る。
【0189】
ターゲットノードは、取得された公開鍵(すなわち、要求ノードの公開鍵およびチェーンの中の各々の他のノードのそれぞれの公開鍵)を使用してターゲットデータを暗号化する。すなわち、ターゲットデータは、ターゲットデータが各公開鍵を用いて暗号化されるまで、最初に要求ノードの公開鍵を用いて、次いで経路の中の第1の中間ノードの公開鍵を用いて、次いで経路の中の第2の中間ノードの公開鍵を用いてなど、公開鍵の各々を用いて暗号化される。いくつかの例では、ターゲットデータはまず1つまたは複数のデータパケットへと分割されてもよく、各データパケットは公開鍵のセットを用いて暗号化されてもよい。
【0190】
公開鍵のセットを用いて暗号化されるデータパケットは、「最後の暗号化されたメッセージ」と呼ばれる。要求ノードの公開鍵だけを用いて暗号化されるデータパケットは、「最初の暗号化されたメッセージ」と呼ばれる。すなわち、データパケットは、最初の暗号化されたメッセージを取得するために要求ノードの公開鍵を用いて各々暗号化され、最初の暗号化されたメッセージは、最後の暗号化されたメッセージを取得するために残りの公開鍵を用いて各々暗号化される。
【0191】
ターゲットノードは、最後の暗号化されたメッセージを、経路の中の最後の中間ノード、すなわちターゲットノードの公開鍵にロックされる出力を有する副要求トランザクションを提出した中間ノードに送信する。最後の中間ノードは、暗号化されたメッセージのセットを取得するために、そのノードの公開鍵に対応する秘密鍵を使用して、最後の暗号化されたメッセージを復号する。暗号化されたメッセージのセットの中の暗号化されたメッセージの各々は、他の中間ノードおよび要求ノードの公開鍵を用いて暗号化される。最後の中間ノードは、暗号化されたメッセージのセットを(要求ノードの方向において)経路の中の次の中間ノードに送信し、または、経路の中に1つの中間ノードしかない場合、要求ノードに送信する。暗号化されたメッセージのセットを受信する各中間ノードは、それらのそれぞれの秘密鍵を用いてメッセージを復号し、暗号化されたメッセージの得られたセットを経路の中の次のノードに送信する。最終的に、要求ノードは1つまたは複数の最初の暗号化されたメッセージを受信する。要求ノードは次いで、1つまたは複数のデータパケットを取得するために、その秘密鍵を用いて1つまたは複数の最初の暗号化されたメッセージを復号し得る。ターゲットデータは次いで、データパケットを組み合わせることによって取得される。
【0192】
いくつかの例では、暗号化されたメッセージはノードからノードへ1つのバッチで提出される。他の例では、暗号化されたメッセージはノードからノードへ一度に提出される。
【0193】
暗号化されたメッセージは、オフチェーンチャネルを介してノード間で送信され得る。代替として、暗号化されたメッセージはブロックチェーンを介して送信され得る。たとえば、各ノードは1つまたは複数のデータトランザクションをブロックチェーンに送信してもよく、各データトランザクションは1つまたは複数の暗号化されたメッセージを備える。
【0194】
要求ノードは、データパケットの取得を証明するために、1つまたは複数の証明トランザクションをブロックチェーンに提出する。たとえば、証明トランザクションは、ターゲットデータのハッシュを含み得る。証明トランザクションは、最初の暗号化されたメッセージを要求ノードに送信する、チェーンの中のノードの公開鍵にロックされた出力を備え得る。要求ノードが単一の証明トランザクションをブロックチェーンに提出してもよく、または、それぞれの証明トランザクションが各データパケットに対して出されてもよく、たとえば、各トランザクションはそれぞれのデータパケットのハッシュを含んでもよい。同様に、各中間ノードは、経路の中の前のノードから1つまたは複数の暗号化されたメッセージを受信したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンに提出し得る。追加または代替として、ターゲットノードは、ターゲットノードに接続されるチェーンの中のノードへの最後の暗号化されたメッセージの送信を証明するために、1つまたは複数の証明トランザクションをブロックチェーンに提出してもよい。
【0195】
図24は、中間ノードを介して要求ノードに暗号化されたメッセージを送信するプロセスを示す。示されるように、ターゲットノードは、複数の暗号化されたメッセージを取得するために、複数のデータパケットを暗号化する。暗号化されたメッセージは、一度に中間ノードに送信される。中間ノードは、暗号化されたメッセージを受信したことへの返答として、または受信するために、証明トランザクションをブロックチェーンネットワークに提出する。暗号化されたメッセージは、最初の暗号化されたメッセージを明らかにするために、中間ノードの秘密鍵を使用して復号される。最初の暗号化されたメッセージは次いで要求ノードに送信され、要求ノードは最初の暗号化されたメッセージの受信を証明する。最初の暗号化されたメッセージは、ターゲットデータを明らかにするために復号される。
【0196】
いくつかの例では、ターゲットノードは、第1のハッシュ値と共にターゲットデータ(またはターゲットデータのそれぞれのチャンク)を暗号化して、最初の暗号化されたメッセージを生成し得る。すなわち、各データパケット(それがターゲットデータ全体であるか、またはそのチャンクであるかにかかわらず)は、要求ノードの公開鍵を用いて暗号化される前に、第1のハッシュ値と組み合わせられる。最初の暗号化されたメッセージを復号するとき、要求ノードは、復号された第1のハッシュ値が、第2のハッシュ値の根拠であった正しい第1のハッシュ値であることを検証し得る。このようにして、要求ノードは、データパケットがターゲットノードによって提供されていることについて確信することができ、それは、ターゲットノードが、たとえばデータ要求をハッシュすることによって、第1のハッシュ値へのアクセス権を有していたからである。
【0197】
9. 例示的な実装形態
以下は、フラッディング要求の実施形態およびチェーン要求の実施形態の例示的な実装形態を提供する。
【0198】
P2Pデータ伝送のインセンティブを追加するために、ノードは、後で伝送プロセスに関与するノードにより受信されるトランザクションを使用して、ブロックチェーン上での各伝送を証明し得る。ブロックチェーンネットワークを使用することによって、不正を行うノードが責任を負い得るように、通信の監査可能な痕跡が作成される。図17は、ノードN1とN1,1との間の伝送の視覚化を提供する。P2PネットワークからのデータDをソースノードN1が要求することを考え、シンクノードNk=N1,1,2がデータを所有すると仮定する。要求されるデータは、たとえば、ファイル、ネットワーククエリ、または身元の証明であり得る。NkからN1にそれを伝送するために、実装形態に対して2つのレイヤがある。
・データ要求によるP2Pネットワークのフラッディングにインセンティブを与える。
・それを要求するノードへのデータ分配にインセンティブを与える。
【0199】
ネットワークに応じて、ノードは、要求フラッディングとデータ分配の両方にインセンティブを与えるプロトコルへと2つのレイヤを組み合わせることができる。各ノードは、ノードがそれを通じてP2Pネットワークにおいて一意に識別可能になる関連する公開鍵を有すると仮定される。
【0200】
9.1 フラッディング報酬
N1は、P2PネットワークにおいてデータDに対する要求Rを送信し、要求を転送したことに対する支払報酬を添付する。要求がNkに到達すると、Nkは支払報酬のためにデータDを直接N1に伝送する。プロトコルは、Nkを見つけるためのピア発見段階(図18)と、支払およびデータ伝送のための決済段階(図19)へと分けられる。プロトコルは次の通りである。
【0201】
9.1.1 ピア発見段階:
1. N1がその要求R、H1(H0(R))をハッシュし、H1とH0はハッシュ関数であるが、必ずしも異ならない。
2. N1が、ハッシュされた要求H1(H0(R))を含むロックタイムT1でトランザクションをその隣接ノードN1,1、N1,2に送信する(図20)。N1がUTXO
【0202】
【数12】
【0203】
を消費する。
【0204】
N1がロックタイムT1の前にその要求への応答を受信しない場合、N1はロックタイムなしで、資金を自身に返すトランザクションをブロードキャストする。
3. 各ノードN1,iが、ロックタイムT2,iでトランザクションを作成することによって、ネットワークの中の要求を転送する(図21)。N1,iがUTXO
【0205】
【数13】
【0206】
を消費する。
【0207】
N1,iがロックタイムT2,iの前にその要求への応答を受信しない場合、N1,iはロックタイムなしで、資金を自身に返すトランザクションをブロードキャストする。
4. シンクノードNkが、H1(H0(R))を受信し、(たとえば、ローカルに記憶されているデータベースからの)要求Rを認識する。Nkが、その識別情報およびH0(R)を含むメッセージをP2Pネットワークにブロードキャストする。
【0208】
9.1.2 決済段階:
5. すべてのノードがH0(R)を含むブロードキャストされるメッセージを受信すると、ノードN1,iは、図20においてトランザクションのi番目の出力を消費し、ノードN1,I,jは、図21においてトランザクションのj番目の出力を消費する。たとえば、Nkが、図22において与えられるようにトランザクションTxIDans-Nkをビットコインネットワークにブロードキャストする。
6. ノードN1が、ステップ4において明らかにされたH0(R)およびNkの識別情報を受信する。N1がNkに連絡する。
7. Nkが、たとえば支払チャネルプロトコルを使用して、データDをN1に送信し、y BSVの支払を受け取る。
【0209】
スクリプト[Hash-puzzle<H1(H0(R))>]は、
OP_SHA256<H1(H0(R))>OP_EQUALVERIFY
として定義され、H1をオペコードOP_SHA256に対応するハッシュ関数として固定する。ハッシュパズルは、スクリプト<H0(R)>を用いてアンロックされ得る。
【0210】
ノードN1は、その隣接ノードN1,1およびN1,2の各々に2x BSVを支払うトランザクション要求に資金提供する。我々のネットワーク構造では、Nkに到達するために1つだけのホップを考えるが、2x BSVという額は、要求がどれだけ速く回答されるべきか、およびどれだけのホップが予想されるかに基づいて選ばれるべきである。N1,1およびN1,2は、H0(R)を知らない限り支払を受け取ることができないので、N1,1およびN1,2は、x BSVという報酬のために、それらの隣接ピアにH1(H0(R))を転送することについてインセンティブを与えられる。
【0211】
Nkは、H0(R)を公開し、それをP2Pネットワークにおいてブロードキャストすることについてインセンティブを与えられ、それは、このようにすると、自身の身元がN1に知られるようになり、データ伝送に対する支払を受け取るからである。合計で、Nkは、データ伝送に対してy BSVの支払を受け取り、TxIDans-Nkをブロードキャストすることによってx-ε BSVの支払を受け取る。次いで、各ノードN1,1およびN1,2
2x-x-ε=x-εBSV
の利益を得る。
【0212】
同様に、N1,1,1、N1,2,1、N1,2,2は、ステップ5によってx-ε BSVの利益を得る。以下の表はこのインセンティブを要約する。
【0213】
【表1】
【0214】
N1,2が不正を行い、H0(R)がNkによりブロードキャストされることを待ち、要求を転送することなく2x BSVを受け取るような状況があり得る。このシナリオはN1により回避されるべきであり、それは、プロトコルに従わないことで、データDが発見される確率をN1,2が下げているからである。したがって、N1は、その隣接ピアがトランザクションを中継することによって要求を転送した場合、ブロックチェーン上で常に確認を行うことについてインセンティブを与えられる。それらのいずれもが要求を転送しない場合、セクション6および7において上で説明されたように、N1は、不正なピアに対する報酬を減らし、または、認証機関に連絡することによって不正なピアをネットワークから切断させることができる。
【0215】
同様に、N1,2は、x BSV未満をそのピアに支払い、要求を転送することに対するインセンティブを減らすことができる。上記の場合のように、N1は、N1,2の支払をブロックチェーン上で常に確認し、未来の報酬を減らし、N1,2をネットワークから切断することができる。
【0216】
追加の論点は、要求Rに関係する。ノードが不正を行い、Nkが発見されることを待たずに要求報酬を得ることを望む場合、ノードはH0(R)を見つけるために力ずくでH1(H0(R))を得なければならない。Rが長ければ、そのような手法はあまりにも高価であり得る。注意深い読者は、ここで書かれているように、このプロトコルに脆弱性があることにも気づくことができる。要求Rは、必ずしも同じソースノードN1によってではなく、ネットワークを通じて複数回送信され得る。この場合、ノードは不正に振る舞い得る。第1の要求からH0(R)を知ると、ノードはステップ2においてトランザクションを消費することができる。この問題に対する1つの軽減策は、N1がUnix時間値unixtimeなどの時間変数を次のようにH0(R)に付加し、
H0(R)||unixtime
ハッシュH1(H0(R)||unixtime)を使用してトランザクションを作成することである。Nkが要求を受信すると、Nkは要求を照合するために現在のUnix時間に近い値について確認しなければならない。これは、正しいUnix時間値およびデータベースの中の要求Rを見つけることについて、Nkに小さな負担を加える。
【0217】
9.2 チェーン報酬
フラッディング報酬のセクションでは、N1はデータを受信するためにNkに直接連絡した。しかしながら、このセクションでは、データDは、NkをN1に接続するネットワーク経路を通じて広められており、そのような経路を勝利チェーンと呼ぶ。勝利チェーン上のノードだけが報酬を受け、NkからN1へチェーンを通じてデータDをセキュアに伝送するために、データを暗号化する必要がある。図23および図24は、通信の視覚化を提供する。
【0218】
9.2.1 ピア発見段階:
1. N1がH1(H0(R))およびその公開鍵
【0219】
【数14】
【0220】
を各隣接ノードN1,iに送信する。
2. H1(H0(R))および
【0221】
【数15】
【0222】
を受信した後、N1,iはさらに、H1(H0(R))を
【0223】
【数16】
【0224】
および
【0225】
【数17】
【0226】
と共に各隣接ノード
【0227】
【数18】
【0228】
に送信する。
3. N1,i,jがH1(H0(R))および
【0229】
【数19】
【0230】
【0231】
【数20】
【0232】
を受信する。
【0233】
ピア発見ステップ1-3を実行することによって、NkはH1(H0(R))を公開鍵N1およびN1,1と共に受信するので、勝利チェーンNk、N1,1、N1が形成される。チェーンに対する支払を決済するためのプロトコルは次の通りである。
【0234】
9.2.2 決済段階:
4. NkがデータDをm個のデータパケットDiへと分割し、1≦i≦mである。たとえば、データDが128kbのサイズを有する場合、Nkは、それを、各々32kbのサイズであるm=4個のパケットDiに分割することができる。
各データパケットDiに対して、以下を実行する。
5. NkがデータパケットDiを暗号化する。
【0235】
【数21】
【0236】
6. NkがEiをN1,1に送信し、N1,1がビットコイントランザクションを通じてx BSVの報酬をNkに支払う。
7. N1,1がEiをNkから受信すると、N1,1
【0237】
【数22】
【0238】
に関連する秘密鍵を使用して暗号化されたデータEiを復号し、
【0239】
【数23】
【0240】
を取得する。
【0241】
N1,1は、H0(R):H1(H0(R))をハッシュし、要求を検証することによって、正当性を確認する。正当性確認が失敗する場合、プロセスは停止する。
8. N1,1が、N1に向けられた暗号化されたデータを抽出する。
【0242】
【数24】
【0243】
9. N1,1
【0244】
【数25】
【0245】
をN1に送信し、N1はビットコイントランザクションを通じてx+y BSVの報酬をN1,1に支払う。
10. N1
【0246】
【数26】
【0247】
に関連する秘密鍵を使用して
【0248】
【数27】
【0249】
を復号して、
H0(R)||Di
を取得する。
【0250】
N1は、H0(R):H1(H0(R))をハッシュし、要求を検証することによって、正当性を確認する。正当性確認が失敗する場合、プロセスは停止する。
11. ステップ5に戻り、次のデータパケットを取り出す。
【0251】
以下の表は各ノードに対するインセンティブを要約する。
【0252】
【表2】
【0253】
N1,1のインセンティブに対する根拠は次の通りである。N1,1はステップ6においてx BSVをNkに支払い、N1,1はステップ9においてN1からy+x BSVを受け取る。したがって、N1,1の利幅は各データパケットに対してy BSVである。
【0254】
以下は、暗号化フォーマットがどのように不正を防ぐかを説明する。
・プリペンドされたハッシュ:N1がP2Pネットワークにおいてデータに対する複数の要求を行う場合、各々の暗号化されたデータEiおよび
【0255】
【数28】
【0256】
はH0(R)を含む。このようにして、N1,1とN1は、暗号化されたデータがどの要求に関連付けられるかを知る。
・暗号化レイヤ:Nkはステップ5において
【0257】
【数29】
【0258】
【0259】
【数30】
【0260】
の両方を用いて各パケットDiを暗号化するので、これはN1がN1,1を騙すことを次のように防ぐ。Nk
【0261】
【数31】
【0262】
だけを用いてデータパケットDiを暗号化する場合、
【0263】
【数32】
【0264】
N1は、NkとN1,1との間の接続を盗聴することによって、N1,1に宛てられたデータを取得して復号することができる。この場合、N1,1は暗号化されたデータパケットに対して支払うが、それをN1に送信するとき、N1はすでにパケットDiを獲得しているので、支払を拒否する。
【0265】
Nk
【0266】
【数33】
【0267】
【0268】
【数34】
【0269】
の両方を用いて各パケットDiを暗号化する場合、N1は、盗聴しても、暗号化されたデータ
【0270】
【数35】
【0271】
から何の情報も得ることができない。
【0272】
データ品質を確認し、N1により必要とされる品質をNkから受信される品質と照合することは、難しい問題である[7]。我々のシステムは、N1,1とN1に対してある程度の保護を実装する。Nkが不正に振る舞い、データ品質が適切ではない場合、Nkは、多くても1つの不正なデータパケットDiに対して支払うようにしかN1,1とN1を騙すことができず、Nkへの後続のデータパケットおよび支払は拒否される。
【0273】
データ品質の不一致の場合、Nkの隣接ピアであるN1,1は、Nkが不正を行ったという公開の証拠をブロックチェーン上に有する後続の支払を減らすことができる。不正が続く場合、N1,1はNkを認証機関に報告し、Nkをネットワークから切断することができる。
【0274】
ノードは、複数のIPアドレスおよび関連する身元証明をネットワーク全体で使用し、それにより異なるエンティティであるように見える場合、身元を複製していると言われる。Sybil攻撃を通じて、ノードは、より多くの報酬を得ようとして、自身の身元を複製することができる。そのような攻撃がチェーン報酬プロトコルにもたらす影響は、不正ノードが偽の身元にデータを送信することによってフィーを増やすことができるというものである。これは、ネットワークセットアップ段階において異なる身元を同じノードに発行しないように認証機関に求めることによって、防がれ得る。
【0275】
正当なノードには、証明なしでノードからの接続を受け入れる動機がなく、それは、このことが、支払う報酬の増大につながる可能性があるからである。不正ノードは、コピーを自身に付加することでしかネットワークにおいて自身の存在を複製することができない。我々のP2Pネットワークにおいて、N1,1の不正が勝利チェーンNk、N1,1、N1,1、N1をもたらすと仮定する。この攻撃を実行することによって、N1,1は、勝利チェーンはより長かったとN1に確信させることによって、N1から受け取る報酬を増やす。
【0276】
すべてのトランザクションはブロックチェーンに記録されているので、N1は、N1,1が勝利チェーンに沿って自身を複製していたかどうかを確認し、支払を拒否することができる。その上、ノードNkが、ステップ3において受信する公開鍵を重複について確認するのは簡単である。シンクノードは、重複する身元について確認を行わず、したがって不正な計画に参加する場合、不正な挙動に対する責任を負い得る。
【0277】
9.3 フラッディングおよびチェーン報酬
セクション9.1および9.2のプロトコルは、P2Pネットワークにおける要求とデータの伝播のためのインセンティブ機構へと組み合わせられ得る。
・ピア発見:N1から開始して、セクション9.1において与えられるステップ1-4を実行する。
・決済:要求がNkに到達すると、セクション9.2において与えられるステップ4-11を実行する。
【0278】
このプロトコルは、セクション9.1および9.2のプロトコルを次のように改善する。
・セクション9.1では、データDはP2Pネットワーク構造の外側でNkからN1に伝送されたので、NkとN1は、データ伝送遅延があり得る異なるインフラストラクチャを使用しなければならない。しかしながら、既存のP2Pネットワーク構造では、N1は、その要求トランザクションにロックタイムを追加することによって遅延を推定することができる。したがって、セクション9.2のプロトコルの決済段階を使用してデータを伝送することによって、伝送遅延に対する制御を追加する。
・セクション9.2のプロトコルでは、ノードN1,2は勝利チェーンの一部ではなく、以降の要求の転送を止め得る。要求はブロックチェーンに対して証明されないので、N1はN1,2がプロトコルに従っていないことを証明できない。したがって、フラッディング報酬を提供することによって、要求を転送することについてN1,2にインセンティブを与える。
【0279】
10. さらなる所見
開示される技法の他の変形または使用事例は、本明細書の開示が与えられれば当業者に明らかになり得る。本開示の範囲は、説明される実施形態ではなく、添付の特許請求の範囲だけによって限定される。
【0280】
たとえば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上記の説明は全般に任意のブロックチェーンに当てはまり得ることが理解されるだろう。すなわち、本発明は、決してビットコインブロックチェーンに限定されない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上でのあらゆる言及はそれぞれ、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への言及で置き換えられ得る。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上で説明されたように、ビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の説明される特性の一部またはすべてを共有し得る。
【0281】
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成し、公開し、広め、および記憶するという説明された機能の少なくともすべてを実行する。これらの機能のすべてではなく1つまたはいくつかしか実行しない他のネットワークエンティティ(またはネットワーク要素)があり得ることは排除されない。すなわち、ネットワークエンティティは、ブロックを作成して公開することなく、ブロックを広めるおよび/または記憶するという機能を実行し得る(これらのエンティティは好ましいビットコインネットワーク106のノードであると考えられないことを思い出されたい)。
【0282】
本発明の他の実施形態では、ブロックチェーンネットワーク106はビットコインネットワークではなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を作成し、公開し、広め、および記憶するという機能のすべてではなく少なくとも1つまたはいくつかを実行し得ることは排除されない。たとえば、それらの他のブロックチェーンネットワーク上では、「ノード」は、ブロック151を作成して公開するが、それらのブロック151を他のノードに記憶しないおよび/または広めないように構成される、ネットワークエンティティを指すために使用され得る。
【0283】
さらにより一般的には、上の「ビットコインノード」104という用語へのあらゆる言及は、「ネットワークエンティティ」または「ネットワーク要素」という用語で置き換えられてもよく、そのようなエンティティ/要素は、ブロックを作成し、公開し、広め、および記憶するという役割の一部またはすべてを実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照して上で説明されたのと同じ方法でハードウェアで実装され得る。
【0284】
上の実施形態は例として説明されるだけであることが理解されるだろう。より一般的には、以下の陳述の任意の1つまたは複数に従って、方法、装置、またはプログラムが提供され得る。
【0285】
陳述1.ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのうちのターゲットノードが、ターゲットデータアイテムへのアクセス権を有し、方法が、要求P2Pノードによって実行され、
第2のハッシュ値を取得するステップであって、第2のハッシュ値が、第1のハッシュ値を生成するために第1のハッシュ関数を用いて少なくともデータ要求をハッシュし、次いで、第2のハッシュ値を生成するために第2のハッシュ関数を用いて少なくとも第1のハッシュ値をハッシュすることによって生成され、データ要求が、ターゲットデータアイテムと関連付けられる、ステップと、
要求P2Pノードに接続される1つまたは複数のP2Pノードに第2のハッシュ値および要求P2Pノードの公開鍵を送信するステップであって、P2Pノードのチェーンが、要求P2PノードとターゲットP2Pノードとの間に形成され、チェーンの中の各P2Pノードが、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続され、チェーンの中の各P2Pノードが、チェーンの中の次のP2Pノードに、第2のハッシュ値およびチェーンの中の各々のそれぞれの先行するP2Pノードに関連するそれぞれの公開鍵を送信するように構成され、それにより、ターゲットP2Pノードが、第2のハッシュ値および1つまたは複数のそれぞれの公開鍵を受信する、ステップと
を含み、
ターゲットP2Pノードが、ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットへと分割し、要求P2Pノードの公開鍵を使用して第1のハッシュ値と共に1つまたは複数のそれぞれのデータパケットの各々を暗号化して1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成し、受信された1つまたは複数のそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化することによって、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するように構成され、方法は、
要求P2Pノードに接続されるチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得するステップであって、要求P2Pノード以外のチェーンの中の各々のそれぞれのP2Pノードが、チェーンの中の次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得し、それぞれのP2Pノードに関連するそれぞれの秘密鍵を使用して1つまたは複数の暗号化されたメッセージを復号し、1つまたは複数の暗号化されたメッセージをチェーンの中の前のそれぞれのP2Pノードに送信し、それにより、1つまたは複数の最後の暗号化されたメッセージが、ターゲットP2Pノードから要求P2Pノードへチェーンに沿って送信されるにつれて復号に成功する、ステップと、
1つまたは複数のそれぞれの最初の暗号化されたメッセージを復号して1つまたは複数のそれぞれのデータパケットを取得し、それに基づいてターゲットデータアイテムを構築するステップと、
要求P2Pノードに接続されるチェーンの中のそれぞれのP2Pノードから1つまたは複数の最初の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンネットワークに提出するステップと
を含む。
【0286】
陳述2.チェーンの中の次のそれぞれのP2Pノードから1つまたは複数の暗号化されたメッセージを取得するチェーンの中の各P2Pノードが、チェーンの中のそれぞれの次のP2Pノードから1つまたは複数の暗号化されたメッセージを取得したことを証明するために、1つまたは複数のそれぞれの証明トランザクションをブロックチェーンネットワークに提出するように構成される、陳述1の方法。
【0287】
陳述3.各々のそれぞれの最初の暗号化されたメッセージを復号するステップが、第1のハッシュ値候補およびそれぞれのデータパケットを明らかにし、方法が、
第2のハッシュ関数を用いて第1のハッシュ値候補をハッシュして第2のハッシュ値候補を生成するステップと、
第2のハッシュ値候補が第2のハッシュ値と一致することを検証するステップとを含む、陳述1または陳述2の方法。
【0288】
陳述4.要求P2Pノードに接続される1つまたは複数のP2Pノードへの第2のハッシュ値の前記送信が、第2のハッシュ値を1つまたは複数のP2Pノードに直接送信することを含む、先行する陳述のいずれかに記載の方法。
【0289】
陳述5.要求P2Pノードに接続される1つまたは複数のP2Pノードへの第2のハッシュ値の前記送信が、要求トランザクションをブロックチェーンネットワークに提出するステップを含み、要求トランザクションが、第2のハッシュ値および1つまたは複数のそれぞれの出力を含み、各々のそれぞれの出力が、P2Pノードのそれぞれのノードのそれぞれの公開鍵にロックされる、陳述1から4のいずれかの方法。
【0290】
陳述6.ターゲットデータアイテムが、複数のデータパケットへと分割される、先行する陳述のいずれかに記載の方法。
【0291】
陳述7.それぞれのP2Pノードからの1つまたは複数の最初の暗号化されたメッセージの前記取得が、1つまたは複数の最初の暗号化されたメッセージをそれぞれのP2Pノードから直接取得することを含む、先行する陳述のいずれかに記載の方法。
【0292】
陳述8.ブロックチェーンが、1つまたは複数のそれぞれのデータトランザクションを含み、各々のそれぞれのデータトランザクションが、それぞれの最初の暗号化されたメッセージを含み、それぞれのP2Pノードからの1つまたは複数の最初の暗号化されたメッセージの前記取得が、ブロックチェーンから1つまたは複数の最初の暗号化されたメッセージを取得することを含む、先行する陳述のいずれかに記載の方法。
【0293】
陳述9.第2のハッシュ値の前記取得が、第2のハッシュ値を生成することを含む、先行する陳述のいずれかに記載の方法。
【0294】
代替として、第2のハッシュ関数は、異なるP2Pノードまたは信用される第三者から取得され得る。
【0295】
陳述10.第1のハッシュ関数と第2のハッシュ関数とが、同じハッシュ関数である、先行する陳述のいずれかに記載の方法。
【0296】
陳述11.第1のハッシュ関数と第2のハッシュ関数とが、異なるハッシュ関数である、陳述1から9のいずれかの方法。
【0297】
陳述12.第1のハッシュ関数が、暗号学的ハッシュ関数であり、および/または第2のハッシュ関数が、暗号学的ハッシュ関数である、先行する陳述のいずれかに記載の方法。
【0298】
陳述13.データ要求が、ターゲットデータアイテムのハッシュに基づく、先行する陳述のいずれかに記載の方法。
【0299】
陳述14.ピアツーピア(P2P)ネットワークを介してデータ伝送を調整するためにブロックチェーンを使用するコンピュータ実装方法であって、P2Pネットワークが、複数のP2Pノードを備え、各P2Pノードが、少なくとも1つの他のP2Pノードに接続され、それぞれの公開鍵と関連付けられ、P2Pノードのうちのターゲットノードが、要求P2Pノードによって要求されるターゲットデータアイテムへのアクセス権を有し、方法が、ターゲットP2Pノードによって実行され、
第2のハッシュ値および1つまたは複数の公開鍵を取得するステップであって、各公開鍵がそれぞれのP2Pノードと関連付けられ、1つまたは複数の公開鍵のうちの1つが、要求P2Pノードの公開鍵であり、他の1つまたは複数の公開鍵の各々が、要求P2PノードとターゲットP2Pノードとの間のP2Pノードのチェーンに属するそれぞれのP2Pノードと関連付けられ、チェーンの中の各P2Pノードが、チェーンの中の先行するP2Pノードおよび/またはチェーンの中の次のP2Pノードに接続される、ステップと、
第2のハッシュ値が第1のハッシュ値に基づくと決定するステップであって、第1のハッシュ値が、ターゲットデータアイテムに関連するデータ要求に基づく、ステップと、
ターゲットデータアイテムを1つまたは複数のそれぞれのデータパケットに分割するステップと、
要求P2Pノードの公開鍵を使用して第1のハッシュ値と共に1つまたは複数のそれぞれのデータパケットの各々を暗号化して、1つまたは複数のそれぞれの最初の暗号化されたメッセージを生成するステップと、
チェーンの中のそれぞれのP2Pノードに関連するそれぞれの公開鍵の各々を用いて1つまたは複数のそれぞれの最初の暗号化されたメッセージを暗号化して、1つまたは複数のそれぞれの最後の暗号化されたメッセージを生成するステップと、
ターゲットP2Pノードに接続されるチェーンの中のP2Pノードに1つまたは複数のそれぞれの最後の暗号化されたメッセージを送信するステップと
を含み、
1つまたは複数のそれぞれの証明トランザクションが、1つまたは複数のそれぞれの最後の暗号化されたメッセージの送信を証明するためにブロックチェーンネットワークへ提出される、コンピュータ実装方法。
【0300】
陳述15. 1つまたは複数のそれぞれの証明トランザクションが、ターゲットP2Pノードによってブロックチェーンネットワークへ提出される、陳述14の方法。
【0301】
陳述16.
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを備える処理装置とを備え、メモリが、処理装置上で実行されるように配置されるコードを記憶し、コードが、処理装置上で実行されると、陳述1から15のいずれかの方法を実行するように構成される、コンピュータ機器。
【0302】
陳述17.コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されると、陳述1から15のいずれかの方法を実行するように構成される、コンピュータプログラム。
【0303】
本明細書で開示される別の態様によれば、要求P2PノードおよびターゲットP2Pノードのアクションを備える方法が提供され得る。
【0304】
本明細書で開示される別の態様によれば、要求P2PノードおよびターゲットP2Pノードのコンピュータ機器を備えるシステムが提供され得る。
【符号の説明】
【0305】
101 インターネット、パケット交換ネットワーク
102 コンピュータ端末、機器
103 ユーザ
104 ブロックチェーンノード
105 クライアントアプリケーション
106 P2Pネットワーク
107 サイドチャネル
150 ブロックチェーン
151 ブロック
152 トランザクション
153 ジェネシスブロック
154 プール
155 ブロックポインタ
201 ヘッダ
202 入力
203 出力
401 トランザクションエンジン
402 UIレイヤ
451 プロトコルエンジン
452 スクリプトエンジン
454 アプリケーションレベル決定エンジン
455 ブロックチェーン関連機能モジュール
500 UI
501 P2Pノード
502 データエントリフィールド
503 情報要素、UI要素
【国際調査報告】