(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-06
(45)【発行日】2024-12-16
(54)【発明の名称】ブロックチェーンオーバーレイネットワークへの鍵のマッピング
(51)【国際特許分類】
H04L 9/08 20060101AFI20241209BHJP
H04L 9/32 20060101ALI20241209BHJP
【FI】
H04L9/08 C
H04L9/08 F
H04L9/32 200Z
(21)【出願番号】P 2022539037
(86)(22)【出願日】2020-08-24
(86)【国際出願番号】 IB2020057894
(87)【国際公開番号】W WO2021130557
(87)【国際公開日】2021-07-01
【審査請求日】2023-07-25
(32)【優先日】2019-12-24
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】デイヴィーズ,ジャック
(72)【発明者】
【氏名】ライト,クレイグ スティーヴン
【審査官】金沢 史明
(56)【参考文献】
【文献】国際公開第2019/133568(WO,A1)
【文献】国際公開第2019/143850(WO,A1)
【文献】特開2018-152717(JP,A)
【文献】米国特許出願公開第2019/0149325(US,A1)
【文献】The Metanet,2019年12月10日,pp. 1-17,[2024年7月25日検索], インターネット<URL: http://web.archive.org/web/20191209171231/https://nchain.com/app/uploads/2019/06/The-Metanet-Technical-Summary-v1.0.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/08
H04L 9/32
(57)【特許請求の範囲】
【請求項1】
ブロックチェーンのデータストレージトランザクションにオーバーレイされたオーバーレイネットワークを管理する方法であって、前記オーバーレイネットワークのデータコンテンツが前記データストレージトランザクションのペイロードに格納され、オーバーレイ層リンクが前記データストレージトランザクション間で定義され、前記方法は、第1のコンピュータ機器上で実行される第1のソフトウェアモジュールによって、
前記オーバーレイネットワークのグラフ構造を識別することと、ここで、前記グラフ構造は複数のノードとノード間のエッジとを含み、前記ノードの各々は前記データストレージトランザクションのうちの異なるそれぞれ1つに対応し、前記エッジの各々は前記オーバーレイ層リンクのうちの異なるそれぞれ1つに対応し、各ノードは、前記ブロックチェーンへの子
データストレージトランザクションの書き込みを認可するために、前記オーバーレイネットワークの前記グラフ構造における子データストレージトランザクションの入力に署名するためのそれぞれの第1の鍵に関連付けられ、前記第1の鍵は第1のシードから生成され、
第2のシードに適用される子鍵導出(CKD)関数を使用して、前記オーバーレイネットワークと同じグラフ構造を有する第2の鍵の階層セットを決定することと、ここで、各第2の鍵は、前記グラフ構造においてそれぞれの前記データストレージトランザクションと同じ位置にある前記ノードのうちの異なるそれぞれ1つに対応し、前記第2の鍵は、前記データストレージトランザクションの入力に署名するために使用されるのではなく、代わりに追加の機能を有効にするために提供される、
を含む、方法。
【請求項2】
前記第1のシードに適用されるCKD関数を使用して、前記第1の鍵を、前記オーバーレイネットワークおよび前記第2の鍵のセットと同じグラフ構造を有する階層鍵セットの鍵として決定することをさらに含み、ここで、各第1の鍵は、前記グラフ構造においてそれぞれの前記ノードと同じ位置にある前記ノードのうちの異なるそれぞれ1つに対応する、
請求項1に記載の方法。
【請求項3】
前記第1のソフトウェアモジュールから、前記グラフ構造における前記位置のうちの1つの指示を第2のソフトウェアモジュールに通信し、したがって、前記第2のソフトウェアモジュールが、前記通信された位置と、前記第1のシードと、前記第1の鍵に使用される前記CKD関数とに基づいて、その位置にある前記ノードのそれぞれの前記第1の鍵を決定することを可能にすること
をさらに含
み、
前記第2のソフトウェアモジュールは、前記第1のコンピュータ機器または第2のコンピュータ機器上で実行される、
請求項1または2に記載の方法。
【請求項4】
前記第1のシードも前記第2のソフトウェアモジュールに通信され、前記第2のソフトウェアモジュールによる前記決定は、前記第2のソフトウェアモジュールに通信された前記第1のシードに基づく、請求項3に記載の方法。
【請求項5】
前記第1のシードは前記第2のソフトウェアモジュールに事前に知られており、前記第2のソフトウェアモジュールによる前記決定は前記第1のシードの事前知識に基づく、請求項3に記載の方法。
【請求項6】
前記第1の鍵に使用される前記CKD関数の指示も第2のソフトウェアモジュールに通信され、前記第2のソフトウェアモジュールによる前記決定は、前記第1のソフトウェアモジュールによって示された前記CKD関数に基づく、請求項3、4または5に記載の方法。
【請求項7】
前記CKD関数は前記第2のソフトウェアモジュールに事前に知られており、前記第2のソフトウェアモジュールによる前記決定は前記CKD関数の事前知識に基づく、請求項3、4または5に記載の方法。
【請求項8】
前記子データストレージトランザクションのうちの1つまたは複数の各々は、別のトランザクションのそれぞれのファンディング出力を指し示すそれぞれの入力を含み、それぞれの前記入力はそれぞれのロック解除スクリプトを含み、それぞれの前記ファンディング出力はそれぞれのロックスクリプトを含み、それぞれの前記ロックスクリプトは、前記ブロックチェーンへの記録のためにそれぞれの前記データストレージトランザクションを妥当性確認するために、オーバーレイグラフ構造におけるそれぞれの親データストレージトランザクションの前記第1の鍵に基づく暗号署名がそれぞれの前記ロック解除スクリプトに含まれることを必要とする、請求項1から
7のいずれか一項に記載の方法。
【請求項9】
各それぞれのファンディング出力は、それぞれの前記親データストレージトランザクション以外のそれぞれのファンディングトランザクションの出力である、請求項
8に記載の方法。
【請求項10】
各ファンディングトランザクションの前記入力は、前記ブロックチェーンへの記録のために前記ファンディングトランザクションを妥当性確認させるために、それぞれのファンディング鍵に基づく暗号署名を含み、それぞれの前記ファンディングトランザクションの前記出力は、前記ブロックチェーンへのそれぞれの前記データストレージトランザクションの記録にファンディングするためのデジタル資産の額を指定する、請求項
9に記載の方法。
【請求項11】
前記オーバーレイ層リンクの各々は、前記データストレージトランザクションのうちの親と子との間のリンクであり、前記オーバーレイ層リンクは、前記子の前記ペイロードに前記親のそれぞれのトランザクションIDを含めることによってオーバーレイ層において形成される、請求項1から
10のいずれか一項に記載の方法。
【請求項12】
前記第2のソフトウェアモジュールは、前記第2のシードへのアクセスが与えられない、請求項
3から7のいずれか一項または請求項3から7に従属した場合の請求項8から11のいずれか一項に記載の方法。
【請求項13】
前記第2の鍵は難読化鍵であり、前記追加の機能は、それぞれの前記ノードのそれぞれの前記データストレージトランザクションのデータコンテンツを難読化および/または難読化解除することを含む、請求項1から
12のいずれか一項に記載の方法。
【請求項14】
前記難読化鍵は暗号化鍵であり、前記追加の機能は、それぞれの前記ノードのそれぞれの前記データストレージトランザクションのデータコンテンツを暗号化および/または解読することを含む、請求項
13に記載の方法。
【請求項15】
前記第2の鍵はファンディング鍵であり、前記追加の機能は、前記ブロックチェーンに記録されるべきそれぞれの前記ノードのそれぞれの前記データストレージトランザクションにファンディングすることを含む、請求項1から
12のいずれか一項に記載の方法。
【請求項16】
前記第2の鍵はアプリケーション層鍵であり、前記追加の機能は、それぞれの前記ノードのそれぞれの前記データストレージトランザクションに関連して実行されるべきアプリケーション層機能を含む、請求項1から
12のいずれか一項に記載の方法。
【請求項17】
第3のシードに適用されるCKDアルゴリズムを使用して、前記オーバーレイネットワークおよび第2の鍵のセットと同じグラフ構造を有する第3の鍵の階層セットを決定することをさらに含み、ここで、各第3の鍵は、前記グラフ構造においてそれぞれの前記ノードと同じ位置にある前記ノードのうちの異なるそれぞれ1つに対応し、前記第3の鍵は、第3の機能を有効にするためのものである、
請求項1から
16のいずれか一項に記載の方法。
【請求項18】
少なくとも前記第1のシードおよび第2のシードは同じマスタシードから導出される、請求項1から
17のいずれか一項に記載の方法。
【請求項19】
前記第2のソフトウェアモジュールは、前記第1のコンピュータ機器とは別個の第2のコンピュータ機器上で実行される、請求項
3から7のいずれか一項または請求項3から7に従属した場合の請求項8から18のいずれか一項に記載の方法。
【請求項20】
前記第1のコンピュータ機器は第1の当事者のコンピュータ機器であり、前記第2のコンピュータ機器は前記第1の当事者とは別個の第2の当事者のコンピュータ機器である、請求項
19に記載の方法。
【請求項21】
前記方法は、前記第2の当事者に前記第2の鍵を明らかにせずに、前記データストレージトランザクションのうちの1つまたは複数を前記ブロックチェーンに記録させることを前記第2の当事者に委託するために、前記第1の当事者によって使用される、請求項
20に記載の方法。
【請求項22】
前記方法は、前記第2の当事者がそこに格納された前記データコンテンツを難読化解除することを可能にせずに、前記データストレージトランザクションのうちの1つまたは複数を前記ブロックチェーン上に記録させることを前記第2の当事者に委託するために前記第1の当事者によって使用される、請求項
13または
14に従属する請求項
21に記載の方法。
【請求項23】
前記第2のソフトウェアモジュールは、前記第1のソフトウェアモジュールと同じ第1のコンピュータ機器上で実行される、請求項
3から7のいずれか一項または請求項3から7のいずれか一項に従属した場合の請求項8から18のいずれか一項に記載の方法。
【請求項24】
前記データコンテンツは、前記データストレージトランザクションのうちの1つまたは複数の使用不可能な出力に格納される、請求項1から
23のいずれか一項に記載の方法。
【請求項25】
前記オーバーレイ層リンクは、前記データストレージトランザクションの前記ペイロードの中に格納される、請求項1から
24のいずれか一項に記載の方法。
【請求項26】
前記グラフ構造はツリー構造である、請求項1から
25のいずれか一項に記載の方法。
【請求項27】
コンピュータに、請求項1から
26のいずれか一項に記載の方法を実行させるコンピュータプログラム。
【請求項28】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと
1つまたは複数の処理ユニットを含む処理装置と
を備え、
ここで、前記メモリは、前記1つまたは複数の処理ユニット上で実行するように構成され、実行されると、請求項1から
26のいずれか一項に記載の方法を実行するように構成された第1のソフトウェアモジュールを記憶する、
コンピュータ機器。
【請求項29】
方法であって、第2のソフトウェアモジュールによって
オーバーレイネットワークを表すグラフ構造におけるノードの位置の指示を第1のソフトウェアモジュールから受信することと、前記オーバーレイネットワークのデータコンテンツはブロックチェーン上のデータストレージトランザクションのペイロードに格納され、オーバーレイ層リンクは前記データストレージトランザクション間で定義され、前記グラフ構造は複数のノードとノード間のエッジとを含み、前記ノードの各々は前記データストレージトランザクションのうちの異なるそれぞれ1つに対応し、前記エッジの各々は前記オーバーレイ層リンクのうちの異なるそれぞれ1つに対応し、
前記指示された位置を使用して、第1の鍵の階層セットの中から鍵を決定することと、ここで、鍵の前記階層セットは、前記オーバーレイネットワークと同じグラフ構造を有し、各第1の鍵は、前記グラフ構造においてそれぞれの前記データストレージトランザクションと同じ位置にある前記ノードのうちの異なるそれぞれ1つに対応し、前記決定することは、前記指示された位置にある前記ノードのそれぞれの前記鍵を、その位置と、前記セット鍵に使用されるCKD関数およびシードとに基づいて決定することを含み、
前記決定された鍵を使用して、前記データストレージトランザクションの入力に署名すること以外のそれぞれの前記データストレージトランザクションに関連して機能を実行することと
を含
み、
前記第2のソフトウェアモジュールは、前記第1のソフトウェアモジュールとは別個のコンピュータ機器上でまたは同じコンピュータ機器上で実行される、方法。
【請求項30】
コンピュータに、請求項
29に記載の方法を実行させるコンピュータプログラム。
【請求項31】
コンピュータ機器であって、
1つまたは複数のメモリユニットを備えるメモリと、
1つまたは複数の処理ユニットを含む処理装置と
を備え、
前記メモリは、前記1つまたは複数の処理ユニット上で実行するように構成され、実行されると、請求項
29に記載の方法を実行するように構成された第2のソフトウェアモジュールを記憶する、
コンピュータ機器。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーン上にオーバーレイされるメタネットなどのオーバーレイネットワークに関し、オーバーレイネットワークの異なるノードにマッピングするための鍵のセットを決定することに関する。
【背景技術】
【0002】
ブロックチェーンは、分散型データ構造の形態を指し、ブロックチェーンの複製コピーが、ピアツーピア(P2P)ネットワーク内の複数のノードの各々において維持される。ブロックチェーンは、データブロックのチェーンを含み、各ブロックは1つまたは複数のトランザクションを含む。各トランザクションは、1つまたは複数のブロックにまたがり得るシーケンス内の先行するトランザクションを指し示し得る。トランザクションは、新しいブロックに含まれるためにネットワークにサブミットされ得る。新しいブロックは、「マイニング」として知られるプロセスによって作成され、このプロセスは、複数のマイニングノードがそれぞれ、「プルーフオブワーク」を実行しようと競うこと、すなわち、ブロックに含まれるのを待っている保留中のトランザクションのプールに基づいて暗号パズルを解くことを伴う。
【0003】
従来、ブロックチェーンにおけるトランザクションは、デジタル資産、すなわち価値の蓄蔵として機能するデータを通信するために使用される。しかしながら、ブロックチェーンは、ブロックチェーンの上に追加の機能を重ねるために活用することもできる。例えば、ブロックチェーンプロトコルは、トランザクションの出力における追加のユーザデータの格納を可能にし得る。最新のブロックチェーンでは、単一のトランザクション内に格納可能な最大データ容量が増えており、より複雑なデータを組み込むことが可能である。例えば、これを使用して、ブロックチェーンに電子文書を格納したり、さらにはオーディオまたはビデオデータを格納したりすることができる。
【0004】
ネットワーク内の各ノードは、フォワード、マイニング、および格納という3つの役割のうちのいずれか1つ、2つ、またはすべてを担うことができる。フォワーディングノードは、ネットワークのノード全体にトランザクションを伝搬する。マイニングノードは、ブロックへのトランザクションのマイニングを実行する。ストレージノードは各々が、ブロックチェーンのマイニングされたブロックのそれら自体のコピーを格納する。ブロックチェーンにトランザクションを記録させるために、当事者は、伝搬されるべきネットワークのノードのうちの1つにトランザクションを送信する。トランザクションを受信するマイニングノードは、トランザクションを新しいブロックにマイニングしようと競い合い得る。各ノードは、同じノードプロトコルを尊重するように構成され、そのノードプロトコルには、トランザクションが有効であるための1つまたは複数の条件が含まれる。無効なトランザクションは、伝搬もブロックへのマイニングもされない。トランザクションが妥当性確認(validate)され、それによってブロックチェーン上に受け入れられたと仮定すると、トランザクション(任意のユーザデータを含む)は、不変の公開記録としてP2Pネットワーク内のノードの各々に格納されたままになる。
【0005】
プルーフオブワークパズルを解くのに成功して最新のブロックを作成したマイナーは、典型的に、新しい額のデジタル資産を生成する「生成トランザクション」と呼ばれる新しいトランザクションで報酬が与えられる。ブロックをマイニングするためには大量の計算リソースを必要とし、二重支出の試みを含むブロックは他のノードによって受け入れられない可能性が高いので、プルーフオブワークは、それらのブロックに二重支出トランザクションを含めることによって、マイナーがシステムで不正を行わないためのインセンティブを与える。
【0006】
「出力ベース」のモデル(UTXOベースモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力と1つまたは複数の出力とを含む。任意の使用可能な出力は、デジタル資産の額を指定する要素を含み、これはUTXO(「未使用トランザクション出力」)と呼ばれることもある。出力は、出力を償還するための条件を指定するロックスクリプトをさらに含み得る。各入力は、先行するトランザクションにおけるそのような出力へのポインタを含み、指し示された出力のロックスクリプトをロック解除するためのロック解除スクリプトをさらに含み得る。そのため、トランザクションのペアを考慮して、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定する少なくとも1つの出力を含み、出力をロック解除する1つまたは複数の条件を定義するロックスクリプトを含む。第2のターゲットトランザクションは、第1のトランザクションの出力へのポインタを含む少なくとも1つの入力と、第1のトランザクションの出力をロック解除するためのロック解除スクリプトとを含む。
【0007】
そのようなモデルでは、第2のターゲットトランザクションがP2Pネットワークに送られて伝搬されブロックチェーンに記録されるとき、各ノードで適用される有効性の基準のうちの1つは、ロック解除スクリプトが第1のトランザクションのロックスクリプトで定義された1つまたは複数の条件のすべてを満たすことである。もう1つは、第1のトランザクションの出力が別の先の有効なトランザクションによってまだ償還されていないということである。これらの条件のいずれかにしたがってターゲットトランザクションが無効であることを発見したノードは、それを伝搬することも、ブロックチェーンに記録されるブロックへとマイニングするために含めることもしない。
【0008】
トランザクションモデルの別のタイプは、アカウントベースのモデルである。この場合、各トランザクションは、一連の過去のトランザクションにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個にマイナーによって格納され、絶えず更新される。
【0009】
ブロックチェーンネットワークは、すでに、インターネットなどの基礎となるネットワーク上にオーバーレイされたオーバーレイネットワークの一種である。しかしながら、ブロックチェーン上にオーバーレイネットワークのさらなる層をオーバーレイすることも可能である。この例はメタネットとして知られている。メタネットの各ノードは、ブロックチェーン上の異なるトランザクションである。データコンテンツおよびメタネットメタデータは、OP_RETURNによるトランザクションの使用不可能な出力において、そのような各トランザクションのペイロードに格納される。データコンテンツは、例えば、テキスト、画像、ビデオまたはオーディオコンテンツなどを格納するためにメタネットが使用されている実際のユーザコンテンツであり、メタデータはメタネットノード間のリンクを定義する。メタネットノード間のリンクまたはエッジは、ブロックチェーン層における使用エッジ(spending edge)に必ずしも対応しない。すなわち、所与のメタネットトランザクションの入力が、ブロックチェーン層における別のファンディングトランザクション(funding transaction)の出力を指す場合、メタネット層におけるその同じトランザクションまたはメタネットノードの親は、必ずしもファンディングトランザクションと同じトランザクションではない。代わりに、メタネット層におけるリンクまたはエッジは、メタネットのデータコンテンツ間のリンクを定義する。
【発明の概要】
【0010】
例示の目的で、この概要は、メタネット、ならびにメタネットノードおよびエッジの文脈で説明される。しかしながら、これは限定的なものではなく、より一般的には、ブロックチェーン上にオーバーレイされた任意のオーバーレイネットワークのノードおよびエッジには同じ原理を適用することができることが理解されよう。
【0011】
メタネットネットワーク内の各ノードは、何らかの所与の機能のためにそれに関連付けられた鍵を有し得、例えば、鍵は、それぞれのメタネットノードへのデータコンテンツの書き込みを認可するために必要とされる。さらに、所与の機能(例えば、書き込み)について、異なる個々の鍵が、複数の異なるメタネットノードの各々に対して必要とされ得る。したがって、複数の異なるメタネットノードのそれぞれに1つずつ、複数の鍵のセットが必要となる。
【0012】
さらに、メタネットネットワーク内の任意の所与のノードは、実際に、それに関連付けられたいくつかの異なる可能な機能のうちの1つまたは複数を有し得、ここで、そのような各機能は異なる鍵を必要とし得る。例えば、第1の鍵セットからの第1の鍵は、メタネットノードにデータコンテンツを書き込むために必要とされ得、第2の鍵セットの第2の鍵は、所与のメタネットノードのデータコンテンツを暗号化および/または解読するために必要とされ得る。したがって、複数のメタネットノードにわたって、鍵の第1のセットは、第1の関数に必要とされ得(メタネットノードごとに異なる個々の第1の鍵)、鍵の第2のセットは、第2の関数に必要とされ得る(メタネットノードごとに異なる個々の第2の鍵)。
【0013】
鍵の所与のセットは、本質的に階層的であり得る。これは、セット内で、階層内のさらに下の鍵が、潜在的に複数の世代(親、祖父母など)にわたって、階層内のさらに上の親鍵からそれぞれ導出され、最終的にセット内のすべての鍵が導出される共通のシードまでずっと戻ることを意味する。したがって、鍵セットは、ツリー構造などのグラフ構造を有するものとして説明され得、ここで、ツリー内のノードは、セット内の異なる鍵に対応し、ノード間のエッジは、1つの鍵の別の鍵からの導出を表す。シードは、ツリーの「幹」または「根」のように考えられ得る。鍵は、子鍵導出(CKD)関数と呼ばれる既知のタイプの決定論的鍵導出アルゴリズムを使用して互いに導出され得る。システム設計者が望む任意のグラフ構造にしたがってシステム設計者が鍵のセットを導出することを可能にする様々な形態のCKD関数が知られている。
【0014】
メタネットネットワーク(または同様のもの)の様々な鍵をより効果的に割り振り、管理し、および/または通信する手段を提供することが望ましい。
【0015】
特に、所与の機能のための鍵が互いに導出された所与の鍵セットの階層構造が、メタネットノードおよびメタネットの対応する部分のエッジ(またはブロックチェーン上にオーバーレイされた他のそのようなオーバーレイネットワーク)のグラフ(例えばツリー)構造に直接マッピングされる場合に望ましい。言い換えれば、ツリー構造内の所与の点におけるメタネットノード(または同様のもの)について、そのメタネットノードに対して所与の機能を実行するのに必要な鍵は、同じグラフ構造を有する対応する階層鍵セット内の同じ位置で見つかるであろう。次に、所与のメタネットノードに使用する鍵を決定するためには、関連のあるシードおよびグラフ構造内のノードの位置だけが分かればよい。
【0016】
したがって、本明細書で開示される一態様によれば、ブロックチェーンのデータストレージトランザクションにオーバーレイされたオーバーレイネットワークを管理する方法であって、オーバーレイネットワークのデータコンテンツがデータストレージトランザクションのペイロードに格納され、オーバーレイ層リンクがデータストレージトランザクション間で定義される、方法が提供される。この方法は、第1のコンピュータ機器上で実行される第1のソフトウェアモジュールによって、オーバーレイネットワークのグラフ構造を識別することを含み、グラフ構造は複数のノードとノード間のエッジとを含み、ノードの各々はデータストレージトランザクションのうちの異なるそれぞれ1つに対応し、エッジの各々はリンクのうちの異なるそれぞれ1つに対応する。各ノードは、ブロックチェーンへの子の書き込みを認可するために、オーバーレイネットワークのグラフ構造における子データストレージトランザクションの入力に署名するためのそれぞれの第1の鍵に関連付けられる。第1の鍵は第1のシードから生成される。方法は、第1のソフトウェアモジュールによって、第2のシードに適用される子鍵導出(CKD)関数を使用して、オーバーレイネットワークと同じグラフ構造を有する第2の鍵の階層セットを決定することをさらに含む。各第2の鍵は、グラフ構造においてそれぞれのデータストレージトランザクションと同じ位置にあるノードのうちの異なるそれぞれ1つに対応し、第2の鍵は、データストレージトランザクションの入力に署名するために使用されるのではなく、代わりに追加の機能(例えば、ファンディングまたは解読)を有効にするために提供される。
【0017】
オーバーレイネットワーク(例えば、メタネットネットワーク)の列挙されたグラフ構造は、オーバーレイネットワークの一部または全部の構造であり得る。
【0018】
各鍵は、公開鍵-秘密鍵ペアの秘密鍵、または公開鍵-秘密鍵ペアの公開鍵、またはその両方を含み得る。
【0019】
以前は、メタネットにおいて、メタネットと同じ構造を有する鍵の階層を生成するという考えは、メタネットデータストレージトランザクションの入力に署名するためのセット鍵(構造鍵または書き込み鍵と呼ばれることもある)に対してのみ使用されていた。ファンディングまたは暗号化に使用される鍵のセットなど、任意の他のタイプの鍵の階層構造を生成するために使用されたことはこれまでなかった。本開示は、この考えが他のそのような鍵のセットに拡張され得ることを認識している。
【0020】
例えば、これにより、所与のメタネットノードの鍵を、そのメタネットノードのグラフにおける位置を示すだけで、ソフトウェアの異なるモジュール(例えば、異なる当事者のウォレット、または所与のウォレット内の異なる分離されたモジュール)間で通信することができる。関連のある鍵セットのシードが与えられると、受信モジュールは、グラフ構造内の指示された位置にあるメタネットノードに必要な鍵を、そのノードの位置およびグラフのシードを知るだけで導出することができる。これにより、より少ないデータオーバーヘッドで鍵をシグナリングするより効率的な方法が提供される。シードがソフトウェアモジュールの選択されたグループ(例えば、送信側の当事者および受信側の当事者のみ、または選択された当事者のグループ)の間で秘密に保たれる場合、鍵自体がモジュール間でシグナリングされる必要がないので、これはより安全でもある。
【0021】
したがって、実施形態では、方法は、第1のソフトウェアモジュールから、グラフ構造における位置のうちの1つの指示を第2のソフトウェアモジュールに通信し、したがって、第2のソフトウェアモジュールが、通信された位置と、第1のシードと、第1の鍵に使用されるCKD関数とに基づいて、その位置にあるノードのそれぞれの第1の鍵を決定することを可能にすることをさらに含み得る。
【0022】
鍵の階層セットがツリー構造または他のそのようなグラフ構造を有するといわれる場合、当業者によく知られているように、これは、鍵の階層的に導出されたセットを意味する。すなわち、セット内の鍵は、構造の最上部のシードから開始して、階層的に互いに導出される。言い換えれば、グラフ構造内の各ノードは、それぞれの鍵に対応し、各エッジは、セット内の鍵のうちの1つの別の鍵からの導出に対応する。鍵の階層セットがオーバーレイネットワーク(例えばメタネット)と同じグラフ構造を有するといわれる場合、これは、鍵間の階層導出のグラフ構造が、オーバーレイネットワーク内のデータストレージトランザクション間のリンクの構造と同じであることを意味する。言い換えれば、グラフ構造内の各ノードは、セット内のそれぞれの鍵とオーバーレイネットワーク内のそれぞれのデータストレージトランザクションとの両方に対応し、グラフ構造内の各エッジは、鍵セット内のそれぞれの依存関係と、オーバーレイネットワーク内のデータストレージトランザクション間のそれぞれのリンクとに対応する。
【0023】
実施形態では、同じグラフ構造を2つ以上の異なる鍵セットに使用することができ、各鍵セットは異なる機能のためのものである(例えば、1つはデータコンテンツを暗号化および/または解読するためのものであり、もう1つはデータコンテンツの書き込みを認可するためのものである)。
【0024】
例えば、方法は、第1のソフトウェアモジュールによって、第1のシードに適用されるCKD関数を使用して、第1の鍵を、オーバーレイネットワークおよび第2の鍵セットと同じグラフ構造を有する階層鍵セットの鍵として決定することをさらに含み、ここで、各第1の鍵は、グラフ構造においてそれぞれのノードと同じ位置にあるノードのうちの異なるそれぞれ1つに対応する。
【0025】
この場合、鍵セットは、異なるシードを使用して導出されるが、同じ階層グラフ構造を有する。第2の鍵のセットを決定するために使用されるCKD関数は、第1の鍵のセットに使用されるものと同じ形態の機能であってもよく(ただし、異なるシードに適用される)、またはCKD関数の異なる形態であってもよい。
【0026】
好ましくは、第2のシードが第1のソフトウェアモジュールによって第2のソフトウェアモジュールに通信されることも、第2のソフトウェアモジュールに、任意の他の方法で第2のシードへのアクセスが与えられることもない。
【0027】
したがって、第1のソフトウェアモジュールは、メタネットグラフ構造(または同様のもの)におけるノードの位置の指示を第2のソフトウェアモジュールにシグナリングすることができるが、第2のシードを漏らすことはない。例えば、これらのモジュールは、異なる当事者のコンピュータ機器上で実行されるソフトウェアであってもよく、または所与の当事者のコンピュータ機器内で実行される異なる分離されたモジュールであってもよい。いずれにしても、第2のソフトウェアモジュールは、第1のシードにアクセスできるが、第2のシードにはアクセスできない。例えば、第1のシードは、第1のモジュールによってノード位置と共に第2のモジュールに送られ得るか、または第1のノードは、第2のモジュールに事前に知られていてもよい(例えば、第1のモジュールまたは第3のモジュールによって事前に共有されている)。これにより、第2のソフトウェアモジュールは、位置とシードとに基づいて第1の機能の鍵を導出することができるが、第2のシードへのアクセスは有さないので、同じ位置にあるノードの第2の機能の鍵を導出することはできない。
【0028】
これの例示的なアプリケーションとして、第1のソフトウェアモジュールは、顧客アリスのウォレットが含み得、第2のソフトウェアモジュールは、アリスよりも技術的専門知識を有するサービスプロバイダボブのソフトウェアが含み得る。アリスは、メタネットのノードとしてブロックチェーン上のトランザクションにアリスのデータを記録するためにボブに支払う。アリスは、ノードに書き込むための鍵をボブに通信する必要がある。しかしながら、アリスはコンテンツを暗号化することにもなり、暗号化鍵をボブに漏らすことを望まない。データをアップロードするために、ボブがデータを解読したりそれを平文で見たりできなければならない理由はない。
【0029】
第2の鍵セットのオーバーレイネットワークグラフ構造への開示されたマッピングの有利な適用の別の代替的または追加的な例は、少なくとも第1のソフトウェアモジュールについて、その鍵導出における構造が保存され、その結果、何らかの他のエンティティ(すなわち、第3のソフトウェアモジュール)が、鍵および構造におけるトランザクションの位置(およびCKD)の知識のみを使用して、データストレージトランザクション(例えば、メタネットトランザクション)に関するすべての関連のある鍵を回復することができるようになることを保証することである。
【図面の簡単な説明】
【0030】
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、単なる例として添付の図面を参照する。
【
図1】ブロックチェーンを実装するためのシステムの概略ブロック図である。
【
図2】ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す。
【
図3】ブロックチェーン上にオーバーレイされたネットワークの概略図である。
【
図4】メタネットなどのネットワークをブロックチェーン上にオーバーレイするための例示的なプロトコルを示す概略トランザクション図である。
【
図5】メタネットノードのネットワークの少なくとも一部と同じツリー構造を有する鍵の階層セットを概略的に示す。
【
図6】それぞれが鍵の階層セットを含む複数の鍵ドメインを導出するための方式を概略的に示す。
【
図7】
図6に示される方式の異なるパスタイプを概略的に示す。
【
図8】第1のソフトウェアモジュールと第2のソフトウェアモジュールとの間の鍵の通信を示す概略ブロック図である。
【
図9】第1のコンピュータ機器によって実行される方法の概略フローチャートである。
【
図10】第2のコンピュータ機器によって実行される方法の概略的なフローチャートである。
【
図11】HDウォレットフレームワークにおいて親から子の秘密鍵および公開鍵を生成するための機構を概略的に示す。
【
図12】拡張親公開鍵から子公開鍵を生成する機構を概略的に示す。
【発明を実施するための形態】
【0031】
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットなどの広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバーレイネットワーク106を形成するように構成された複数のノード104を含む。
【0032】
このサブセクションの目的のために、「ノード」は、ブロックチェーンネットワーク106のノード104を指す。後に、ノードはまた、メタネットのノード、またはブロックチェーン上にオーバーレイされた他のそのようなネットワークを指す。
【0033】
ブロックチェーンネットワーク106の各ノード104は、ピアのコンピュータ機器を含み、ノード104のうちの異なるノードは異なるピアに属する。各ノード104は、1つまたは複数のプロセッサ、例えば1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)を備える処理装置を含む。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を使用する1つまたは複数のメモリユニットを備え得る。
【0034】
ブロックチェーン150は、データブロック151のチェーンを含み、ブロックチェーン150のそれぞれのコピーは、P2Pネットワーク160内の複数のノードの各々において維持される。チェーン内の各ブロック151は、1つまたは複数のトランザクション152を含み、この文脈におけるトランザクションは、データ構造の一種を指す。データ構造の性質は、トランザクションモデルまたは方式の一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、典型的には、全体を通して1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力と少なくとも1つの出力とを含む。各出力は、出力が暗号的にロックされている(ロック解除され、それによって償還または使用されるためにはそのユーザの署名を必要とする)ユーザ103に属するデジタル資産の量を表す額を指定する。各入力は、先行するトランザクション152の出力を指し示し、それによってトランザクションをリンクする。
【0035】
ノード104のうちの少なくともいくつかは、トランザクション152をフォワードし、それによって伝搬するフォワーディングノード104Fの役割を引き受ける。ノード104のうちの少なくともいくつかは、ブロック151をマイニングするマイナー104Mの役割を引き受ける。ノード104のうちの少なくともいくつかは、ストレージノード104S(「フルコピー」ノードと呼ばれることもある)の役割を引き受け、その各々が、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに格納する。各マイナーノード104Mはまた、ブロック151にマイニングされるのを待っているトランザクション152のプール154を維持する。所与のノード104は、フォワーディングノード104、マイナー104M、ストレージノード104S、またはこれらのうちの2つもしくはすべての任意の組合せであり得る。
【0036】
所与の現在のトランザクション152jにおいて、入力(または各入力)は、トランザクションのシーケンスにおける先行するトランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還または「使用」されるべきであることを指定する。一般に、先行するトランザクションは、プール154または任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクションが有効となるために存在および妥当性確認される必要があるが、先行するトランザクション152iは、現在のトランザクション152jが作成されるときまたはネットワーク106に送信されるときに必ずしも存在する必要はない。したがって、本明細書における「先行する(preceding)」は、ポインタによってリンクされた論理シーケンスにおける先行するものを指し、必ずしも時間シーケンスにおける作成または送信の時間を指すものではなく、したがって、トランザクション152i、152jが順不同に作成または送信されることを必ずしも除外するものではない(オーファントランザクションに関する以下の説明を参照)。先行するトランザクション152iは、先のトランザクション(antecedent transaction)または先行したトランザクション(predecessor transaction)とも呼ばれる。
【0037】
現在のトランザクション152jの入力はまた、先行するトランザクション152iの出力がロックされるユーザ103aの署名を含む。次に、現在のトランザクション152jの出力は、新しいユーザ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義された額を、現在のトランザクション152jの出力において定義されたように、新しいユーザ103bに転送することができる。場合によっては、トランザクション152は、複数のユーザ(残り(change)を与えるためにそのうちの1人が元のユーザ103aであり得る)間で入力額を分割するために複数の出力を有し得る。場合によっては、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額をまとめ、現在のトランザクションの1つまたは複数の出力に再分配するために複数の入力を有することができる。
【0038】
上記は、「出力ベース」トランザクションプロトコルと称され得、未使用トランザクション出力(UTXO)タイププロトコルと称されることもある(ここでは出力はUTXOと称される)。ユーザの総残高は、ブロックチェーンに格納された任意の1つの数字で定義されるのではなく、代わりに、ユーザは、ブロックチェーン151内の多くの異なるトランザクション152全体に散在しているそのユーザのすべてのUTXOの値を照合するための特別な「ウォレット」アプリケーション105を必要とする。
【0039】
トランザクションプロトコルの代替的なタイプは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」プロトコルと称され得る。アカウントベースの場合、各トランザクションは、一連の過去のトランザクションにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別にマイナーによって格納され、絶えず更新される。そのようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者によってその暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。加えて、トランザクションにおける任意選択のデータフィールドも署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを指し示し得る。
【0040】
いずれかのタイプのトランザクションプロトコルを用いて、ユーザ103が新しいトランザクション152jを成立させることを望む場合、ユーザは新しいトランザクションをユーザのコンピュータ端末102からP2Pネットワーク106のノード104(これは、今日では典型的にはサーバまたはデータセンタであるが、原理的には他のユーザ端末であってもよい)のうちの1つに送信する。このノード104は、ノード104の各々において適用されるノードプロトコルにしたがってトランザクションが有効であるかどうかをチェックする。ノードプロトコルの詳細は、当該ブロックチェーン150において使用されているトランザクションプロトコルのタイプに対応し、全体としてトランザクションモデルを形成する。ノードプロトコルは、典型的には、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付けられたシーケンス内で前のトランザクション152iに依存する予想される署名と一致することをチェックするようにノード104に求める。出力ベースの場合、これは、新しいトランザクション152jの入力に含まれるユーザの暗号署名が、新しいトランザクションが使用する先行するトランザクション152iの出力において定義される条件と一致することをチェックすることを含み得、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名が、新しいトランザクションの入力が指し示す前のトランザクション152iの出力をロック解除することをチェックすることを少なくとも含む。いくつかのトランザクションプロトコルでは、条件は、入力および/または出力に含まれるカスタムスクリプトによって少なくとも部分的に定義され得る。代替的に、単にノードプロトコルのみによって固定されてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが有効である場合、現在のノードは、それをP2Pネットワーク106内のノード104のうちの1つまたは複数の他のノードにフォワードする。これらのノード104のうちの少なくともいくつかは、フォワーディングノード104Fとしても機能し、同じノードプロトコルにしたがって同じテストを適用し、そして、新しいトランザクション152jを1つまたは複数のさらなるノード104にフォワードし、以下同様である。このようにして、新しいトランザクションはノード104のネットワーク全体に伝搬される。
【0041】
出力ベースのモデルでは、所与の出力(例えば、UTXO)が使用されたかどうかの定義は、それがノードプロトコルにしたがって別の前方のトランザクション152jの入力によって有効に償還されたかどうかかである。トランザクションが有効であるための別の条件は、それが使用または償還しようとする先行するトランザクション152iの出力が、別の有効なトランザクションによってまだ使用/償還されていないことである。同様に、有効でない場合、トランザクション152jは、ブロックチェーンに伝搬も記録もされない。これは、使用者が同じトランザクションの出力を複数回使用しようとする二重支出を防止する。一方、アカウントベースのモデルは、アカウント残高を維持することによって二重支出を防止する。ここでも、トランザクション順序が定義されているので、アカウント残高は常に単一の定義された状態にある。
【0042】
妥当性確認に加えて、ノード104Mのうちの少なくともいくつかはまた、「プルーフオブワーク」に支えられるマイニングとして知られるプロセスにおいてトランザクションのブロックを最初に作成しようと競い合う。マイニングノード104Mにおいて、ブロック内にまだ現れていない有効なトランザクションのプールに新しいトランザクションが追加される。次いで、マイナーは、暗号パズルを解くことを試みることによって、トランザクションのプール154からトランザクション152の新しい有効ブロック151を組み立てようと競い合う。典型的には、これは、ノンスがトランザクションのプール154と連結されハッシュされたときにハッシュの出力が所定の条件を満たすような「ノンス」値を探索することを含む。例えば、所定の条件とは、ハッシュの出力が特定の所定の数の先行ゼロを有することであり得る。ハッシュ関数の特性は、その入力に対して予測不可能な出力を持つことである。したがって、この探索は、総当たりでしか実行することができないので、パズルを解こうとしている各ノード104Mでかなりの量の処理リソースを消費する。
【0043】
最初にパズルを解いたマイナーノード104Mは、これをネットワーク106に公表し、後にネットワーク内の他のノード104によって容易にチェックすることができるその解を証明として提供する(ハッシュに対する解が与えられると、ハッシュの出力が条件を満たすことをチェックすることは簡単である)。勝者がパズルを解いたトランザクションのプール154は、次いで、ストレージノード104Sとして機能するノード104のうちの少なくともいくつかによって、そのような各ノードにおいて勝者が公表した解をチェックしたことに基づいて、ブロックチェーン150内に新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーン内の前に作成されたブロック151n-1を指し示す新しいブロック151nに割り当てられる。プルーフオブワークは、新たなブロック151を作成するのに多大な労力を要するので、二重支出のリスクを低減するのに役立ち、二重支出を含むブロックは他のノード104によって拒絶される可能性が高いので、マイニングノード104Mは、二重支出がそれらのブロックに含まれないようにインセンティブが与えられる。ブロック151は、一旦作成されると、同じプロトコルにしたがってP2Pネットワーク106内の格納ノード104Sの各々で認識および維持されるので、修正することができない。ブロックポインタ155はまた、ブロック151にシーケンシャル順序を付与する。トランザクション152は、P2Pネットワーク106内の各ストレージノード104Sにおいて順序付けられたブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
【0044】
任意の所与の時間にパズルを解こうと競い合う異なるマイナー104Mは、それらがいつ解を探索し始めたかに応じて、任意の所与の時間におけるマイニングされていないトランザクションプール154の異なるスナップショットに基づいてそうしている可能性があることに留意されたい。誰がそれぞれのパズルを最初に解いても、どのトランザクション152が次の新しいブロック151nに含まれるかを定義し、マイニングされていないトランザクションの現在のプール154が更新される。次いで、マイナー104Mは、新しく定義された未処理プール154からブロックを作成しようと競い合い続け、以下同様である。2人のマイナー104Mが互いに非常に短い時間内にパズルを解いて、ブロックチェーンの相反する見解が伝搬される場合に発生し得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、フォークのどちらのプロングが最も長く成長しても、最終的なブロックチェーン150となる。
【0045】
ほとんどのブロックチェーンでは、勝利マイナー104Mには、(あるユーザから別のユーザにある額のデジタル資産を転送する通常のトランザクションとは対照的に)突如新しい量のデジタル資産を作成する特別なタイプの新しいトランザクションで自動的に報酬が与えられる。したがって、勝者ノードは、ある量のデジタル資産を「マイニング」したといわれる。この特別なタイプのトランザクションは、「生成」トランザクションと称されることがある。それは自動的に新しいブロック151nの一部を形成する。この報酬は、マイナー104Mがプルーフオブワーク競争に参加するためのインセンティブを与える。多くの場合、通常の(非生成)トランザクション152はまた、そのトランザクションが含まれたブロック151nを作成した勝利マイナー104Mにさらに報酬を与えるために、その出力の1つにおいて追加のトランザクション手数料を指定する。
【0046】
マイニングに関与する計算リソースに起因して、典型的には、マイナーノード104Mの少なくとも各々は、1つまたは複数の物理サーバユニットを含むサーバの形態をとるか、またはデータセンタ全体の形態をとる。各フォワーディングノード104Mおよび/またはストレージノード104Sもまた、サーバまたはデータセンタの形態をとり得る。しかしながら、原則として、任意の所与のノード104は、一緒にネットワーク化されたユーザ端末またはユーザ端末のグループの形態をとることができる。
【0047】
各ノード104のメモリは、そのそれぞれの1つまたは複数の役割を実行し、ノードプロトコルにしたがってトランザクション152を処理するために、ノード104の処理装置上で実行ように構成されたソフトウェアを記憶する。本明細書においてノード104に帰する任意のアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーション層、またはオペレーティングシステム層もしくはプロトコル層などの下位層、またはこれらの任意の組合せにおける1つまたは複数のアプリケーションにおいて実装され得る。また、本明細書で使用される「ブロックチェーン」という用語は、一般に、この種類の技術を指す総称であり、任意の特定の専有のブロックチェーン、プロトコルまたはサービスに限定されない。
【0048】
消費ユーザの役割を果たす複数の当事者103の各々のコンピュータ機器102もネットワーク101に接続されている。これらは、トランザクションにおいて支払人および受取人として機能するが、他の当事者に代わってトランザクションのマイニングまたは伝搬に必ずしも参加するわけではない。それらは、マイニングプロトコルを必ずしも実行するわけではない。2つの当事者103およびそれらのそれぞれの機器102、すなわち、第1の当事者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ機器102bは、例示の目的で示されている。はるかに多くのそのような当事者103およびそれらのそれぞれのコンピュータ機器102が存在し、システムに参加し得るが、便宜上、それらは図示されていないことが理解されよう。各当事者103は、個人または組織であり得る。純粋に例示として、第1の当事者103aは、本明細書ではアリスと称され、第2の当事者103bはボブと称されるが、これは限定的なものではなく、本明細書におけるアリスまたはボブへのいかなる参照も、それぞれ「第1の当事者」および「第2の当事者」と置き換えられ得ることが理解されよう。
【0049】
各当事者103のコンピュータ機器102は、1つまたは複数のプロセッサ、例えば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを含むそれぞれの処理装置を含む。各当事者103のコンピュータ機器102は、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。このメモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を使用する1つまたは複数のメモリユニットを備え得る。各当事者103のコンピュータ機器102上のメモリは、処理装置上で実行するように構成された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。本明細書において所与の当事者103に帰する任意のアクションは、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各当事者103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを備える。所与の当事者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの1つまたは複数の他のネットワーク化されたリソースを備え得る。
【0050】
クライアントアプリケーション105は、最初に、適切な1つまたは複数のコンピュータ可読記憶媒体上で任意の所与の当事者103のコンピュータ機器102に提供され得、例えば、サーバからダウンロードされ得るか、またはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのリムーバブル記憶デバイス上で提供され得る。
【0051】
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これは2つの主要な機能を有する。これらのうちの1つは、それぞれのユーザ当事者103が、ノード104のネットワーク全体に伝搬され、それによってブロックチェーン150に含まれることとなるトランザクション152を作成し、署名し、送信することを可能にすることである。もう1つは、それぞれの当事者に、その当事者が現在所有しているデジタル資産の額を報告することである。出力ベースのシステムでは、この第2の機能は、当該当事者に属するブロックチェーン150全体に散在している様々なトランザクション152の出力において定義された額を照合することを含む。
【0052】
様々なクライアント機能が、所与のクライアントアプリケーション105に統合されるものとして説明され得るが、必ずしもこれに限定されず、代わりに、本明細書で説明される任意のクライアント機能は、代わりに、例えば、APIを介してインターフェースする、または一方が他方へのプラグインである2つ以上の別個のアプリケーション一式において実装され得ることに留意されたい。より一般的には、クライアント機能は、アプリケーション層もしくはオペレーティングシステムなどの下位層、またはこれらの任意の組合せにおいて実装され得る。以下では、クライアントアプリケーション105に関して説明するが、これに限定されないことが理解されよう。
【0053】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、P2Pネットワーク106のフォワーディングノード104Fのうちの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能はトランザクション152をネットワーク106に送信することができる。クライアント105はまた、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150にクエリを行うために、ストレージノード104のうちの1つ、いくつか、またはすべてにコンタクトすることができる(または、実施形態では、ブロックチェーン150は、部分的にその公開可視性を通じてトランザクションにおける信頼を提供する公開施設であるので、実際にブロックチェーン150における他の当事者のトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルにしたがってトランザクション152を定式化し、送信するように構成される。各ノード104は、ノードプロトコルにしたがってトランザクション152を妥当性確認するように構成されたソフトウェアを実行し、フォワーディングノード104Fの場合には、トランザクション152をネットワーク106全体に伝搬させるためにそれらをフォワードするように構成される。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に進行し、一緒に所与のトランザクションモデルを実装する。ブロックチェーン150内のすべてのトランザクション152に対して同じトランザクションプロトコルが使用される(ただし、トランザクションプロトコルは、その中のトランザクションの異なるサブタイプを可能にし得る)。ネットワーク106内のすべてのノード104によって同じノードプロトコルが使用される(ただし、これは、トランザクションの異なるサブタイプを、そのサブタイプに対して定義された規則にしたがって異なって処理し、また、異なるノードが異なる役割を担い、したがってプロトコルの異なる対応する態様を実装することができる)。
【0054】
述べたように、ブロックチェーン150は、ブロック151のチェーンを含み、各ブロック151は、前述したようなプルーフオブワークプロセスによって作成された1つまたは複数のトランザクション152のセットを含む。各ブロック151はまた、ブロック151へのシーケンシャル順序を定義するために、チェーン内の前に作成されたブロック151を指し示すブロックポインタ155を含む。ブロックチェーン150は、プルーフオブワークプロセスによって新しいブロックに含まれるのを待っている有効なトランザクションのプール154も含む。各トランザクション152(生成トランザクション以外)は、トランザクションのシーケンスへの順序を定義するように、前のトランザクションへ戻るポインタを含む(注意:トランザクション152のシーケンスは分岐することが可能である)。ブロック151のチェーンは、チェーン内の最初のブロックであった発生ブロック(Gb)153までずっと戻る。チェーン150内の早期にある1つまたは複数の元のトランザクション152は、先行するトランザクションではなく発生ブロック153を指し示していた。
【0055】
所与の当事者103、例えばアリスが、ブロックチェーン150に含まれるべき新しいトランザクション152jを送信することを望むとき、アリスは、関連のあるトランザクションプロトコルにしたがって(アリスのクライアントアプリケーション105内のウォレット機能を使用して)新しいトランザクションを定式化する。次いで、アリスは、クライアントアプリケーション105から、アリスが接続されている1つまたは複数のフォワーディングノード104Fのうちの1つにトランザクション152を送信する。例えば、これは、アリスのコンピュータ102に最も近いまたは最良に接続されたフォワーディングノード104Fであり得る。任意の所与のノード104が新しいトランザクション152jを受信すると、それはノードプロトコルおよびそのそれぞれの役割にしたがってそれを処理する。これは、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たすか否かを最初にチェックすることを含み、その例については、以下でより詳細に説明する。いくつかのトランザクションプロトコルでは、妥当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替的に、条件は、単にノードプロトコルの組込み特徴であってもよく、またはスクリプトとノードプロトコルとの組合せによって定義されてもよい。
【0056】
新たに受信されたトランザクション152jが有効であると見なされるためのテストにパスすることを条件として(すなわち、それが「妥当性確認される」ことを条件として)、トランザクション152jを受信する任意のストレージノード104Sは、そのノード104Sにおいて維持されるブロックチェーン150のコピー内のプール154に新たな妥当性確認済みトランザクション152を追加する。さらに、トランザクション152jを受信する任意のフォワーディングノード104Fは、妥当性確認済みトランザクション152をP2Pネットワーク106内の1つまたは複数の他のノード104へと前方に伝搬する。各フォワーディングノード104Fは同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、それがすぐにP2Pネットワーク106全体にわたって伝搬されることを意味する。
【0057】
1つまたは複数のストレージノード104において維持されるブロックチェーン150のコピー内のプール154に認められると、マイナーノード104Mは、新しいトランザクション152を含むプール154の最新バージョンに対してプルーフオブワークパズルを解こうと競い始める(他のマイナー104Mは、プール154の古いビューに基づいてパズルを解こうと試みている可能性があるが、誰が最初に到達しても、次の新しいブロック151がどこで終わり新しいプール154がどこで開始するかを定義することとなり、最終的には、誰かが、アリスのトランザクション152jを含むプール154の一部についてパズルを解く)。新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは不変的にブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、前のトランザクションへ戻るポインタを含むので、トランザクションの順序も不変的に記録される。
【0058】
異なるノード104は、まず、所与のトランザクションの異なるインスタンスを受信し得るので、1つのインスタンスがブロック150にマイニングされる前に、どのインスタンスが「有効」であるかの矛盾する見解を有する可能性があり、この時点で、すべてのノード104は、マイニングされたインスタンスが唯一の有効なインスタンスであることに同意する。ノード104が1つのインスタンスを有効として受け入れ、次いで第2のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのノード104はこれを受け入れなければならず、最初に受け入れたマイニングされていないインスタンスを破棄する(すなわち、無効として扱う)。
【0059】
UTXOベースのモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と略記される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下では、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明する。しかしながら、これはすべての可能な実施形態に限定されない。
【0060】
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を含むデータ構造を含む。各出力203は、未使用トランザクション出力(UTXO)を含み得、これは、(UTXOがまだ償還されていない場合)別の新しいトランザクションの入力202のソースとして使用され得る。UTXOは、デジタル資産(価値の蓄蔵)の額を指定する。それはまた、他の情報の中でも、元となるトランザクションのトランザクションIDを含み得る。トランザクションデータ構造は、入力フィールド(複数可)202および出力フィールド(複数可)203のサイズを示すインジケータを含み得るヘッダ201も含み得る。ヘッダ201はまた、トランザクションのIDを含み得る。実施形態では、トランザクションIDは、(トランザクションID自体を除く)トランザクションデータのハッシュであり、マイナー104Mにサブミットされる生のトランザクション152のヘッダ201に格納される。
【0061】
アリス103aが、当該デジタル資産の額をボブ103bに転送するトランザクション152jを作成することを望むとする。
図2では、アリスの新しいトランザクション152jは「Tx
1」とラベル付けされている。これは、シーケンス内の先行するトランザクション152iの出力203においてアリスにロックされたデジタル資産の額を取り、これのうちの少なくとも一部をボブに転送する。先行するトランザクション152iは、
図2では「Tx
0」とラベル付けされている。Tx
0およびTx
1は、単なる任意のラベルである。それらは、Tx
0がブロックチェーン151内の最初のトランザクションであることも、Tx
1がプール154内のすぐ次のトランザクションであることも必ずしも意味するものではない。Tx
1は、アリスにロックされた未使用の出力203を依然として有する任意の先行する(すなわち先の)トランザクションを指し示すことができる。
【0062】
先行するトランザクションTx0は、アリスが新しいトランザクションTx1を作成した時点では、または少なくともアリスがそれをネットワーク106に送信する時点までには、すでに妥当性確認されブロックチェーン150に含まれている可能性がある。それは、その時点でブロック151のうちの1つにすでに含まれていてもよいし、プール154で依然として待機していてもよく、この場合、すぐに新しいブロック151に含まれることになる。代替的に、Tx0およびTx1を作成してネットワーク102に一緒に送信することができるか、またはノードプロトコルが「オーファン」トランザクションのバッファリングを可能にする場合には、Tx0をTx1の後に送信することさえもできる。トランザクションのシーケンスの文脈において本明細書で使用される「先行する」および「後続の」という用語は、トランザクション内で指定されているトランザクションポインタ(どのトランザクションがどの他のトランザクションを指し示すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、同様に、「先行するもの」および「後続するもの」、または「先の」および「後の」、「親」および「子」などと置き換えられ得る。これは、それらの作成、ネットワーク106への送信、または任意の所与のノード104への到着の順序を必ずしも意味するものではない。それにもかかわらず、先行するトランザクション(先のトランザクションまたは「親」)を指し示す後続するトランザクション(後のトランザクションまたは「子」)は、親トランザクションが妥当性確認されるまでおよび妥当性確認されない限り、妥当性確認されない。その親より前にノード104に到着する子は、オーファンと見なされる。それは、ノードプロトコルおよび/またはマイナー挙動に応じて、親を待つために特定の時間バッファされるかまたは破棄され得る。
【0063】
先行するトランザクションTx0の1つまたは複数の出力203のうちの1つは、本明細書ではUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、ロックスクリプトとを含み、ロックスクリプトは、後続のトランザクションが妥当性確認され、したがってUTXOが正常に償還されるために、後続のトランザクションの入力202内のロック解除スクリプトが満たさなければならない条件を定義する。典型的には、ロックスクリプトは、その額を特定の当事者(それが含まれるトランザクションの受益者)にロックする。すなわち、ロックスクリプトは、典型的には、後続のトランザクションの入力内のロック解除スクリプトに、先行するトランザクションがロックされる当事者の暗号署名が含まれるという条件を含むロック解除条件を定義する。
【0064】
ロックスクリプト(通称scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有言語で書かれたコードの一部分である。そのような言語の特定の例は、「スクリプト」(大文字S)と呼ばれる。ロックスクリプトは、トランザクション出力203を使用するためにどの情報が必要とされるか、例えばアリスの署名の要件を指定する。ロック解除スクリプトはトランザクションの出力に現れる。ロック解除スクリプト(通称scriptSig)は、ロックスクリプト基準を満たすのに必要な情報を提供するドメイン固有言語で書かれたコードの一部分である。例えば、ボブの署名を含み得る。ロック解除スクリプトは、トランザクションの入力202に現れる。
【0065】
つまり、図示の例では、Tx0の出力203内のUTXO0は、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効となるために)アリスの署名Sig PAを必要とするロックスクリプト[Checksig PA]を含む。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアからの公開鍵PAを含む。Tx1の入力202は、(例えば、実施形態ではトランザクションTx0全体のハッシュであるそのトランザクションID、TxID0によって)Tx1を指し示すポインタを含む。Tx1の入力202は、Tx0の任意の他の可能な出力の中から、UTXO0を識別するために、Tx0内のそれを識別するインデックスを含む。Tx1の入力202は、アリスが鍵ペアからのアリスの秘密鍵をデータの所定の部分(暗号では「メッセージ」と呼ばれることもある)に適用することによって作成された、アリスの暗号署名を含むロック解除スクリプト<Sig PA>をさらに含む。有効な署名を提供するためにどのデータ(または「メッセージ」)がアリスによって署名される必要があるかは、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
【0066】
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトおよびロック解除スクリプトを一緒に実行して、ロック解除スクリプトがロックスクリプトで定義されている条件(この条件は1つまたは複数の基準を含み得る)を満たすかどうかをチェックすることを含む。実施形態では、これは2つのスクリプトを連結することを含む。
<Sig PA> <PA> || [Checksig PA]
ここで、「||」は連結を表し、「<…>」はデータをスタックに置くことを意味し、「[…]」はロック解除スクリプト(この例ではスタックベースの言語)で構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなく、共通スタックを用いて次々に実行され得る。いずれにしても、一緒に実行されるとき、スクリプトは、Tx0の出力内のロックスクリプトに含まれるようなアリスの公開鍵PAを使用して、Tx1の入力内のロックスクリプトが、データの予想される部分に署名したアリスの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)はまた、この認証を実行するためにTx0命令に含まれる必要がある。実施形態では、署名されたデータは、Tx0の全体を含む(つまり、平文のデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので、含まれる必要はない)。
【0067】
公開-秘密暗号法による認証の詳細は、当業者によく知られている。基本的に、アリスが自身の秘密鍵でメッセージを暗号化することによってメッセージに署名した場合、アリスの公開鍵および平文のメッセージ(暗号化されていないメッセージ)が与えられると、ノード104などの別のエンティティは、メッセージの暗号化バージョンがアリスによって署名されたものに違いないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、これを署名としてメッセージの平文バージョンにタグ付けすることを含み、これにより、公開鍵の任意の保持者が署名を認証することができる。したがって、データの特定の部分またはトランザクションの一部などに署名することへの本明細書におけるいかなる参照も、実施形態では、データのその部分またはトランザクションの一部のハッシュに署名することを意味し得ることに留意されたい。
【0068】
Tx1内のロック解除スクリプトが、Tx0のロックスクリプト内で指定されている1つまたは複数の条件を満たす場合(つまり、図示の例では、アリスの署名がTx1内で提供され、認証された場合)、ノード104は、Tx1が有効であると見なす。それがマイニングノード104Mである場合、これは、ワークオブプルーフを待つトランザクションのプール154にそれを追加することを意味する。それがフォワーディングノード104Fである場合、トランザクションTx1をネットワーク106内の1つまたは複数の他のノード104にフォワードして、トランザクションTx1がネットワーク全体に伝搬されるようにする。Tx1が妥当性確認されてブロックチェーン150に含まれると、これは、Tx0からのUTXO0を使用済みとして定義する。Tx1は、未使用のトランザクション出力203を使用する場合にのみ有効であり得ることに留意されたい。別のトランザクション152によってすでに使用された出力を使用しようとする場合、Tx1は、他のすべての条件が満たされたとしても無効になる。したがって、ノード104はまた、先行するトランザクションTx0内の参照されたUTXOがすでに使用済みである(別の有効なトランザクションへの有効な入力をすでに形成している)かどうかをチェックする必要がある。これは、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である1つの理由である。実際には、所与のノード104は、どのトランザクション152内のどのUTXO203が使用されたかをマーキングする別個のデータベースを維持し得るが、最終的には、UTXOが使用されたかどうかを定義するものは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力をすでに形成しているかどうかである。
【0069】
所与のトランザクション152のすべての出力203において指定された総額が、そのすべての入力202によって指し示された総額よりも大きい場合、これは、ほとんどのトランザクションモデルにおいて無効性の別の根拠となる。したがって、そのようなトランザクションは、ブロック151に伝搬もマイニングもされない。
【0070】
UTXOベースのトランザクションモデルでは、所与のUTXOが全体として使用される必要があることに留意されたい。UTXOにおいて使用済みとして定義された額の一部を「後に残す」ことはできず、別の一部が使用される。しかしながら、次のトランザクションの複数の出力間でUTXOからの額を分割することはできる。例えば、Tx0内のUTXO0において定義された額は、Tx1内の複数のUTXO間で分割され得る。したがって、アリスが、UTXO0において定義された額のすべてをボブに与えたくない場合、アリスは、リマインダを使用して、Tx1の第2の出力において自分自身に残りを与えるか、または別の当事者に支払うことができる。
【0071】
実際には、今日、生成トランザクションの報酬だけでは、典型的には、マイニングを動機付けるのに十分ではないので、アリスは通常、勝利マイナーに対する手数料を含む必要もある。アリスがマイナーに対する手数料を含めない場合、Tx0は、マイナーノード104Mによって拒否される可能性が高く、したがって、技術的に有効であっても、それは依然として伝搬されず、ブロックチェーン150に含まれない(マイナープロトコルは、マイナー104Mが望まない場合にトランザクション152を受け入れることを強制しない)。いくつかのプロトコルでは、マイニング手数料は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力(複数可)202によって指し示される総額と出力(複数可)203で指定されている総額との間の差が自動的に勝利マイナー104に与えられる。例えば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1は唯一の出力UTXO1を有するとする。UTXO0で指定されているデジタル資産の額がUTXO1で指定されている額より大きい場合、その差が自動的に勝利マイナー104Mに贈られる。しかしながら、代替的にまたは追加的に、マイナー手数料がトランザクション152のUTXO203のうちのそれ自体の1つにおいて明示的に指定され得ることが必ずしも除外されるものではなない。
【0072】
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこにでもある任意のトランザクション152においてそれらにロックされた未使用UTXOから構成される。したがって、典型的には、所与の当事者103の資産は、ブロックチェーン150全体にわたる様々なトランザクション152のUTXO全体に散在している。ブロックチェーン150内のどこにも、所与の当事者103の総残高を定義する数字は格納されない。クライアントアプリケーション105におけるウォレット機能の役割は、それぞれの当事者にロックされ、別の前方のトランザクションでまだ使用されていない様々なUTXOすべての値を一緒に照合することである。これは、ストレージノード104Sのいずれか、例えば、それぞれの当事者のコンピュータ機器102に最も近いまたは最良に接続されたストレージノード104Sに格納されたブロックチェーン150のコピーにクエリを行うことによって行うことができる。
【0073】
スクリプトコードは、しばしば、概略的に表される(すなわち、正確な言語ではない)ことに留意されたい。例えば、[Checksig PA]と書いて[Checksig PA] = OP_DUP OP_HASH160 <H(PA)> OP_EQUALVERIFY OP_CHECKSIGを意味し得る。「OP_...」は、スクリプト言語の特定のオペコードを指す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つの入力(署名および公開鍵)を取り、楕円曲線デジタル署名アルゴリズム(ECDSA)を使用して署名の有効性を検証するスクリプトオペコードである。実行時に、署名(「sig」)の存在(occurrence)はスクリプトから除去されるが、ハッシュパズルなどの追加要件は、「sig」入力によって検証されたトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを格納することができ、それによってメタデータをブロックチェーン150に不変に記録することができる、トランザクションの使用不可能な出力を作成するためのスクリプト言語のオペコードである。例えば、メタデータは、ブロックチェーンに格納することが望まれる文書を含み得る。
【0074】
署名PAはデジタル署名である。実施形態において、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータの一部分に署名する。実施形態では、所与のトランザクションについて、署名は、トランザクション入力の一部、およびトランザクション出力の全部または一部に署名する。署名された出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、どの出力が署名されるかを選択するために署名の最後に含まれる4バイトコードである(したがって、署名時に固定される)。
【0075】
ロックスクリプトは、それぞれのトランザクションがロックされる当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、それが対応する署名を供給するという事実を指して「scriptSig」と呼ばれることがある。しかしながら、より一般的には、UTXOが償還されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語を使用して、任意の1つまたは複数の条件を定義することができる。したがって、「ロックスクリプト」および「ロック解除スクリプト」というより一般的な用語が好まれ得る。
【0076】
レイヤ2オーバーレイネットワーク
ブロックチェーンネットワーク106は、すでに、インターネット101などのネットワーク上にオーバーレイされたオーバーレイネットワークの形態である。しかしながら、ブロックチェーンの上にオーバーレイネットワークの別の層を重ねることも可能である。これは、例として
図3に示されている。一例はメタネットである。そのようなネットワークはまた、基礎となるネットワークインフラストラクチャとしてのベースネットワーク101(例えば、インターネット)と、ベースネットワーク上にオーバーレイされたオーバーレイネットワークの第1の層としてのブロックチェーンネットワーク106とに対して、オーバーレイネットワークの第2の層であるという意味で、「レイヤ2」ネットワークと呼ばれ得る。
【0077】
オーバーレイネットワーク300のこの第2の層は、ノード301およびエッジ302のネットワークを含む。ここで、ノード301は、
図1および
図2に関連して前述したようなブロックチェーンネットワーク106の層におけるノード104ではなく、メタネット(またはブロックチェーン上にオーバーレイされた他のそのようなネットワーク)の層におけるノードを指すことに留意されたい。メタネットネットワーク(または同様のもの)の各ノード301は、ブロックチェーン150上の異なるそれぞれのトランザクション152であり、それぞれが、それぞれのトランザクションのペイロードにデータを格納する。したがって、メタネットネットワーク300(または同様のもの)のノード301は、本明細書では、データストレージノードまたはデータストレージトランザクションとも呼ばれ得る。そこに格納されるデータは、データコンテンツおよび/またはメタデータ、典型的には両方を含み得る。出力ベースのモデルでは、それぞれのトランザクションの使用不可能な出力203に格納され得る。この出力は、実行時にスクリプトを終了させるロックスクリプト内のオペコードによって使用不可能にされ得る。例えば、スクリプト言語を用いるシステムでは、これはOP_RETURNオペコードであり得る。しかしながら、これは限定されず、当業者は、他のブロックチェーンシステム、例えばアカウントベースのモデルを採用するシステムにおいてトランザクションに任意のペイロードデータを格納するための他の技法を認識するであろう。以下では、出力ベースのモデルに関して例示し得るが、これに限定されるものではない。
【0078】
レイヤ2オーバーレイネットワーク300は、純粋にデータから構成され、完全に仮想であってもよいことに留意されたい。すなわち、ブロックチェーン150のトランザクション152上にオーバーレイされたオーバーレイネットワークとして、メタネットなどのノード301およびエッジ302は、基礎となるブロックチェーンネットワーク106または基礎となるネットワークインフラストラクチャ101の任意の特定の物理的アクタまたはエンティティに必ずしも対応しない。
【0079】
データコンテンツは、例えばテキスト、オーディオ、静止画もしくは動画、または他のファイルもしくは文書を格納するためにメタネット(または同様のもの)が使用されている実際のデータである。これは、ユーザコンテンツまたはユーザデータとも呼ばれ得る。メタデータは、ブロックチェーン150の上にネットワークを階層化するためのプロトコルを実装する。トランザクション152の少なくともいくつかでは、それはデータコンテンツ間のリンクを定義する。これらは、ノード301間のエッジ302として説明することもできる。リンクまたはポインタは、例えば、親ノードのトランザクションID、TxIDparent、を含み得る。本明細書で参照される「リンク」は、1つの可能性ではあるが、必ずしもハイパーテキストリンクを意味するものではないことに留意されたい。より一般的には、リンクは、現在のノード301がメタネット層(または、ブロックチェーン150の上に階層化された他のそのようなオーバーレイ層)において関連している別のノード301を指し示す任意の形態のポインタを指すことができる。
【0080】
便宜上、以下では、例としてメタネットに関して説明するが、これに限定されず、より一般的には、メタネットを参照する本明細書の箇所はいずれも、ブロックチェーン上にオーバーレイされた任意のオーバーレイネットワークで置き換えられ得ることが理解されよう。同様に、メタネットノードへのいかなる参照も、任意のオーバーレイネットワークノードまたはオーバーレイネットワークのデータストレージノードへの参照と置き換えられ得、メタネットリンクまたはエッジへの任意の参照は、当該オーバーレイネットワークの層における任意のオーバーレイネットワークエッジまたはリンクへの参照と置き換えられ得る。
【0081】
メタネットプロトコルは、公開ブロックチェーン上にマイニングされ、多くの使用事例のために様々なアプリケーションにおいて使用されることができるオンチェーンデータを構造化するための方式および規格を定義する。プロトコルは、ノードおよびエッジを含むグラフ構造をブロックチェーントランザクションのセットから構築することができること、およびこれらの構造を使用して任意の性質のデータ(「コンテンツ」)を格納し、伝達し、表現し、配信することができることを規定する。トランザクションをノードとして扱い、署名をトランザクション間に作成されたエッジとして扱うことによって、メタネットプロトコルは、
図3に示すようなオンチェーングラフ構造の作成を可能にする。
【0082】
図から分かるように、メタネット300のノード301およびエッジ302はツリー構造を形成する。すなわち、親ノード301は、1つまたは複数の子ノード301にリンクされ、任意の所与の子301はそれ自体が、それ自体の1つまたは複数の子にリンクされた親であり得、以下同様である。本発明の目的上、当該ツリー構造は、より広いツリーまたはグラフのサブセットのみであり得ることに留意されたい。
【0083】
図3はまた、ノード301およびその関連付けられたエッジ302がどのように更新され得るかを示す。トランザクションはブロックチェーン152上に不変的に記録されるので、メタネットノード301に対する更新は、新しいトランザクション152によって新しいインスタンス301’および対応するエッジ302’を作成することを必要とする。
【0084】
図3の構造は、ネストされたドメイン、例えば、ウェブサイトおよびそのページの構造を含み得、ここで、「トップレベルドメイン」は、その下のサブドメインをカプセル化し、以下同様である。1つの機能鍵ドメイン(後述する、例えば、書き込み鍵、ファンディング鍵(funding key)または暗号化鍵のドメイン)は、これらの構造ドメインの多くに及ぶことができる。
図3に示される構造的な「ドメイン」は、後述される機能鍵ドメインと混同されるべきではない。
【0085】
図3の円は、メタネットプロトコルのルールセットにしたがって作成される単なるトランザクションであるノードを表す。そのルールセットにしたがって作成されフォーマットされたトランザクション152Nの例を
図4に示す。
【0086】
図4の右側にあるトランザクション152Nは、メタネットの所与のノード301N(子)を実装するブロックチェーン150のトランザクション152を表す。
図4の左上にあるトランザクション152Pは、メタネット層における子ノード152Nの親を実装するブロックチェーン150のトランザクションを表す。子ノードのトランザクション152Nは、ロック解除スクリプトを含み、ブロックチェーン150のファンディングトランザクション152Fの出力203を指し示す入力202を有する。言い換えれば、ファンディングトランザクション152Fの出力は、メタネットノード152Nの入力によって消費される。ファンディングトランザクション152Fおよびメタネット親トランザクション152Pは、必ずしも同じトランザクションではないことに留意されたい(ただし、それも除外されない)。
【0087】
子トランザクション152Nは、ペイロード(ブロックチェーン層の観点からのペイロード)を保持する、例えばOP_RETURNによって使用不可能にされた使用不可能な出力203を含む。このペイロードは、メタネットのデータコンテンツを含み得、それは、暗号化される場合もされない場合もある。
図4では、例として、データコンテンツ(「Data」)は、暗号化関数eおよび暗号化鍵ekによって暗号化されて示されている。しかしながら、これは、平文のデータコンテンツによって置き換え得る(この場合、<e(Data,ek)>は、単に
図4の<Data>によって置き換えられる)。データコンテンツが暗号化されている場合、データを解読し、それを平文で見るためには、暗号化鍵ek、または対応する解読鍵が必要とされる。
【0088】
子トランザクション152Nのペイロードは、メタネットネットワーク層のメタデータも含む。このメタデータは、少なくとも親トランザクション152Pのトランザクション識別子を含む。これは、メタネット層でリンク(エッジ)302を作成する。また、子ノード301Nに関連付けられた鍵Pnodeを含むことがメタネットプロトコルによって要求され得る。
【0089】
ファンディングトランザクション152Fの出力203のロックスクリプトはまた、署名が子ノード152Nの入力202内のロック解除スクリプトに含まれることを必要とする。具体的には、この署名は、メタネット親に関連付けられた鍵Pparentを使用して署名された署名(すなわち、その鍵によって署名されたメッセージ)である必要がある。これは、ブロックチェーン層においてエッジ402(使用エッジと呼ばれることもある)を作成する。必要とされる署名が子トランザクション152Nの入力202内のロック解除スクリプトに含まれていない場合、子トランザクション152Nは、ブロックチェーンネットワーク106のノード104によって妥当性確認されないので、ブロックチェーンネットワーク106を通して伝搬されることも、ブロックチェーン150に記録されることもない。しかしながら、ファンディングトランザクション152Fは必ずしもメタネット親トランザクション152Pと同じブロックチェーントランザクション152ではないので、ブロックチェーン層使用エッジ402は、必ずしもメタネット層エッジ302と同じではないことに再度留意されたい。
【0090】
図4は、トランザクション全体の抽象化として、メタネットトランザクションの特定の関連のある構成要素のみを概説する。これらの構成要素は、プロトコル識別子フラグに加えて、以下を含む:
・ 公開鍵P
node
・ 親公開鍵P
Parentの署名SigP
Parent
・ ノード自体のトランザクションID TxID
node
・ ノードの親のトランザクションID TxID
Parent
【0091】
プレースホルダ<Data>は、一般に、メタネットノードトランザクションに含まれ得る任意のコンテンツデータを指す。また、多くのアプリケーションでは、暗号化鍵ekでデータを暗号化することを望むことも予想され、ここ場合、トランザクションに含まれるデータは<e(Data,ek)>としてキャストされ、ここで、e( )は適切な暗号化関数である。
【0092】
各メタネットノード301は、強力なバージョニングおよび許可制御がメタネットグラフによって継承されることを可能にするインデックスであるペア(Pnode,TxIDnode)によって一意に識別され得る。各メタネットノードは、それ自体(Pnode,TxIDnode)およびその親(PParent,TxIDparent)を識別するのに十分な情報を含むことも理解されたい。
【0093】
メタネットノード301Nのトランザクションが親ノード301Pからの正しい入力署名SigP
Parentを含むことを保証するために、多くの場合、これを容易にするファンディングトランザクションを作成することが望ましい場合があり、これを
図4の左下に示す。
【0094】
親鍵Pparentおよび/または子ノード鍵Pnodeは、ブロックチェーン150への子ノード301Nのデータの書き込みを認可する書き込み鍵と見なされ得る。これらはまた、本明細書では「構造鍵」とも呼ばれ得る。
【0095】
階層鍵セット
特定のユーザまたはアプリケーションに関するブロックチェーントランザクション152に関連付けられた鍵は、典型的には、階層鍵構造を使用して管理される。例えば、所与のユーザのウォレットに関連付けられ得る多くの秘密鍵および公開鍵を処理するために、階層的決定論的(HD)鍵管理として知られる共通規格が出現している。この規格は、ユーザのウォレット内のすべての鍵が単一のエントロピー源から導出され得ることを保証することと、公に知られている導出関数を使用して、鍵が決定論的な方法でそのシードから導出されることを保証することとによって、多くのそのような鍵ペアの処理を容易にするように設計される。HDウォレット自体は周知であり、単に、「BIP」として知られる複数の改善提案、すなわちBIP32、BIP39、およびBIP44において概説されるトランザクションで使用されるべき鍵を導出するための明確に定義された規格を使用するウォレットである。本質的に、これらの規格は、「シード」鍵から多くの秘密鍵および公開鍵を決定論的に生成し、シード鍵から特定の子孫鍵を生成するための「パス」を定義し、決定論的な鍵導出関数を使用して階層ウォレット構造を定義する方法を定義する。所与のユーザの資金または特定のアプリケーションのトランザクションに関連付けられた鍵を処理するためのこれらの規格は、ブロックチェーン業界で広く使用されている。
【0096】
決定論的な方法で別の鍵から1つの鍵を導出する決定論的アルゴリズムは、子鍵導出(CKD)関数と呼ばれることがある。したがって、鍵のセットは、シードから開始して決定され得、これらはすべて階層的に互いに関連している。このような鍵の階層セットもツリー構造を有する。すなわち、セット内の鍵は、ツリー構造に従う導出の階層において互いに導出される。すなわち、1つまたは複数の鍵がシードから導出され、次いで、シードのそのような子ごとに、1つまたは複数の鍵がその鍵から導出され得、以下同様である。このツリー構造では、各ノードは鍵であり、各エッジはその親からのその鍵の導出を表す。親鍵またはシードが与えられると、アルゴリズムを知っている任意の当事者がその1つまたは複数の子を決定論的に決定することは可能であるが、子鍵が与えられても、親鍵を決定することは不可能である(または少なくとも計算的に実行可能ではない)。当技術分野では、所望される任意のグラフ構造(例えばツリー構造)を有する階層鍵セットを生成することを可能にする様々な形態のCKDが知られている。例示としてのみ、1つの特定の例を後述する。CKDをシードまたは親鍵に適用することによって所与の鍵または鍵グラフ構造が導出されるといわれる場合、これは、CKDをシード/親およびいくつかの他のデータに適用することによって鍵またはグラフ構造が導出され得ることを除外しないことに留意されたい。例えば、実施形態では、CKD関数は、入力として、親鍵またはシード、チェーンコードと呼ばれる何らかの他のデータ、および所与の親に対して(複数の兄弟の)子が作成されているインデックスを取る。同様に、チェーンコードおよび/またはインデックスを、CKDの形態をパラメータ化するパラメータとみなすことができる。
【0097】
本明細書で使用される「シード」という用語は、シードが全体的な階層またはツリーにおける絶対的な最高レベルの鍵であることを必ずしも意味しないことにも留意されたい。より一般的には、CKDを階層内の任意の鍵に適用して、そこから1つまたは複数の子鍵を生成することができる。本明細書における「シード」は、単に、所与の鍵セットの他の子鍵が導出される任意の親鍵または値である。実施形態では、シード自体が、より広い階層における別の鍵またはシードの子鍵であってもよい(例えば、後でより詳細に説明する
図6を参照)。
【0098】
メタネット構造に対して上記フレームワークを採用することが望ましいであろう。特に、メタネット構造を定義する鍵PをHDウォレットなどにマッピングするためにCKD関数が使用され得る。これは、例として
図5に示されている。
【0099】
上述したように、各メタネットノード301は、メタネットネットワーク層においてそれに関連付けられた鍵Pを有する(
図4の例におけるP
nodeおよびP
parentを参照)。メタネットネットワークノード301およびエッジ302の対応するツリー構造300上に直接マッピングするツリー構造500にしたがってこれらの鍵を生成することが有利である。すなわち、メタネットツリー構造内の各メタネットノード301は、鍵ツリー500内の1つの対応する鍵に一意にマッピングされ、各メタネットエッジ302は、鍵ツリー500内の1つの対応する鍵導出エッジに一意にマッピングされる。これは、メタネットツリーにおけるノード301の位置、シードの知識、および使用されるCKD関数の形態が与えられると、そのノード301に必要とされる関連のある鍵を導出することが常に可能であることを意味する。
【0100】
これの有利な適用は、ソフトウェアの異なるモジュール間で鍵のより安全なおよび/または圧縮された(より低いオーバーヘッドの)通信を可能にすることである。これは、
図8に示されている。
図8は、第1のソフトウェアモジュール810および第2のソフトウェアモジュール820を示す。例えば、これらは、遠隔で(例えば、インターネット101上で)通信するコンピュータ機器の別個の部分上のソフトウェアのモジュールであり得る。および/または、それらは、異なる当事者によって実行されるソフトウェアのモジュールであってもよい。代替的に、それらは、同じ当事者の同じコンピュータ機器上で実行されるソフトウェアの異なるモジュールであってもよく、この場合、2つのモジュール間に少なくともある程度の分離が望まれる(例えば、一方が破損したり危険にさらされたりしても、他方がそうならないように)。それらは、ブロックチェーンネットワーク106のクライアント103のウォレットソフトウェア、またはブロックチェーンネットワーク106のノード104のノードソフトウェア(例えば、マイナーソフトウェア)に実装され得る。それらは、1つまたは複数のメモリユニット上に物理的に記憶され、
図1に関連して前述したタイプのいずれか、および/または当業者によく知られている任意の他のタイプの1つまたは複数の処理ユニット上で実行され得る。
【0101】
第1のソフトウェアモジュール810は、通信815を第2のソフトウェアモジュール820に送り、メタネット300の所与のノード301に関連付けられた鍵を第2のモジュール820に通信して、第2のソフトウェアモジュール820が、鍵の実行を必要とするそのノード301に関連する機能を実行することを可能にする。通信815は、1つまたは複数の個々の信号またはメッセージを含み得る。
【0102】
鍵を通信するためには、第1のモジュール810は、通信815に、I)メタネットツリー構造におけるノード301の位置を含めるだけでよい。通信815はまた、異なる可能なオプションがある場合、II)使用されるCKD関数の形態の指示を含み得る。代替的に、CKDの形態は、第2のモジュール820に事前に知られている固定された所定の種類であってもよく、この場合、通信815においてシグナリングされる必要はない。いずれにしても、シードが事前に決定され、第2のモジュール820に事前に知られている場合、鍵自体もシードも通信815に含まれる必要はない。例えば、シードは、第1のモジュール810と第2のモジュール820との間で共有されるシークレットであり得、例えば、ある初期の時点で第1のモジュール810または第3の管理者モジュールによって第2のモジュール820と一度だけ共有され得る。これは、後の時点で第1のモジュール810が異なるメタネットノード301について鍵を第2のモジュール820に通信するとき、鍵を明示的にシグナリングする必要がないことを意味し、したがって、傍受のリスクを低減し、および/または各メタネットノード301について鍵またはシードを毎回送るシグナリングオーバーヘッドを回避することを意味する。
【0103】
ツリー構造300は、全体的なメタネットグラフのサブセットでしかない可能性があることに再度留意されたい。したがって、シードは、単に、階層ドメインのあるレベルにおける親鍵であり得、シード自体が、ツリーまたはグラフのさらに上に親を有し得る。
【0104】
いくつかの他のアプリケーションでは、通信815は、III)シードも含み得る。これについては後により詳細に説明する。
【0105】
機能鍵ドメイン
暗号化されたデータを含み得る、
図4に示されるような典型的なメタネットトランザクション152N、およびその対応するファンディングトランザクション152Fを調べると、単一のメタネットノード301に関連付けられたいくつかの異なる鍵(例えば、P
node、P
parent、TxID
node、ek)が存在することが分かる。
【0106】
メタネットノードおよびその対応するファンディングトランザクションに関連付けられた潜在的に多くの異なるタイプの鍵が存在する。例えば、これらは、その機能にしたがって以下のように分類され得る:
・ 構造(書き込み)鍵-Pnode,PParent
・ 暗号化鍵-ek
・ ファンディング鍵-PFunding
【0107】
メタネットトランザクションのより複雑な例では、メタネットノードトランザクション152Nを作成するために使用される他の機能に関連する他の鍵タイプ、および/またはメタネットノード301に関連して他の機能を実行する他の鍵タイプも存在し得ることに留意されたい。例えば、別のタイプの鍵は、アプリケーション層機能を容易にするアプリケーション層鍵、例えば、(ノード301のデータが、何らかのアプリケーション層目的のために2回以上使用されない、または2回カウントされないことを保証するための)冪等鍵であり得る。別の例として、暗号化の代替として、またはそれに加えて、データコンテンツは、パディングまたは並べ替えなどの別の形態の難読化の対象であり得、これは、難読化および/または難読化解除するために対応する難読化鍵を必要とし得る。
【0108】
前述したように、鍵を管理するためにHDウォレット規格(または同様のもの)の普及およびロバスト性を利用することが有利であり、本明細書に開示される実施形態では、この要望は、任意のまたはすべてのそのような鍵タイプ、例えば、構造鍵、暗号化鍵、およびファンディング鍵にまで及ぶ。しかしながら、異なる鍵タイプは、別々に処理および管理される必要があり得る。また、好ましくは、すべての鍵は、危殆化のリスクを低減するために同じシードから生じるべきである。しかしながら、これら2つの要件は全く矛盾する。すべてが同じシード鍵から生じることを維持しながら鍵の分離をどのように保証すべきか、直ちに明らかにならない。さらに複雑なことに、上述したように、そのようなHD鍵階層のさらに望ましい特性は、所与の鍵の導出パスがメタネットグラフ構造に(少なくとも部分的に)マッピングされるべきであることである。言い換えれば、メタネットグラフ構造を鍵階層(例えば
図5にあるような)に反映させたいという要望は、最初の2つの相反する要件の調整に加えて、満たされなければならない第3の要件として機能する。
【0109】
以下では、特定のトランザクションの作成に関与する単一の機能に関連する鍵を有するHDウォレットの分岐として機能鍵ドメインを定義することによってこの問題を解決するソリューションを開示する。
【0110】
メタネットトランザクションでは、説明すべき2つ、3つまたはそれ以上の異なる機能(例えば、構造化、暗号化、およびファンディング)が存在し得る場合、各鍵タイプは、HD鍵構造の独立した分岐を割り当てられる。
【0111】
書き込み鍵(すなわち構造鍵)Pnode、Pparentは、メタネットトランザクションに署名するために使用され、暗号化鍵は、トランザクションに含まれる任意のコンテンツデータを暗号化するために使用され、ファンディング鍵は、UTXOがメタネットトランザクションによって使用されるファンディングトランザクションに署名するために使用される。
【0112】
HD構造全体におけるすべての鍵は一意であり、ウォレットのマスタ鍵(mk)ペア(マスタシード)の知識なしでは互いに関連付けることができない。しかしながら、それらはすべてが同じメタネット構造位置に属するという点で関連している。この共通の位置は、所与の鍵に対する全体的なパス内に埋め込まれた複数のパスタイプのシステムを使用して符号化される。
【0113】
図6は、異なる機能鍵ドメインを割り振る例を示す。
図6は、CKD関数を使用して作成され得る例示的な導出ツリーを示す。好ましくは、ツリーの上部(ソースまたはルート)にマスタシード601M(mk)がある。複数の子シードが、複数のタイプの機能のそれぞれに1つずつ、これから導出される。各子シードは、それぞれのタイプの機能(例えば、書き込み、暗号化、およびファンディング)のための鍵のそれぞれセットのソース/ルートとして機能する。示された例では、3つのそのような機能のための3つの子シードがそれぞれ存在し、それらは次の通りである:メタネットノード301の書き込みを可能にするための書き込み鍵Pのセットを導出するための書き込みシード601W、ノード301のデータコンテンツを暗号化および/または解読するための暗号化鍵ekのセットを導出するための暗号化シード601E、およびブロックチェーン150上のノード301の対応するトランザクション152の記録にファンディングするための鍵のセットを導出するためのファンディングシード601F。シード自体は、一種の鍵(すべてが同じマスタ鍵601Mから導出される場合にはそのそれぞれの鍵セットのシードまたはサブマスタ鍵)と考えられ得る。
【0114】
鍵の各セットは、それぞれのツリー構造を含み、それにしたがって、それぞれの鍵セット内の鍵がそれにしたがって互いから導出される。このような各ツリー構造は、マスタシード601Mから生じるツリー全体のサブツリーである。各鍵セット内で、ツリー構造は、メタネット300のツリー構造上に直接マッピングされる。したがって、異なる鍵セットのツリー構造は、互いに同じである。そのため、例えば、メタネット(または当該断片)のノード301ごとに1つの書き込み鍵が存在し、それらの鍵の導出のエッジは、メタネットツリー構造300内の対応するエッジ302に正確に従う。同時に、メタネット(または当該断片)のノード301ごとに1つのファンディング鍵が存在し、ファンディング鍵の導出のエッジは、メタネットツリー構造300内の対応するエッジ302、および書き込み鍵セット内の対応する書き込み鍵間の端(end)に正確に従う。また、この方式にしたがって鍵セットが導出される暗号化および/または任意の他の機能についても同様である。
【0115】
ここでの所与の鍵は、秘密鍵、または公開鍵、または公開鍵-秘密鍵ペアを指し得ることに留意されたい。実施形態では、秘密鍵は、最初にツリー構造にしたがって導出され、次いで、対応する公開鍵が秘密鍵から導出される。
【0116】
これらのタイプの機能のうちの1つまたは複数、例えば暗号化について、例えば暗号化の複数のレイヤに対して、複数の鍵セットが生成され得ることにも留意されたい。この場合、暗号化鍵セットの各々は、
図6の下中央に例として示されるように、同じツリー構造を有する。
【0117】
さらに、本明細書で使用される「シード」という用語は、広いツリー構造の絶対的な最終のマスタシードを必ずしも意味しないことに再度留意されたい。例えば、書き込みシード601Wは、それ自体がマスタシード601Mの子鍵である。シードは、単に任意のタイプの鍵または値であり、他の鍵を導出するために使用され得る。実施形態では、異なる機能のシード(例えば、601W、601E、601F)は、実際には、すべて何らかのマスタシードまたは鍵601Mから導出された鍵である。本明細書で参照されるシードは、(少なくとも局所的に)所与の鍵のセットに対する階層の「トップ」鍵であるが、より広い階層では子であり得る特別なタイプの鍵を指し得る。
【0118】
書き込み、暗号化、およびファンディングの例は、それぞれの鍵セットが必要とされ得るメタネット(または同様のもの)において実装され得る異なるタイプの機能のいくつかの例にすぎず、ここで、所与のタイプの機能に対して所与のセット内のノードごとに鍵があることが理解されよう。より一般的には、上で概説した方式は、任意の第1および第2の機能の鍵セットに適用され、いくつかの実施形態では、第3の機能またはそれ以上の機能に適用され得る。例えば、暗号化は、任意の難読化(例えばパディングまたは並べ替え)に一般化され得る。または、この方式は、何らかのアプリケーション層目的(例えば、冪等)で各メタネットノード301に割り当てられるべきアプリケーション層シリアル番号など、完全に異なるタイプの鍵に使用され得る。
【0119】
図8に戻ることで、説明した方式の有利な適用を理解することができる。第2の鍵セットの鍵を危険にさらすことも、鍵自体を明示的に通信することもなく、第1のソフトウェアモジュール810が、第1の鍵セットの鍵を第2のソフトウェアモジュール820にシグナリングすることを望む場合を考慮する。同様に、第1および第2のモジュール810は、異なる遠隔コンピュータ機器上で、および/または異なる当事者によって実行され得るか、または、所与の当事者のソフトウェア内の分離モジュールであり得、および/もしくは同じ機器上で実行され得る。いずれにしても、鍵の第1のセットが第1のタイプの機能(例えば、メタネットにノード301を書き込むこと)を可能にし、鍵の第2のセットが第2のタイプの機能(例えば、ノードのデータコンテンツを解読すること)を可能にする場合を考慮する。所与のセット内で、各鍵は、メタネットノード301の異なる対応する1つに対する機能を有効にする。第2のモジュール820がノード301の特定の1つに関連して第1の機能を実行することを可能にするために、第1のソフトウェアモジュール810は、少なくとも、I)メタネット鍵構造300における対応するノード301の位置に関して対応する第1の鍵を示す通信815を第2のモジュール820に送ることができる。任意選択的に、それはまた、II)使用されるCKD関数の形態、およびIII)第1のシード(第1の機能のための第1の鍵セットが導出されるシード、例えば601W)をシグナリングし得る。代替的に、これらのII、III)の一方または両方は、事前に決定され、第2のモジュール820に事前に知られていてもよい。いずれにしても、第2の鍵またはシード(例えば、601E)は送られない。したがって、第2のソフトウェアモジュール820は、関連のある第1のシードと、ノード301および対応する第1の鍵の両方のツリー構造内の位置とを知っているので、第1の機能(例えば、書き込み)に関する関連する第1の鍵を導出することができる。しかしながら、第2の鍵を有していないので、第2の機能(例えば、解読)のための鍵を導出することはできない。
【0120】
例えば、第1のソフトウェアモジュール810はアリス103aのウォレットであり得、第2のソフトウェアモジュール820はサービスプロバイダボブ103bまたはマイナー104のソフトウェアであってもよい。ボブを例にとる。アリスは、データコンテンツをメタネット300にアップロードするための技術的専門知識を有していない。ボブは、アリスに代わってこれを行うサービスを提供する。ボブがアリスの代わりにこれを行うために、ボブは、ブロックチェーン150に書き込まれるべきP個の各ノード301に対するアリスの書き込み鍵が必要である。しかしながら、ノード301のうちの1つまたは複数のデータコンテンツはまた、そのような各ノードに対して対応する暗号化鍵を用いて暗号化されるべきである。アリスはボブがデータコンテンツを解読できることを望まず、暗号化された形態でそれをアップロードするためにボブによる解読が必要な理由もない。したがって、アリスは、開示された方法を使用して、第2の鍵セット(暗号化鍵)を危険にさらすことなく、第1の鍵セットからの鍵(この場合、書き込み用)をボブに通信することができる。
【0121】
本出願では、ボブが第2の鍵セットを導出できるようにしないことが目的であるので、アリスは、任意選択的に、ボブへの通信815において第1のシードIII)をシグナリングし得るが、ボブは、第2のシードが送られることも、他の方法で第2のシードへのアクセスが提供されることもない点に留意されたい。
【0122】
実施形態では、暗号化鍵は、データを暗号化するために使用される暗号化鍵ekがデータを解読するために必要とされる鍵と同じである対称暗号化方式(例えば、AES)のためのものであり得る。代替的に、データを解読するために異なる鍵が必要とされる非対称暗号化方式(例えば、ECIES)が使用されてもよい。この場合、第2の鍵セットの「暗号化」鍵は、解読鍵であってもよく、第2のソフトウェアモジュール820に通信される「暗号化」鍵は、解読鍵(アプリケーション空間または暗号化のコンテキストにおいて使用される鍵であるという意味で、一般に「暗号化鍵」と呼ばれる)であってもよい。
【0123】
ファンディング鍵Pfundingは、アリスがBobに知られたくないが鍵の別の例である。ファンディング鍵は、アリスが、メタネットトランザクションをアップロードするための支払いを行うトランザクションに署名するために使用する鍵であり、そのため、アリスは、ボブ(または他の誰か)がそれらを入手して、サービスを提供することなく支払いを受け取ることができるようになることを望まないであろう。
【0124】
ファンディングトランザクションは必ずしもボブに支払うものではないことに留意されたい。むしろ、ファンディングトランザクションは、ブロックチェーンに乗るために単に(または少なくとも)データストレージトランザクションの支払いを行うものであり、最低限として、マイニング手数料だけを支払い得る。アリスは、オンチェーンまたはオフチェーンのいずれかで、サービスの支払いをボブに行っても行わなくてもよい。鍵の第2のセットをアウトソーシングさせるより説得力のある理由は、処理と量のためであり得る。すなわち、会社(アリス)がブロックチェーン上に多くのデータを置くことを望む場合で、(a)そうするためにネイティブ暗号トークン(デジタル資産)を購入すること、または(b)UTXO管理およびトランザクション作成を行うために企業グレードのウォレットを使用するという最適化問題に対処することを望まない場合、単にプロセス全体を他の当事者(ボブ)にアウトソースすることを望み得る。
【0125】
アリスがデータをチェーン上に置くことを望む者であり、アリスがそれを行うためにボブに「支払う」ことになる場合、仕事を行っているだけなので、両方の当事者がファンディング鍵を知っていても、それは必ずしも問題ではなく、アリスは、不換または他のオフチェーン決済またはビジネストランザクションを介してファンディングトランザクションを作成することでボブのコストをカバーしている可能性がある。
【0126】
別の例示的な使用事例では、第1のソフトウェアモジュール810および第2のソフトウェアモジュール820は、所与のウォレットアプリケーション内の異なる分離された機能であり得る。例えば、第1のモジュール810は書き込み機能(
図6の左側の分岐に対応)であり得、第2の機能は暗号化関数(
図6の中央の分岐に対応)であり得る。この場合、一方のモジュールが破損したり危険にさらされたりしても、他方の分離されたモジュールの鍵セットは、必ずしも、それに伴って危険にさらされたり影響を受けたりすることはない。
【0127】
鍵の導出はツリーの上から下への一方向であることに再度留意されたい。すなわち、上流に戻って子から親鍵を決定することはできないが、親から子鍵を決定することはできる。そのため、第1のシードが共有されても、これはマスタシードを危険にさらすことはないため、第2のシードまたはそれから導出される鍵のいずれも危険にさらさない。ツリーを「下には進むことができるが上には進むことができない」。実施形態では、鍵に対して、特定の分岐を下に進むことができないようにする他の制限を課すこともでき、これは、ハードニングと呼ばれるプロセスを使用して、鍵ごとに適用され得る。
【0128】
開示された方式を採用する別の代替的なまたは追加的な有利な理由として、ソフトウェアモジュール810、820の一方または両方は、何らかの他のエンティティ(すなわち、第3のソフトウェアモジュール)が、構造(およびCKD)におけるメタネットトランザクションの構造/位置およびそれらの鍵の知識のみを使用してメタネットトランザクションのすべての関連のある鍵を回復することができるように、それらの鍵導出における構造が保存されることを保証することを望み得る。この根拠は、第1のモジュール810および第2のモジュール820が上述した方法で互いに鍵を通信するかどうかにかかわらず適用され得る。
【0129】
図7は、パスタイプの概念を示す。異なる機能に関連する鍵が異なるエンティティによって別々に処理され得ることを保証するために、実施形態は、鍵階層における垂直レベルに応じて複数の異なるパスタイプに分解され得る機能ベースのパス構造を鍵導出に使用する。例えば:
・ m-パス:トップレベルパスであり、階層内のあらゆるものを記述することができる。
・ p-パス:機能レベルパス(暗号化パス、書き込みパス、ファンディングパス)。
・ b-パス:メタネットグラフ構造パス。
【0130】
これらのパスは、各鍵に対するより大きな全体的なパスの一部としてより簡単に表現することができ、以下のように書かれる:
【数1】
【0131】
m/p/b構成要素に続くパス要素は、所与のメタネットトランザクションに関連付けられたすべての鍵について同一である。これは、メタネットトランザクションが鍵PParentで署名され、鍵ekで暗号化されたデータを有し、鍵PFundingで署名されたファンディングトランザクションを有し、ここで、すべての鍵は、それぞれのメタネット構造ルートに続く共通パスサブ構造(/…/…)を共有することを意味する。
【0132】
図9は、第1のソフトウェアモジュール810によって実行され得る方法のフローチャートである。ステップS10において、第1のソフトウェアモジュールは、メタネットツリー構造300を識別する。ステップS20において、第1のソフトウェアモジュール810は、第1のシード(例えば、601W)に基づいて、メタネットと同じツリー構造を有する鍵の第1のセットを決定する。ステップS30において、第2のシード(例えば、601E)に基づいて、メタネットおよび第1の鍵セットと同じツリー構造を有する鍵の第2のセットを決定する。好ましくは、第1および第2のシードは、同じマスタシード(例えば、601M)から導出される。ステップS40において、第1のソフトウェアモジュール810は、メタネットノード301のツリー構造における位置を示す通信815を第2のソフトウェアモジュール820に送り、第2のモジュール820が、示された位置におけるメタネットノード301に関連して、鍵の第1のセットに関連付けられた機能を実行することを可能にする。この通信815は、任意選択で、第1の鍵セットおよび/または第1のシードを導出するために使用されるCKD関数の形態を含み得る。代替的に、これらは、第2のソフトウェアモジュール820に事前に知られていてもよい。いずれにしても、第1のソフトウェアモジュール810から第2のソフトウェアモジュール820への通信815は、第2のシード(またはマスタシード)を含まない。
【0133】
図10は、第2のソフトウェアモジュール820によって実行され得る方法を示すフローチャートである。ステップT10において、第2のソフトウェアモジュール820は、第1のソフトウェアモジュール810からツリー構造におけるノード位置の指示を受信する。ステップT20において、ツリー構造の示された位置知識(およびCKD関数および第1のシード)に基づいて、第2のソフトウェアモジュール820は、第1の鍵セットからメタネットノードおよび対応する鍵を決定する。ステップT30において、次いで、導出された第1の鍵に基づいて、示されたノード301に関連して関連のある機能を実行することができる。しかしながら、対応する第2の鍵を導出することができないので、第2の機能を実行することはできない。
【0134】
本明細書に提示される機能鍵ドメインの概念は、以下の利点または類似のもののうちのいずれか1つまたは複数を提供するために使用され得る。
・ トランザクションの作成は、モジュール化されて、複数の機能に分割され得、複数の機能は、複数の異なるアクタ、サービス、またはマシンの間で分散され得る。これにより、各構成要素を、マイクロサービスとして作成し、他の構成要素から独立して、かつ、動作するために構成要素が他の構成要素に関する情報を有する必要としない方法で最適化することができるので、トランザクション構築をより効率的に行うことができ、システムのスケーラビリティを向上させる効果も有する。
・ マルチ構成要素トランザクション作成システムでは、この方法は、各構成要素は自身の機能ドメイン分岐内の鍵にしかアクセスすることができないので、ある構成要素が危険にさらされた場合に、それが他の構成要素の鍵を危険にさらすことができないことを保証する。
・ 複数の暗号化鍵ek1,ek2,・・・,eknが存在する場合、この方式は、暗号化の複数の層または機能によって操作されたデータに対するきめ細かい許可およびアクセス制御を実装することを可能にする。これを使用して、オンチェーンメタネットデータのための複雑なアクセス制御フレームワーク(ACF)を作成することができる。
・ すべての機能ドメイン分岐は、同じ単一のエントロピー減から生じ、これにより、トランザクション構築システム内のすべての構成要素のセキュリティを、マスタ鍵(mk)へのアクセスを唯一有する単一の非常に安全な構成要素によって処理することができる。これにより、セキュリティをカスタムメイド(bespoke)し、マルチ構成要素システムの単一の構成要素に集中させることができ、これは、システムが全体としてどのように構築されるかを最適化するのに役立ち得る。
【0135】
子鍵導出(CKD)関数
以下では、既知のCKD関数の例を示す。これは限定的なものではなく、他のCKDも当業者に知られていることは理解されよう。
【0136】
先に採用された用語では、所与の鍵セットにおけるトップの鍵は「シード」と呼ばれており、複数のそのようなシードは、全体的な階層における「マスタシード」から導出され得る。代替的な用語では、所与のセットのローカル「シード」は、「拡張」鍵(公開鍵であるか秘密鍵であるかにかかわらず)と呼ばれ得、マスタシードは、「エントロピー」と呼ばれ得る。
【0137】
マスタ鍵を作成するプロセスは、以下のように書くことができる:
・ 「ウォレットシード」として機能するビットの(例えば256ビットの)ランダムシーケンスDを安全な擬似乱数生成器から生成する、
・ ランダムビットシーケンスに対して関数F(例えば、HMAC-SHA512)を実行する、
・ ウォレットパラメータを以下のように割り当てる:
- マスタシークレット鍵:=F(D)の左の256ビット、および
- マスタチェーンコード:=F(D)の右の256ビット。
【0138】
マスタシークレット鍵は、ウォレットのためのマスタ秘密鍵であり、一般に、階層内に秘密鍵-公開鍵ペアを含む。
【0139】
所与の親鍵の知識だけではその子鍵を生成するのに不十分であることを保証するために、「チェーンコード」として知られる追加のエントロピーがHDウォレット全体にわたって使用され得る。チェーンコードは、HDウォレットのすべてのチェーンコードの決定論的シーケンスにおける初期チェーンコードとしてここで生成された「マスタチェーンコード」を使用して、そのHDウォレットの鍵階層全体にわたって決定論的に生成される。
【0140】
マスタ鍵に必要なエントロピーを、人間が覚えやすく操作しやすいようにニーモニックフレーズに抽象化するシステムはBIP39に概説されており、それ以来、暗号通貨ウォレットで使用される標準的な技法となっている。
【0141】
拡張鍵:前述したように、HDウォレットは、子鍵を導出するために、鍵の知識に加えて、チェーンコードとして知られる追加のエントロピー単位を必要とする。したがって、「拡張」鍵の概念は、その対応するチェーンコードと連結された所与の鍵を表すために使用され得る。これらは、それぞれ拡張秘密鍵および拡張公開鍵について、以下のように書くことができる:
EPriv:=(privkey, chain code)
EPub:=(pubkey, chain code)
これらの拡張秘密鍵および拡張公開鍵は、周知の公開子鍵導出関数を使用して、導出された子鍵を生成するために使用され得る。
【0142】
子鍵導出(CKD)関数:例示的な子鍵導出(CKD)関数は、BIP32において定義されており、所与の親秘密鍵または親公開鍵を使用して、それぞれ子秘密鍵または子公開鍵を導出することを可能にし、これは以下のように書くことができる:
【数2】
ここで、iは、その兄弟間の子鍵のインデックスに対する32バイトのインデックス値である。これらの関数の完全な定義は、BIP32において見つけることができる。秘密鍵(親または子)が与えられた場合、楕円曲線乗算などの単純な適用によって、対応する公開鍵(親または子)を生成することも自明であることに留意されたい。この事実は、一般に、所与の親秘密鍵からは子公開鍵と子秘密鍵の両方を導出することが可能であるが、所与の親公開鍵からは子公開鍵を導出することのみが可能であることを意味する。
【0143】
HDウォレットの鍵ツリーは、決定論的に、下方にトラバースすることしかできず、決して上方に行くことはできないことにも留意されたい。また、拡張公開鍵の場合、ハードニング(hardening)として知られているプロセスによって、下方に行く能力を制限することも可能である。
【0144】
強化鍵:BIP32において、強化鍵を使用してHDウォレットを生成するオプション。これらの鍵は、拡張親公開鍵から強化拡張子公開鍵を生成する能力を排除し、これは、232-1より大きいインデックスに対するCKD関数の定義を拡張することによって達成される。
【0145】
マルチアカウント階層:BIP44に正式に導入されているのは、暗号通貨の使用に関連する異なるアカウントに対してHDウォレット内の鍵階層の異なる分岐およびレベルを使用するという概念である。しかしながら、すべての場合において、異なる「アカウント」は、実質的に同じ目的、すなわち、トランザクションに署名することによって暗号通貨を使用する目的のために鍵を定義する。
【0146】
階層的決定論的ウォレット
以下では、楕円曲線暗号を用いる特定の実施形態の文脈において階層的決定論的ウォレットのいくつかのさらなる議論について説明する。
図11を参照する。
【0147】
EC点乗算の準同型性(homomorphic property)は、HDウォレットに影響を与える。これにより、対応する子公開鍵Schildを知ることも格納することもなく、親公開鍵PParentから子公開鍵Pchildを連続的に構築することができる。
【0148】
図11は、階層的決定論的(HD)ウォレットにおいて親鍵ペアに対する動作からどのように子鍵ペアが構築されるかを示す。
【0149】
図11は、HDウォレットフレームワークにおいて親から子の秘密鍵および公開鍵を生成するための例示的な機構を示す。
【0150】
これは、それぞれ以下のように定義される拡張秘密鍵または拡張公開鍵のいずれかを使用して行うことができる:
【数3】
ここで、Cは、チェーンコードとして知られるランダムエントロピー成分である。兄弟鍵を互いに区別するために、追加のインデックスが階層内の所与のレベルで各鍵に割り当てられている。このインデックスは図面では省略されているが、通常はHMAC-SHA512プリイメージの一部として使用される。
【0151】
ケース1:拡張秘密鍵を使用する。拡張秘密鍵ES
parentが与えられると、子鍵ペアの秘密鍵S
childおよび公開鍵P
childの両方を構築することができる。図面によれば、これらは、次のように定義および計算される:
【数4】
ここで、Hは、暗号ハッシュ関数(例えば、HMAC-SHA512)を示し、LHSは、Hの512ビット出力の左端256ビットを示す。
【0152】
ここでは、拡張された親秘密鍵が与えられ、図面で概説されているプロセスを使用して、子鍵ペアの両方の部分を計算することができた。
【0153】
ケース2:拡張公開鍵を使用する。拡張公開鍵EP
parentが与えられると、次のように公開鍵P
childのみを構築することができる:
【数5】
【0154】
この結果の導出は、楕円曲線秘密鍵-公開鍵ペアの準同型性に依拠する。導出は以下の通りである:
【数6】
【0155】
この公開鍵に対する対応する秘密鍵Schildを導出することは、その親の拡張公開鍵EPparent:=(PParent||Cparent)のみ与えられてもSparentが必要であるので、不可能であることが分かる。この理由は、Hの出力の左端の数字によって与えられる決定論的部分に親秘密鍵を追加しなければならないからであり、図面から見て取れる。
【0156】
Schildを見つける唯一の他の方法は、楕円曲線点乗算アルゴリズムを「反転」させることであるが、これは現在のところ至難な問題である。
【0157】
対応する秘密鍵を見る、知る、または格納する必要なしに子公開鍵を生成することは、ストレージ要件を低減し、支払いを受け取るためのブロックチェーンアドレスを生成するために秘密鍵を格納する必要がないはるかに安全なウォレット実装に使用可能であるので、有利である。
【0158】
この効果は、EC点乗算の準同型性およびECC鍵ペアの基本的特性の直接的な結果である。
【0159】
完全を期すために、
図12には、子公開鍵がどのようにして拡張公開鍵から生成され得るかの例を示す。
【0160】
結論
上記の実施形態は、単に例として説明されていることが理解されよう。
【0161】
例えば、上記の例では、オーバーレイ層リンクがメタネットトランザクションのペイロードにおいて(例えば、
図4の例におけるTxID
nodeの出力におけるTxID
parentによって)定義されることが説明されている。しかしながら、これは必須ではない。代替的な実施形態では、グラフ構造は、実際に、オンチェーンで宣言される必要はなく、または少なくとも完全にそうである必要はない。例えば、いくつかのデータ構造がブロックチェーン上に格納されるが、オーバーレイ層リンクがオフチェーンで格納され得る場合、メタネットの変形が提供され得る。データストレージトランザクションの入力に署名する鍵の階層は、データ構造(の大部分)を回復するのに依然として十分であるが、シードを知っている者のみに対してであり、すなわちブロックチェーンを見ている一般公衆に対してではないので、プライバシーを向上させる。さらなる変形例では、メタネット(または他のそのようなオーバーレイネットワーク)のグラフ構造は、完全にオフチェーンで定義され得、データコンテンツのみがオンチェーンで格納される。
【0162】
さらに、上記はツリー構造に関して説明されているが、より一般的には、任意のグラフ構造に同じ原理を適用することができる。例えば、所与のノード301は2つの親を有することができる。この場合、対応する鍵は2つの親鍵から導出されることとなる。
【0163】
より一般的には、以下のステートメントのうちのいずれか1つまたは複数による方法、装置、またはプログラムが提供され得る。
【0164】
ステートメント1:ブロックチェーンのデータストレージトランザクションにオーバーレイされたオーバーレイネットワークを管理する方法であって、オーバーレイネットワークのデータコンテンツがデータストレージトランザクションのペイロードに格納され、オーバーレイ層リンクがデータストレージトランザクション間で定義され、方法は、第1のコンピュータ機器上で実行される第1のソフトウェアモジュールによって、以下を行うことを含む:
オーバーレイネットワークのグラフ構造を識別すること、ここで、グラフ構造は複数のノードとノード間のエッジとを含み、ノードの各々はデータストレージトランザクションのうちの異なるそれぞれ1つに対応し、エッジの各々はリンクのうちの異なるそれぞれ1つに対応し、各ノードは、ブロックチェーンへの子の書き込みを認可するために、オーバーレイネットワークのグラフ構造における子データストレージトランザクションの入力に署名するためのそれぞれの第1の鍵に関連付けられ、第1の鍵は第1のシードから生成される、および
第2のシードに適用される子鍵導出(CKD)関数を使用して、オーバーレイネットワークと同じグラフ構造を有する第2の鍵の階層セットを決定すること、ここで、各第2の鍵は、グラフ構造においてそれぞれのデータストレージトランザクションと同じ位置にあるノードのうちの異なるそれぞれ1つに対応し、第2の鍵は、データストレージトランザクションの入力に署名するために使用されるのではなく、代わりに追加の機能を有効にするために提供される。
【0165】
オーバーレイネットワークの上記グラフ構造は、オーバーレイネットワークの一部または全部の構造であり得る。
【0166】
各鍵は、公開鍵-秘密鍵ペアの秘密鍵、または公開鍵-秘密鍵ペアの公開鍵、またはその両方を含み得る。
【0167】
CKDを親またはシードに適用することによって階層鍵セットが導出されるといわれる場合、これは、CKDへの唯一の入力が親鍵またはシード(公開親鍵であるか秘密親鍵であるかにかかわらず)でなければならないことを必ずしも意味しないことにも留意されたい。例えば、実施形態では、CKDは、入力パラメータとしてチェーンコードおよび/またはインデックス値を取ることもできる。
【0168】
ステートメント2:ステートメント1に記載の方法であって、以下をさらに含む:
第1のシードに適用されるCKD関数を使用して、第1の鍵を、オーバーレイネットワークおよび第2の鍵セットと同じグラフ構造を有する階層鍵セットの鍵として決定すること、ここで、各第1の鍵は、グラフ構造においてそれぞれのノードと同じ位置にあるノードのうちの異なるそれぞれ1つに対応する。
【0169】
ステートメント3:ステートメント1または2に記載の方法であって、以下をさらに含む:
第1のソフトウェアモジュールから、グラフ構造における位置のうちの1つの指示を第2のソフトウェアモジュールに通信し、したがって、第2のソフトウェアモジュールが、通信された位置と、第1のシードと、第1の鍵に使用されるCKD関数とに基づいて、その位置にあるノードのそれぞれの第1の鍵を決定することを可能にすること。
【0170】
ステートメント4:第1のシードも第2のソフトウェアモジュールに通信され、第2のモジュールによる上記決定は、第2のモジュールに通信された第1のシードに基づく、ステートメント3に記載の方法。
【0171】
これは、第1のソフトウェアモジュール、または、例えば、別個の第三者のコンピュータ機器上で実行されるか、第1もしくは第2のソフトウェアモジュールと同じ機器上で実行されるが、第1および第2のモジュールから分離される第3のソフトウェアモジュールから通信され得る。
【0172】
ステートメント5:第1のシードは第2のソフトウェアモジュールに事前に知られており、第2のモジュールによる決定は第1のシードの事前知識に基づく、ステートメント3に記載の方法。
【0173】
ステートメント6:第1の鍵に使用されるCKD関数の指示も第2のソフトウェアモジュールに通信され、第2のモジュールによる上記決定は、第1のソフトウェアモジュールによって示されたCKD関数に基づく、ステートメント3、4または5に記載の方法。
【0174】
同様に、これは、第1のソフトウェアモジュール、または、例えば、別個の第三者のコンピュータ機器上で実行されるか、第1もしくは第2のソフトウェアモジュールと同じ機器上で実行されるが、第1および第2のモジュールから分離される第3のソフトウェアモジュールから通信され得る。
【0175】
ステートメント7:CKD関数は第2のソフトウェアモジュールに事前に知られており、第2のモジュールによる決定はCKD関数の事前知識に基づく、ステートメント3、4または5に記載の方法。
【0176】
ステートメント8:第1の鍵の各々は、ブロックチェーンへのそれぞれの子データストレージトランザクションの書き込みを認可する、先行ステートメントのいずれかに記載の方法。
【0177】
ステートメント9:データストレージトランザクションのうちの1つまたは複数の各々は、別のトランザクションのそれぞれのファンディング出力を指し示すそれぞれの入力を含み、それぞれの入力はそれぞれのロック解除スクリプトを含み、それぞれのロックスクリプトは、ブロックチェーンへの記録のためにそれぞれのデータストレージトランザクションを妥当性確認するために、オーバーレイグラフ構造におけるそれぞれの親データストレージトランザクションの第1の鍵に基づく暗号署名がそれぞれのロック解除スクリプトに含まれることを必要とする、先行ステートメントのいずれかに記載の方法。
【0178】
ステートメント10:各それぞれのファンディング出力は、それぞれの親データストレージトランザクション以外のそれぞれのファンディングトランザクションの出力である、ステートメント9に記載の方法。
【0179】
ステートメント11:各ファンディングトランザクションの入力は、ブロックチェーンへの記録のためにファンディングトランザクションを妥当性確認させるために、それぞれのファンディング鍵に基づく暗号署名を含み、それぞれのファンディングトランザクションの出力は、ブロックチェーンへのそれぞれのデータストレージトランザクションの記録にファンディングするためのデジタル資産の額を指定する、ステートメント10に記載の方法。
【0180】
ステートメント12:上記リンクの各々は、上記データストレージトランザクションのうちの親と子との間のリンクであり、リンクは、子のペイロードに親のそれぞれのトランザクションIDを含めることによってオーバーレイ層において形成される、先行ステートメントのいずれかに記載の方法。
【0181】
例えば、親のトランザクションIDは、それぞれの子データストレージトランザクションの使用不可能な出力に含まれ得る。いくつかの実施形態では、そのような出力は、スクリプトを終了させるオペコードをロックスクリプトに含めることによって、使用不可能にされ得る。例えば、これは、スクリプト言語のOP_RETURNオペコードであろう。
【0182】
ステートメント13:第2のソフトウェアモジュールは、第2のシードへのアクセスが与えられない、先行する請求項のいずれかに記載の方法。
【0183】
ステートメント14:第2の鍵は難読化鍵であり、上記追加の機能は、それぞれのノードのそれぞれのデータストレージトランザクションのデータコンテンツを難読化および/または難読化解除することを含む、先行ステートメントのいずれかに記載の方法。
【0184】
ステートメント15:難読化鍵は暗号化鍵であり、上記追加の機能は、それぞれのノードのそれぞれのデータストレージトランザクションのデータコンテンツを暗号化および/または解読することを含む、ステートメント14に記載の方法。
【0185】
ステートメント16:第2の鍵はファンディング鍵であり、上記追加の機能は、ブロックチェーンに記録されるべきそれぞれのノードのそれぞれのデータストレージトランザクションにファンディングすることを含む、ステートメント1から13のいずれかに記載の方法。
【0186】
ステートメント17:第2の鍵はアプリケーション層鍵であり、上記追加の機能は、それぞれのノードのそれぞれのデータストレージトランザクションに関連して実行されるべきアプリケーション層機能を含む、ステートメント1から13のいずれかに記載の方法。
【0187】
例えば、第2の鍵の各々は、例えば、得る冪等目的で使用される、それぞれのノードのそれぞれのデータ格納トランザクションの異なるそれぞれのアプリケーション層シリアル番号であり得る。
【0188】
ステートメント18:先行ステートメントのいずれかに記載の方法であって、以下をさらに含む:
第3のシードに適用されるCKDアルゴリズムを使用して、オーバーレイネットワークおよび第2の鍵のセットと同じグラフ構造を有する第3の鍵の階層セットを決定すること、ここで、各第3の鍵は、グラフ構造においてそれぞれのノードと同じ位置にあるノードのうちの異なるそれぞれ1つに対応し、第3の鍵は、第3の機能を有効にするためのものである。
【0189】
ステートメント19:少なくとも第1のシードおよび第2のシードは同じマスタシードから導出される、先行ステートメントのいずれかに記載の方法。
【0190】
ステートメント20:第2のソフトウェアモジュールは、第1のコンピュータ機器とは別個の第2のコンピュータ機器上で実行される、先行ステートメントのいずれかに記載の方法。
【0191】
ステートメント21:第1のコンピュータ機器は第1の当事者のコンピュータ機器であり、第2のコンピュータ機器は第1の当事者とは別個の第2の当事者のコンピュータ機器である、ステートメント20に記載の方法。
【0192】
ステートメント22:方法は、第2の当事者に第2の鍵を明らかにせずに、データストレージトランザクションのうちの1つまたは複数をブロックチェーンに記録させることを第2の当事者に委託するために、第1の当事者によって使用される、ステートメント21に記載の方法。
【0193】
ステートメント23:方法は、第2の当事者がそこに格納されたデータコンテンツを難読化解除することを可能にせずに、データストレージトランザクションのうちの1つまたは複数をブロックチェーン上に記録させることを第2の当事者に委託するために第1の当事者によって使用される、ステートメント14または15に従属するステートメント22に記載の方法。
【0194】
ステートメント24:第2のソフトウェアモジュールは、第1のソフトウェアモジュールと同じ第1のコンピュータ機器上で実行される、ステートメント1から19のいずれかに記載の方法。
【0195】
例えば、これは、第1のソフトウェアモジュールが破壊またはハッキングされた場合に第2の鍵が危険にさらされることを防止し、それによって、第1のモジュールの機能を第2のモジュールから分離させておくために使用され得る。
【0196】
ステートメント25:データコンテンツは、データストレージトランザクションのうちの1つまたは複数の使用不可能な出力に格納される、先行する請求項のいずれかに記載の方法。
【0197】
例えば、そのような出力は、スクリプトを終了させるオペコードをロックスクリプトに含めることによって、使用不可能にされ得る。例えば、これは、スクリプト言語のOP_RETURNオペコードであろう。
【0198】
ステートメント26:オーバーレイ層リンクは、データストレージトランザクションのペイロードの中に格納される、先行する請求項のいずれかに記載の方法。
【0199】
ステートメント27:グラフ構造はツリー構造である、先行する請求項のいずれかに記載の方法。
【0200】
ステートメント28:コンピュータ可読ストレージ上に具現化され、実行されると、先行ステートメントのいずれかに記載の方法にしたがって動作を実行するように構成されたコードを含むコンピュータプログラム製品。
【0201】
ステートメント29:以下を備えるコンピュータ機器:
1つまたは複数のメモリユニットを備えるメモリ、および
1つまたは複数の処理ユニットを含む処理装置、
ここで、メモリは、1つまたは複数の処理ユニット上で実行するように構成され、実行されると、ステートメント1から27のいずれかに記載の方法を実行するように構成された第1のソフトウェアモジュールを記憶する。
【0202】
ステートメント30:方法であって、第2のソフトウェアモジュールによって、以下を行うことを含む:
オーバーレイネットワークを表すグラフ構造におけるノードの位置の指示を第1のソフトウェアモジュールから受信すること、ここで、オーバーレイネットワークのデータコンテンツはブロックチェーン上のデータストレージトランザクションのペイロードに格納され、オーバーレイ層リンクはデータストレージトランザクション間で定義され、グラフ構造は複数のノードとノード間のエッジとを含み、ノードの各々はデータストレージトランザクションのうちの異なるそれぞれ1つに対応し、エッジの各々はリンクのうちの異なるそれぞれ1つに対応する、
指示された位置を使用して、第1の鍵の階層セットの中から鍵を決定すること、ここで、鍵の階層セットは、オーバーレイネットワークと同じグラフ構造を有し、各第1の鍵は、グラフ構造においてそれぞれのデータストレージトランザクションと同じ位置にあるノードのうちの異なるそれぞれ1つに対応し、上記決定することは、指示された位置にあるノードのそれぞれの鍵を、その位置と、上記セット鍵に使用されるCKD関数およびシードとに基づいて決定することを含む、ならびに
決定された鍵を使用して、データストレージトランザクションの入力に署名すること以外のそれぞれのデータストレージトランザクションに関連して機能を実行すること。
【0203】
ステートメント31:コンピュータ可読ストレージ上に具現化され、実行されると、ステートメント30に記載の方法にしたがって動作を実行するように構成されたコードを含むコンピュータプログラム製品。
【0204】
ステートメント32:以下を備えるコンピュータ機器:
1つまたは複数のメモリユニットを備えるメモリ、および
1つまたは複数の処理ユニットを含む処理装置、
ここで、メモリは、1つまたは複数の処理ユニット上で実行するように構成され、実行されると、ステートメント30に記載の方法を実行するように構成された第2のソフトウェアモジュールを記憶する。
【0205】
本明細書で開示される別の態様によれば、第1および第2のソフトウェアモジュールの両方の動作を含む方法が提供され得る。
【0206】
本明細書で開示される別の態様によれば、第1および第2のソフトウェアモジュールの両方を含む、コンピュータ可読ストレージ上に具現化されたコンピュータプログラム製品が提供され得る。
【0207】
本明細書で開示される別の態様によれば、第1および第2のコンピュータ機器を備えるシステムが提供され得る。
【0208】
開示された技法の他の変形例または使用事例は、本明細書の開示が与えられると、当業者に明らかになり得る。本開示の範囲は、説明された実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。