JP2023528649A - ファイル検証システムおよび方法 - Google Patents

ファイル検証システムおよび方法 Download PDF

Info

Publication number
JP2023528649A
JP2023528649A JP2022575356A JP2022575356A JP2023528649A JP 2023528649 A JP2023528649 A JP 2023528649A JP 2022575356 A JP2022575356 A JP 2022575356A JP 2022575356 A JP2022575356 A JP 2022575356A JP 2023528649 A JP2023528649 A JP 2023528649A
Authority
JP
Japan
Prior art keywords
node
file
transaction
blockchain
child node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022575356A
Other languages
English (en)
Other versions
JPWO2021249717A5 (ja
Inventor
パガーニ,アレッシオ
ライト,クレイグ,スティーヴン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nchain Holdings Ltd
Original Assignee
Nchain Holdings Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nchain Holdings Ltd filed Critical Nchain Holdings Ltd
Publication of JP2023528649A publication Critical patent/JP2023528649A/ja
Publication of JPWO2021249717A5 publication Critical patent/JPWO2021249717A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD

Abstract

ブロックチェーン上にオーバーレイされたツリー構造を使用する方法であって、ツリーの各ノードは、異なるトランザクションである、方法。この方法は、ブロックチェーンを検査して、ツリー構造の少なくとも一部を識別するステップを含み、このステップは、ターゲット子ノードのそれぞれのペイロードにおいてファイルの記録を含むターゲット子ノードを少なくとも識別することと、ツリー構造を通ってターゲット子ノードからルートノードに戻る1つまたは複数のエッジを含むパスを識別することとを含む。次いで、方法は、A)ターゲット子ノードからルートノードに戻る識別されたパスに沿ったエッジごとに、それぞれの子ノードがそれぞれの親ノードに関連付けられた鍵によって署名されていることをチェックすることと、B)ファイルの現在のインスタンスがターゲット子ノードに含まれる記録と一致することをチェックすることとを含む。ファイルの現在のインスタンスは、少なくともこれらのチェックを条件として検証される。

Description

本開示は、ブロックチェーン上のトランザクションのペイロードにデータコンテンツの記録が記憶されるブロックチェーンの応用に関する。
ブロックチェーンは、分散型データ構造の形態を指し、ブロックチェーンの複製コピーが、分散型ピアツーピア(P2P)ネットワーク(以下では「ブロックチェーンネットワーク」と呼ばれる)内の複数のノードの各々において維持され、広く公開されている。ブロックチェーンはデータブロックのチェーンを含み、各ブロックは1つまたは複数のトランザクションを含む。いわゆる「コインベーストランザクション」以外の各トランザクションは、1つまたは複数のコインベーストランザクションまで遡る1つまたは複数のブロックにまたがり得るシーケンス内の先行するトランザクションを指し示す。コインベーストランザクションについては以下でさらに説明する。ブロックチェーンネットワークにサブミットされるトランザクションは、新しいブロックに含まれる。新しいブロックは、「マイニング(mining)」と呼ばれることが多いプロセスによって作成され、このプロセスは、複数のノードの各々が「プルーフオブワーク(proof-of-work)」を実行しようと競うこと、すなわち、ブロックチェーンの新しいブロックに含まれるのを待っている、順序付けられ妥当性確認(validate)された保留中のトランザクションのプールに基づいて暗号パズルを解くことを伴う。ブロックチェーンはいくつかのノードでプルーニング(prune)され得、ブロックの公開は、単なるブロックヘッダの公開を通して達成され得ることに留意されたい。
ブロックチェーン内のトランザクションは、デジタル資産(すなわち、いくつかのデジタルトークン)を伝達すること、仮想台帳またはレジストリにおけるエントリのセットを順序付けること、タイムスタンプエントリを受信および処理すること、および/またはインデックスポインタを時間順にするこという目的のうちの1つまたは複数のために使用され得る。ブロックチェーンは、ブロックチェーンの上に追加の機能を重ねるために活用することもできる。例えば、ブロックチェーンプロトコルは、トランザクションにおける追加のユーザデータまたはデータへのインデックスの記憶を可能にし得る。単一のトランザクション内に記憶することができる最大データ容量に対してあらかじめ指定された制限はなく、したがって、より複雑なデータを組み込むことができる。例えば、これを使用して、ブロックチェーンに電子文書を記憶したり、オーディオまたはビデオデータを記憶したりすることができる。
ブロックチェーンネットワークのノード(「マイナー(miner)」と呼ばれることが多い)は、以下でより詳細に説明する分散型のトランザクション登録および検証プロセスを実行する。要するに、このプロセスの間に、ノードは、トランザクションを妥当性確認し、ノードが有効なプルーフオブワークの解を識別しようとするブロックテンプレートにそれらを挿入する。有効な解が見つかると、ネットワークの他のノードに新しいブロックが伝搬され、これにより、各ノードが、新しいブロックをブロックチェーンに記録することができる。トランザクションをブロックチェーンに記録させるために、ユーザ(例えば、ブロックチェーンクライアントアプリケーション)は、ネットワークのノードの1つにトランザクションを送信して、伝搬させる。トランザクションを受信したノードは、妥当性確認済みトランザクションを新しいブロックに組み込むプルーフオブワークの解を見つけようと競い合い得る。各ノードは、同じノードプロトコルを実施するように構成され、そのノードプロトコルには、トランザクションが有効であるための1つまたは複数の条件が含まれる。無効なトランザクションは、伝搬もブロックへの組込みもされない。トランザクションが妥当性確認され、それによってブロックチェーン上に受け入れられたと仮定すると、トランザクション(任意のユーザデータを含む)は、不変の公開記録としてブロックチェーンネットワーク内のノードの各々において登録およびインデックス付けされたままになる。
プルーフオブワークパズルを解くのに成功して最新のブロックを作成したノードは、典型的には、ある額のデジタル資産、すなわちいくつかのトークンを配布する「コインベーストランザクション」と呼ばれる新しいトランザクションで報酬が与えられる。無効なトランザクションの検出および拒否は、ネットワークのエージェントとして働き、不正を報告および阻止するようにインセンティブが与えられる競合ノードのアクションによって実施される。情報の広範な公開により、ユーザは、ノードの性能を連続的に監査することができる。単なるブロックヘッダの公開により、参加者は、ブロックチェーンの継続的な完全性を確実にすることができる。
「出力ベースの」モデル(UTXOベースモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力と1つまたは複数の出力とを含む。任意の使用可能な出力は、トランザクションの先行するシーケンスから導出可能なデジタル資産の額を指定する要素を含む。使用可能な出力は、UTXO(「未使用トランザクション出力」)と呼ばれることがある。出力は、出力を将来償還するための条件を指定するロックスクリプトをさらに含み得る。ロックスクリプトは、デジタルトークンまたは資産を妥当性確認および転送するために必要な条件を定義する述語(predicate)である。トランザクション(コインベーストランザクション以外)の各入力は、先行するトランザクションにおけるそのような出力へのポインタ(すなわち、参照)を含み、指し示された出力のロックスクリプトをロック解除するためのロック解除スクリプトをさらに含み得る。そのため、トランザクションのペアを考慮して、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定する少なくとも1つの出力を含み、出力をロック解除する1つまたは複数の条件を定義するロックスクリプトを含む。第2のターゲットトランザクションは、第1のトランザクションの出力へのポインタを含む少なくとも1つの入力と、第1のトランザクションの出力をロック解除するためのロック解除スクリプトとを含む。
そのようなモデルでは、第2のターゲットトランザクションがブロックチェーンネットワークに送信されて伝搬されブロックチェーンに記録されるとき、各ノードで適用される有効性の基準のうちの1つは、ロック解除スクリプトが第1のトランザクションのロックスクリプトで定義された1つまたは複数の条件のすべてを満たすことである。もう1つは、第1のトランザクションの出力が別の先の有効なトランザクションによってまだ償還されていないということである。これらの条件のいずれかにしたがってターゲットトランザクションが無効であることを発見したノードは、(無効なトランザクションを登録するために伝搬する可能性はあるが、有効なトランザクションとしては)それを伝搬することも、ブロックチェーンに記録されるように新しいブロックにそれを含めることもしない。
トランザクションモデルの別のタイプは、アカウントベースのモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個にノードによって記憶され、絶えず更新される。
ブロックチェーンネットワークは、すでにインターネットのような基礎となるネットワークの上にオーバーレイされたオーバーレイネットワークの一種である。しかしながら、ブロックチェーン上にオーバーレイネットワークのさらなる層をオーバーレイすることも可能である。この例はメタネットとして知られている。メタネットの各ノードは、ブロックチェーン上の異なるトランザクションである(「ノード」は、ここでは異なる意味で使用されており、ブロックチェーンネットワークのノードを指すのではなく、メタネットのノードを指すことに留意されたい)。データコンテンツおよびメタネットメタデータは、OP_RETURNによってトランザクションの使用不可能な出力において、そのような各トランザクションのペイロードに記憶される。データコンテンツは、例えば、テキスト、画像、ビデオまたはオーディオコンテンなどを記憶するためにメタネットが使用されている実際のユーザコンテンツであり、メタデータは、メタネットノード間のリンクを定義する。メタネットノード間のリンクまたはエッジは、ブロックチェーン層における使用エッジに必ずしも対応しない。すなわち、所与のメタネットトランザクションの入力が、ブロックチェーン層における別のファンディングトランザクションの出力を指し示す場合、メタネット層におけるその同じトランザクションまたはメタネットノードは、必ずしも、ファンディングトランザクションと同じトランザクションではない。代わりに、メタネット層におけるリンクまたはエッジは、メタネットのデータコンテンツ間のリンクを定義する。
オペレーティングシステムなどは、外部の脅威(例えば、ウイルス、マルウェア、スパイウェア)および意図しないユーザ挙動(例えば、意図しないファイル削除、構成変更)から常に保護する必要がある。さらに、特に企業環境では、ライセンス契約によりソフトウェアの使用が制限または制御されている場合がある。
本開示は、ソフトウェアセキュリティおよびデータ完全性を保証し、ファイル動作および変更を監視および管理するために使用することができる、メタネットベースのグラフなどの、ブロックチェーン上にオーバーレイされたグラフ構造に基づくソリューションを提示する。例えば、実施形態では、メタネットベースのシステムは、本明細書でメタネットトリップワイヤプロトコル(MTP:Metanet Tripwire Protocol)と呼ばれる新しいメタネットプロトコルを使用して設計することができる。MTPは、所与のファイルに対して許可された動作(例えば、読み出し、書き込み、実行)およびファイルの有効性を指定する。メタネットトリップワイヤを使用するシステムは、メタネットグラフを使用してシステム管理者によって証明されたファイルを開くまたは実行することのみ行う。
本開示の一態様によれば、ブロックチェーン上にオーバーレイされたツリー構造を使用する方法であって、ツリー構造は、複数のノードとノード間のエッジとを含み、各ノードは、ブロックチェーン上に記録された異なるトランザクションであり、各エッジは、それぞれの子ノードからそれぞれの親ノードに接続し、エッジは、トランザクションIDを含む各トランザクションによって形成され、各子ノードは、子ノードのそれぞれのペイロードにおいてそれぞれの親ノードのトランザクションIDを指定し、親ノードのうちの1つは、ツリー構造のルートノードである、方法が提供される。この方法は、ブロックチェーンを検査して、ツリー構造の少なくとも一部を識別するステップを含み、このステップは、ターゲット子ノードのそれぞれのペイロードにおいてファイルの記録を含む子ノードのうちのターゲット子ノードを少なくとも識別することと、ツリー構造を通ってターゲット子ノードからルートノードに戻る1つまたは複数のエッジを含むパスを識別することとを含む。次いで、この方法は、チェックを実行するステップを含み、このステップは、A)ターゲット子ノードからルートノードに戻る識別されたパスに沿ったエッジごとに、それぞれの子ノードがそれぞれの親ノードに関連付けられた鍵によって署名されていることをチェックすることと、B)ファイルの現在のインスタンスがターゲット子ノードに含まれる記録と一致することをチェックすることとすることとを含む。ファイルの現在のインスタンスは、少なくともチェックA)およびB)が肯定的であるという条件で検証される。
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、単なる例として添付の図面を参照する。
ブロックチェーンを実装するためのシステムの概略ブロック図である。 ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す。 ブロックチェーン上にオーバーレイされたネットワークの概略図である。 ブロックチェーン上にメタネットなどのネットワークをオーバーレイするための例示的なプロトコルを示す概略的なトランザクション図である。 本明細書に開示される実施形態によるメタネットシステムツリーを概略的に示し、メタネットシステムツリーは、システムルートノードおよび3つのファイルハッシュノードを表す。 プログラムを実行するために必要とされるすべてのファイルがマークルツリーにおいてリンクされ、マークルツリールートがファイルハッシュノードに記憶される、本明細書の実施形態によるマークルツリーの使用を概略的に示す。 本明細書に開示される実施形態による、ファイルハッシュノード(FH)を記憶および更新するために使用されるメタネットツリーを概略的に示し、ノードは、子を有さない場合のみ有効である。 本明細書に開示される実施形態による、ファイルシステムフォルダ構造(左側)と、メタネットフォルダノードを使用した複製構造(右側)とを概略的に示す。ドライブC:およびY:は、フォルダノードとしてオンチェーンで記憶される。 保護されたファイルが管理者によって管理される、本明細書の実施形態によるマルチユーザシステムを概略的に示す。各ユーザは、プライベートファイルの異なるサブセットへのアクセスを有し、ファイルは、(場合によっては異なる許可を有する)複数のユーザによってアクセスされ得る。 本明細書に開示される実施形態による企業シナリオを概略的に示し、会社のシステム管理者が各システムルートを初期化する。ユーザノードは、ファイルまたはフォルダのサブセットを管理するためにユーザに割り当てることができる。 本明細書に開示される実施形態によるメタネットトリップワイヤノードの例示的な構造を概略的に示す。オプションの特徴のリストは網羅的ではない。 本明細書に開示される実施形態による例示的な方法を示す概略フローチャートである。
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットなどの広域インターネットワークであるパケット交換ネットワーク101で構成され得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように構成され得る複数のブロックチェーンノード104を含む。図示されていないが、ブロックチェーンノード104は、ほぼ完全なグラフとして構成され得る。したがって、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続される。
各ブロックチェーンノード104は、ピアのコンピュータ機器を含み、ノード104の異なるものは、異なるピアに属する。各ブロックチェーンノード104は、1つまたは複数のプロセッサ、例えば、1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)、ならびに特定用途向け集積回路(ASIC)などの他の機器を備える処理装置を含む。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を採用する1つまたは複数のメモリユニットを備え得る。
ブロックチェーン150は、データブロック151のチェーンを含み、ブロックチェーン150のそれぞれのコピーは、分散型またはブロックチェーンネットワーク106内の複数のブロックチェーンノード104の各々で維持される。上述したように、ブロックチェーン150のコピーを維持することは、ブロックチェーン150を完全に記憶することを必ずしも意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(後述する)を記憶している限り、データがプルーニングされ得る。チェーン内の各ブロック151は、1つまたは複数のトランザクション152を含み、この文脈におけるトランザクションは、データ構造の一種を指す。データ構造の性質は、トランザクションモデルまたは方式の一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、プロパティとしてデジタル資産の量を表す額を指定し、その例は、出力が暗号的にロックされている(ロック解除され、それによって償還または使用されるためにはそのユーザの署名または他のソリューションを必要とする)ユーザ103である。各入力は、先行するトランザクション152の出力を指し示し、それによってトランザクションをリンクする。
各ブロック151はまた、ブロック151への順番を定義するために、チェーン内の前に作成されたブロック151を指し示すブロックポインタ155を含む。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスへの順序を定義するために、前のトランザクションへ戻るポインタを含む(注意:トランザクション152のシーケンスは分岐することが可能である)。ブロック151のチェーンは、チェーン内の最初のブロックであった発生ブロック(Gb:genesis block)153までずっと戻る。チェーン150内の早期にある1つまたは複数の元のトランザクション152は、先行するトランザクションではなく発生ブロック153を指し示していた。
ブロックチェーンノード104の各々は、トランザクション152を他のブロックチェーンノード104にフォワードし、それによってトランザクション152をネットワーク106全体に伝搬させるように構成される。各ブロックチェーンノード104は、ブロック151を作成し、同じブロックチェーン150のそれぞれのコピーをそれらのそれぞれのメモリに記憶するように構成される。各ブロックチェーンノード104はまた、ブロック151に組み込まれるのを待っているトランザクション152の順序付きプール154を維持する。順序付きプール154は、「メムプール(mempool)」と呼ばれることが多い。本明細書におけるこの用語は、任意の特定のブロックチェーン、プロトコル、またはモデルに限定することを意図していない。これは、ノード104が有効であるとして受け入れたトランザクションの順序付きセットを指し、それに対して、ノード104は、同じ出力を使用しようとする他のトランザクションを受け入れないように義務付けられている。
所与の現在のトランザクション152jにおいて、その入力(または各入力)は、トランザクションのシーケンスにおける先行するトランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還または「使用」されるべきであることを指定する。一般に、先行するトランザクションは、順序付きセット154または任意のブロック151内の任意のトランザクションであり得る。先行するトランザクション152iは、現在のトランザクションが有効となるためには存在および妥当性確認される必要があるが、先行するトランザクション152iは、現在のトランザクション152jが作成されるときまたはネットワーク106に送信されるときに必ずしも存在する必要はない。したがって、本明細書における「先行する(preceding)」は、ポインタによってリンクされた論理シーケンスにおける先行するものを指し、必ずしも時間シーケンスにおける作成または送信の時間を指すものではなく、したがって、トランザクション152i、152jが順不同に作成または送信されることを必ずしも除外するものではない(オーファントランザクションに関する以下の説明を参照)。先行するトランザクション152iは、同様に、先のトランザクション(antecedent transaction)または先行したトランザクション(predecessor transaction)とも呼ばれる。
現在のトランザクション152jの入力はまた、入力認可、例えば、先行するトランザクション152iの出力がロックされている先のユーザ103aの署名を含む。次に、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行するトランザクション152iの入力において定義された額を、現在のトランザクション152jの出力において定義されたように、新しいユーザまたはエンティティ103bに転送することができる。場合によっては、トランザクション152は、複数のユーザまたはエンティティ(そのうちの1つは残り(change)を与えるために元のユーザまたはエンティティ103aであり得る)間で入力額を分割するために複数の出力を有し得る。場合によっては、トランザクションはまた、1つまたは複数の先行するトランザクションの複数の出力からの額をまとめ、現在のトランザクションの1つまたは複数の出力に再分配するために複数の入力を有することができる。
ビットコインなどの出力ベースのトランザクションプロトコルによれば、個々のユーザまたは組織などの当事者103が(手動でまたは当事者によって採用される自動プロセスによって)新しいトランザクション152jを制定することを望むとき、制定を行う当事者は、新しいトランザクションをそのコンピュータ端末102から受信者に送信する。制定を行う当事者または受信者は、最終的に、このトランザクションをネットワーク106のブロックチェーンノード104の1つまたは複数(これは、現在では、典型的にはサーバまたはデータセンタであるが、原則として他のユーザ端末であってもよい)に送信する。新しいトランザクション152jを制定する当事者103がトランザクションをブロックチェーンノード104の1つまたは複数に直接送信し、いくつかの例では、受信者に送信しないことも除外されない。トランザクションを受信するブロックチェーンノード104は、ブロックチェーンノード104の各々で適用されるブロックチェーンノードプロトコルにしたがって、トランザクションが有効であるかどうかをチェックする。ブロックチェーンノードプロトコルは、典型的には、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付きシーケンス内で前のトランザクション152iに依存する予想される署名と一致することをチェックするようにブロックチェーンノード104に求める。そのような出力ベースのトランザクションプロトコルでは、これは、新しいトランザクション152jの入力に含まれる当事者103の暗号署名または他の認可が、新しいトランザクションが割り当てる先行するトランザクション152iの出力において定義される条件と一致することをチェックすることを含み得、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名または他の認可が、新しいトランザクションの入力がリンクされている前のトランザクション152iの出力をロック解除することを少なくともチェックすることを含む。条件は、先行するトランザクション152iの出力に含まれるスクリプトによって少なくとも部分的に定義され得る。代替的に、単にブロックチェーンノードプロトコルのみによって固定されてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが有効である場合、ブロックチェーンノード104は、それをブロックチェーンネットワーク106内の1つまたは複数の他のブロックチェーンノード104にフォワードする。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルにしたがって同じテストを適用し、そして、新しいトランザクション152jを1つまたは複数のさらなるノード104にフォワードし、以下同様である。このようにして、新しいトランザクションはブロックチェーンノード104のネットワーク全体に伝搬される。
出力ベースのモデルでは、所与の出力(例えば、UTXO)が割り当てられる(例えば、使用される)かどうかの定義は、それがブロックチェーンノードプロトコルにしたがって別の前方のトランザクション152jの入力によって有効に償還されたかどうかである。トランザクションが有効であるための別の条件は、それが償還しようとする先行するトランザクション152iの出力が、別のトランザクションによってまだ償還されていないことである。この場合も同様に、有効ではない場合、トランザクション152jは、(無効としてフラグ付けされ、警告のために伝搬されない限り)伝搬されることも、ブロックチェーン150内に記録されることもない。これは、トランザクタ(transactor)が同じトランザクションの出力を複数回割り当てようとする二重支出を防止する。一方、アカウントベースのモデルは、アカウント残高を維持することによって二重支出を防止する。ここでも、トランザクション順序が定義されているので、アカウント残高は常に単一の定義された状態にある。
トランザクションを妥当性確認することに加えて、ブロックチェーンノード104はまた、「プルーフオブワーク」によって支持される、一般にマイニングと呼ばれるプロセスにおいてトランザクションのブロックを最初に作成しようと競い合う。ブロックチェーンノード104において、新しいトランザクションが、ブロックチェーン150上に記録されたブロック151内にまだ現れていない有効なトランザクションの順序付きプール154に追加される。次いで、ブロックチェーンノードは、暗号パズルを解こうとすることで、トランザクションの順序付きセット154からトランザクション152の新しい有効なブロック151を組み立てようと競い合う。典型的には、これは、ナンスが保留中のトランザクションの順序付きプール154の表現と連結されハッシュされたときにハッシュの出力が所定の条件を満たすような「ナンス」値を探索することを含む。例えば、所定の条件とは、ハッシュの出力が特定の所定の数の先行ゼロを有することであり得る。これは、プルーフオブワークパズルの1つの特定のタイプにすぎず、他のタイプが除外されないことに留意されたい。ハッシュ関数の特性は、その入力に対して予測不可能な出力を持つことである。したがって、この探索は、総当たりでしか実行することができないので、パズルを解こうとしている各ブロックチェーンノード104でかなりの量の処理リソースを消費する。
最初にパズルを解いたブロックチェーンノード104は、これをネットワーク106に公表し、後にネットワーク内の他のブロックチェーンノード104によって容易にチェックすることができるその解を証明として提供する(ハッシュに対する解が与えられると、ハッシュの出力が条件を満たすことをチェックすることは簡単である)。この最初のブロックチェーンノード104は、ブロックを、このブロックを受け入れる他のノードの閾値コンセンサスに伝搬し、プロトコルルールを実施する。次いで、トランザクション154の順序付きセットは、ブロックチェーンノード104の各々によってブロックチェーン150内に新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーン内の前に作成されたブロック151n-1を指し示す新しいブロック151nに割り当てられる。プルーフオブワークの解を作成するために必要とされる、例えばハッシュの形態の、かなりの量の労力は、ブロックチェーンプロトコルのルールに従うという最初のノード104の意図を示す。そのようなルールは、別名二重支出としても知られている、前に妥当性確認されたトランザクションと同じ出力の割当てを行う場合、トランザクションを有効として受け入れないことを含む。ブロック151は、一旦作成されると、ブロックチェーンネットワーク106内のブロックチェーンノード104の各々において認識および維持されるので、修正することができない。ブロックポインタ155はまた、ブロック151に順番を付与する。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付きブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
任意の所与の時間にパズルを解こうと競い合う異なるブロックチェーンノード104は、それらがいつ解を探索し始めたかまたはトランザクションが受信された順序に応じて、任意の所与の時間に、まだ公開されていないトランザクション154のプールの異なるスナップショットに基づいてそれを行っていてもよいことに留意されたい。誰がそれぞれのパズルを最初に解いても、どのトランザクション152が次の新しいブロック151nにどの順序で含まれるかを定義し、公開されていないトランザクションの現在のプール154が更新される。次いで、ブロックチェーンノード104は、新たに定義された、公開されていないトランザクション154のプールからブロックを作成しようと競い合い続け、以下同様である。2つのブロックチェーンノード104が互いに非常に短い時間内にパズルを解いて、ブロックチェーンの相反する見解がノード104間で伝搬される場合に発生し得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、フォークのどちらのプロングが最も長く成長しても、確定的なブロックチェーン150となる。同じトランザクションが両方のフォークに現れるので、これがネットワークのユーザまたはエージェントに影響を与えないことに留意されたい。
ビットコインブロックチェーン(およびほとんどの他のブロックチェーン)によれば、新しいブロック104の構築に成功したノードには、(あるエージェントまたはユーザから別のエージェントまたはユーザにある額のデジタル資産を転送するエージェント間またはユーザ間のトランザクションとは対照的に)追加の定義された量のデジタル資産を分配する新しい特別な種類のトランザクションにおいて、受け入れられた追加の額のデジタル資産を新たに割り当てる能力が与えられる。この特別なタイプのトランザクションは、通常、「コインベーストランザクション」と呼ばれるが、「開始トランザクション(initiation transaction)」または「生成トランザクジョン(generation transaction)」と呼ばれることもある。これは典型的に、新しいブロック151nの最初のトランザクションを形成する。プルーフオブワークは、新しいブロックを構築するノードが、この特別なトランザクションが後に償還されることを可能にするプロトコルルールに従うという意図を示す。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還され得る前に、満期期間、例えば100個のブロックを必要とし得る。多くの場合、通常の(非生成)トランザクション152はまた、そのトランザクションが公開されたブロック151nを作成したブロックチェーンノード104にさらに報酬を与えるために、その出力のうちの1つにおいて追加のトランザクション手数料を指定する。この手数料は通常「マイニング手数料」と呼ばれ、以下に説明する。
トランザクション妥当性確認および公開に関与するリソースに起因して、典型的には、ブロックチェーンノード104の少なくとも各々は、1つまたは複数の物理サーバユニットを含むサーバの形態をとるか、さらにはデータセンタ全体の形態をとる。しかしながら、原則として、任意の所与のブロックチェーンノード104は、ユーザ端末または互いにネットワーク化されたユーザ端末のグループの形態をとることができる。
各ブロックチェーンノード104のメモリは、そのそれぞれの1つまたは複数の役割を実行し、ブロックチェーンノードプロトコルにしたがってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で実行されるように構成されたソフトウェアを記憶する。本明細書においてブロックチェーンノード104に帰する任意のアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーション層、またはオペレーティングシステム層もしくはプロトコル層などの下位層、またはこれらの任意の組合せにおける1つまたは複数のアプリケーションにおいて実装され得る。
消費ユーザの役割を果たす複数の当事者103の各々のコンピュータ機器102もネットワーク101に接続されており、それぞれが個々のユーザまたは組織であり得る。これらのユーザは、ブロックチェーンネットワーク106と対話し得るが、トランザクションの妥当性確認にもブロックの構築にも参加しない。これらのユーザまたはエージェント103のうちのいくつかは、トランザクションの送信者および受信者として動作し得る。他のユーザは、必ずしも送信者または受信者として動作することなくブロックチェーン150と対話し得る。例えば、いくつかの当事者は、(例えば、ブロックチェーンノード104からブロックチェーンのコピーを取得した)ブロックチェーン150のコピーを記憶するストレージエンティティとして動作し得る。
当事者103のうちのいくつかまたはすべては、異なるネットワーク、例えば、ブロックチェーンネットワーク106の上にオーバーレイされたネットワークの一部として接続され得る。ブロックチェーンネットワークのユーザ(「クライアント」と呼ばれことが多い)は、ブロックチェーンネットワーク106を含むシステムの一部であるといえるが、これらのユーザは、ブロックチェーンノードに求められる役割を果たさないので、ブロックチェーンノード104ではない。代わりに、各当事者103はブロックチェーンネットワーク106と対話してもよく、ブロックチェーンノード106に接続する(すなわち通信する)ことでブロックチェーン150を利用し得る。2つの当事者103およびそれらのそれぞれの機器102、すなわち、第1の当事者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ機器102bは、例示の目的で示されている。そのような当事者103およびそれらのそれぞれのコンピュータ機器102ははるかに多く存在し、システム100に参加し得るが、便宜上、それらは図示されていないことが理解されよう。各当事者103は、個人または組織であり得る。純粋に例示として、第1の当事者103aは、本明細書ではアリスと呼ばれ、第2の当事者103bはボブと呼ばれるが、これは限定的なものではなく、本明細書におけるアリスまたはボブへのいかなる言及も、それぞれ「第1の当事者」および「第2の当事者」と置き換えられ得ることが理解されよう。
各当事者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つまたは複数の他のネットワーク化されたリソースを含み得る。
クライアントアプリケーション105は、最初に、1つまたは複数の適切なコンピュータ可読記憶媒体上で任意の所与の当事者103のコンピュータ機器102に提供され得、例えば、サーバからダウンロードされ得るか、またはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのリムーバブル記憶デバイス上で提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を備える。これは2つの主要な機能を有する。これらのうちの1つは、それぞれの当事者103が、トランザクション152を作成し、認可し(例えば署名し)、1つまたは複数のビットコインノード104に送信することを可能にして、トランザクション152を、ブロックチェーンノード104のネットワーク全体に伝搬させ、それによってブロックチェーン150に含まれるようにすることである。もう1つは、それぞれの当事者に、その当事者が現在所有しているデジタル資産の額を報告することである。出力ベースのシステムでは、この第2の機能は、当該当事者に属するブロックチェーン150全体に散在している様々なトランザクション152の出力において定義された額を照合することを含む。
様々なクライアント機能が、所与のクライアントアプリケーション105に統合されるものとして説明され得るが、必ずしもこれに限定されず、代わりに、本明細書で説明される任意のクライアント機能は、例えば、APIを介してインターフェースする、または一方が他方へのプラグインである2つ以上の別個のアプリケーション一式において実装され得ることに留意されたい。より一般的には、クライアント機能は、アプリケーション層もしくはオペレーティングシステムなどの下位層、またはこれらの任意の組合せにおいて実装され得る。以下では、クライアントアプリケーション105に関して説明するが、これに限定されないことが理解されよう。
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104のうちの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能はトランザクション152をネットワーク106に送信することができる。クライアント105はまた、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150にクエリを行うためにブロックチェーンノード104にコンタクトすることができる(または、実施形態では、ブロックチェーン150は、部分的にその公開性(public visibility)を通じてトランザクションにおける信頼を提供する公共施設であるので、実際にブロックチェーン150における他の当事者のトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルにしたがってトランザクション152を定式化し、送信するように構成される。上述したように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルにしたがってトランザクション152を妥当性確認し、トランザクション152をフォワードして、それらをブロックチェーンネットワーク106全体に伝搬するように構成されたソフトウェアを実行する。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルに従い(go with)、一緒に所与のトランザクションモデルを実装する。ブロックチェーン150内のすべてのトランザクション152に対して同じトランザクションプロトコルが使用される。ネットワーク106内のすべてのノード104によって同じノードプロトコルが使用される。
所与の当事者103、例えばアリスが、ブロックチェーン150に含まれるべき新しいトランザクション152jを送信することを望むとき、アリスは、関連トランザクションプロトコルにしたがって(アリスのクライアントアプリケーション105内のウォレット機能を使用して)新しいトランザクションを定式化する。次いで、アリスは、クライアントアプリケーション105から、アリスが接続されている1つまたは複数のブロックチェーンノード104にトランザクション152を送信する。例えば、これは、アリスのコンピュータ102に最良に接続されたブロックチェーンノード104であり得る。任意の所与のブロックチェーンノード104は、新しいトランザクション152jを受信すると、ブロックチェーンノードプロトコルおよびそのそれぞれの役割にしたがってそれを処理する。これは、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たすかを最初にチェックすることを含み、その例については、以下でより詳細に説明する。いくつかのトランザクションプロトコルでは、妥当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替的に、条件は、単にノードプロトコルの組込み特徴であってもよく、またはスクリプトとノードプロトコルとの組合せによって定義されてもよい。
新たに受信されたトランザクション152jが、有効であるとみなされるためのテストにパスすることを条件として(すなわち、それが「妥当性確認される」ことを条件として)、トランザクション152jを受信する任意のブロックチェーンノード104は、そのブロックチェーンノード104において維持されるトランザクション154の順序付きセットに新たな妥当性確認済みトランザクション152を追加する。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、妥当性確認済みトランザクション152をネットワーク106内の1つまたは複数の他のブロックチェーンノード104へと前方に伝搬する。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、ネットワーク106全体にわたってすぐに伝搬されることを意味する。
所与のブロックチェーンノード104において維持される保留中のトランザクション154の順序付きプールに承認されると、そのブロックチェーンノード104は、新しいトランザクション152を含むそれぞれのプール154の最新バージョンに対してプルーフオブワークパズルを解こうと競い始める(他のブロックチェーンノード104が、トランザクション154の異なるプールに基づいてパズルを解こうと試みている可能性があるが、どのノードでも最初に解いたものが、最新のブロック151に含まれるトランザクションのセットを定義することを想起されたい。最終的に、ブロックチェーンノード104は、アリスのトランザクション152jを含む順序付きプール154の一部についてパズルを解くことになる)。新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは普遍的にブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、先のトランザクションへ戻るポインタを含むので、トランザクションの順序も不変的に記録される。
異なるブロックチェーンノード104は、最初、所与のトランザクションの異なるインスタンスを受信し得るので、1つのインスタンスが新しいブロック151において公開される(この時点で、公開されたインスタンスが唯一の有効なインスタンスであることにすべてのブロックチェーンノード104が同意している)までは、どのインスタンスが「有効」であるかについて相反する見解を有する。ブロックチェーンノード104が1つのインスタンスを有効として受け入れ、次いで、別のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのブロックチェーンノード104は、これを受け入れなければならず、最初に受け入れたインスタンス(すなわち、ブロック151で公開されていないもの)を破棄する(すなわち、無効として扱う)。
いくつかのブロックチェーンネットワークによって動作される代替タイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれ得る。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行するトランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個にそのネットワークのノードによって記憶され、絶えず更新される。そのようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者によってその暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。加えて、トランザクションにおけるオプションのデータフィールドも署名することができる。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを指し示し得る。
UTXOベースのモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と略記される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下では、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明する。しかしながら、これはすべての可能な実施形態に限定されない。例示的なUTXOベースのプロトコルは、ビットコインを参照して説明されるが、他の例示的なブロックチェーンネットワーク上でも等しく実装され得ることに留意されたい。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を含むデータ構造を含む。各出力203は、未使用トランザクション出力(UTXO)を含み得、これは、(UTXOがまだ償還されていない場合)別の新しいトランザクションの入力202のソースとして使用され得る。UTXOは、デジタル資産の額を指定する値を含む。これは、分散型台帳上のトークンの設定数を表す。UTXOはまた、他の情報の中でも、元となるトランザクションのトランザクションIDを含み得る。トランザクションデータ構造は、入力フィールド(複数可)202および出力フィールド(複数可)203のサイズを示すインジケータを含み得るヘッダ201も含み得る。ヘッダ201はまた、トランザクションのIDを含み得る。実施形態では、トランザクションIDは、(トランザクションID自体を除く)トランザクションデータのハッシュであり、ノード104にサブミットされる生のトランザクション152のヘッダ201に記憶される。
アリス103aが、当該デジタル資産の額をボブ103bに転送するトランザクション152jを作成することを望むとする。図2では、アリスの新しいトランザクション152jは「Tx1」とラベル付けされている。これは、シーケンス内の先行するトランザクション152iの出力203においてアリスにロックされたデジタル資産の額を取り、これのうちの少なくとも一部をボブに転送する。先行するトランザクション152iは、図2では「Tx0」とラベル付けされている。Tx0およびTx1は、単なる任意のラベルである。それらは、Tx0がブロックチェーン151内の最初のトランザクションであること、またはTx1がプール154内のすぐ次のトランザクションであることを必ずしも意味するものではない。Tx1は、アリスにロックされた未使用の出力203を依然として有する任意の先行する(すなわち先の)トランザクションを指し示すことができる。
先行するトランザクションTx0は、アリスが新しいトランザクションTx1を作成した時点では、または少なくともアリスがそれをネットワーク106に送信する時点までには、すでに妥当性確認されブロックチェーン150のブロック151に含まれている可能性がある。それは、その時点でブロック151のうちの1つにすでに含まれていてもよいし、順序付きセット154で依然として待機していてもよく、この場合、すぐに新しいブロック151に含まれることになる。代替的に、Tx0およびTx1を作成してネットワーク106に一緒に送信することもできるし、ノードプロトコルが「オーファン」トランザクションのバッファリングを可能にする場合には、Tx0をTx1の後に送信することさえもできる。トランザクションのシーケンスの文脈において本明細書で使用される「先行する」および「後続の」という用語は、トランザクション内で指定されているトランザクションポインタ(どのトランザクションがどの他のトランザクションを指し示すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、同様に、「先行するもの(predecessor)」および「後続するもの(successor)」、または「先の」および「後の」、「親」および「子」などと置き換えられ得る。これは、それらの作成、ネットワーク106への送信、または任意の所与のブロックチェーンノード104への到着の順序を必ずしも意味するものではない。それにもかかわらず、先行するトランザクション(先のトランザクションまたは「親」)を指し示す後続するトランザクション(後のトランザクションまたは「子」)は、親トランザクションが妥当性確認されない限り、妥当性確認されない。親より前にブロックチェーンノード104に到着する子は、オーファンとみなされる。それは、ノードプロトコルおよび/またはノード挙動に応じて、親を待つために特定の時間バッファされるかまたは破棄され得る。
先行するトランザクションTx0の1つまたは複数の出力203のうちの1つは、本明細書ではUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、ロックスクリプトとを含み、ロックスクリプトは、後続のトランザクションが妥当性確認され、したがってUTXOが正常に償還されるために、後続のトランザクションの入力202内のロック解除スクリプトが満たさなければならない条件を定義する。典型的には、ロックスクリプトは、その額を特定の当事者(それが含まれるトランザクションの受益者)にロックする。すなわち、ロックスクリプトは、典型的には、後続のトランザクションの入力内のロック解除スクリプトに、先行するトランザクションがロックされる当事者の暗号署名が含まれるという条件を含むロック解除条件を定義する。
ロックスクリプト(通称scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有言語で書かれたコードの一部分である。そのような言語の特定の例は、ブロックチェーンネットワークによって使用される「スクリプト(Script)」(大文字S)と呼ばれる。ロックスクリプトは、トランザクション出力203を使用するためにどの情報が必要とされるか、例えばアリスの署名の必要性、を指定する。ロック解除スクリプトはトランザクションの出力に現れる。ロック解除スクリプト(通称scriptSig)は、ロックスクリプト基準を満たすのに必要な情報を提供するドメイン固有言語で書かれたコードの一部分である。例えば、それはボブの署名を含み得る。ロック解除スクリプトは、トランザクションの入力202に現れる。
つまり、図示の例では、Tx0の出力203内のUTXO0は、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効となるために)アリスの署名Sig PAを必要とするロックスクリプト[Checksig PA]を含む。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアの公開鍵PAの表現(すなわち、ハッシュ)を含む。Tx1の入力202は、(例えば、実施形態ではトランザクションTx0全体のハッシュであるそのトランザクションID、TxID0によって)Tx1を指し示すポインタを含む。Tx1の入力202は、Tx0の任意の他の可能な出力の中からUTXO0を識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1の入力202は、アリスが鍵ペアのアリスの秘密鍵をデータの所定の部分(暗号では「メッセージ」と呼ばれることもある)に適用することによって作成された、アリスの暗号署名を含むロック解除スクリプト<Sig PA>をさらに含む。有効な署名を提供するためにアリスによって署名される必要があるデータ(または「メッセージ」)は、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
新しいトランザクションTx1がブロックチェーンノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトおよびロック解除スクリプトを一緒に実行して、ロック解除スクリプトがロックスクリプトで定義されている条件(この条件は1つまたは複数の基準を含み得る)を満たすかどうかをチェックすることを含む。実施形態では、これは2つのスクリプトを連結することを含む:
<Sig PA> <PA> || [Checksig PA]
ここで、「||」は連結を表し、「<…>」はデータをスタックに置くことを意味し、「[…]」はロックスクリプト(この例ではスタックベースの言語)で構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなく、共通スタックを用いて次々に実行され得る。いずれにしても、一緒に実行されるとき、スクリプトは、Tx0の出力内のロックスクリプトに含まれるようなアリスの公開鍵PAを使用して、Tx1の入力内のロック解除スクリプトが、データの予想される部分に署名したアリスの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)はまた、この認証を実行するために含まれる必要がある。実施形態では、署名されたデータは、Tx1の全体を含む(つまり、平文のデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので、含まれる必要はない)。
公開-秘密暗号法による認証の詳細は、当業者によく知られている。基本的に、アリスが自身の秘密鍵を使用してメッセージに署名した場合、アリスの公開鍵および平文のメッセージが与えられると、ノード104などの別のエンティティは、メッセージがアリスによって署名されたものに違いないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、これを署名としてメッセージにタグ付けすることを含み、これにより、公開鍵の任意の保持者が署名を認証することができる。したがって、データの特定の部分またはトランザクションの一部などに署名することへの本明細書におけるいかなる参照も、実施形態では、データのその部分またはトランザクションの一部のハッシュに署名することを意味し得ることに留意されたい。
Tx1内のロック解除スクリプトが、Tx0のロックスクリプト内で指定されている1つまたは複数の条件を満たす場合(つまり、図示の例では、アリスの署名がTx1内で提供され、認証された場合)、ブロックチェーンノード104は、Tx1が有効であるとみなす。これは、ブロックチェーンノード104が、保留中のトランザクション154の順序付きプールにTx1を追加することとなることを意味する。ブロックチェーンノード104はまた、トランザクションTx1をネットワーク106内の1つまたは複数の他のブロックチェーンノード104にフォワードして、トランザクションTx1がネットワーク106全体に伝搬されるようにする。Tx1が妥当性確認されてブロックチェーン150に含まれると、これは、Tx0からのUTXO0を使用済みとして定義する。Tx1は、未使用トランザクション出力203を使用する場合にのみ有効になり得ることに留意されたい。別のトランザクション152によってすでに使用された出力を使用しようとする場合、Tx1は、他のすべての条件が満たされたとしても無効になる。したがって、ブロックチェーンノード104はまた、先行するトランザクションTx0内の参照されたUTXOがすでに使用済みであるかどうか(すなわち、それが別の有効なトランザクションへの有効な入力をすでに形成したかどうか)をチェックする必要がある。これは、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である1つの理由である。実際には、所与のブロックチェーンノード104は、どのトランザクション152内のどのUTXO203が使用されたかをマーキングする別個のデータベースを維持し得るが、最終的には、UTXOが使用されたかどうかを定義するものは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力をすでに形成しているかどうかである。
所与のトランザクション152のすべての出力203において指定された総額が、そのすべての入力202によって指し示された総額よりも大きい場合、これは、ほとんどのトランザクションモデルにおいて無効性の別の根拠となる。したがって、そのようなトランザクションは、伝搬されることも、ブロック151に含まれることもないであろう。
UTXOベースのトランザクションモデルでは、所与のUTXOが全体として使用される必要があることに留意されたい。UTXOにおいて使用済みとして定義された額の一部は、別の一部が使用されていても、「後に残す」ことはできない。しかしながら、次のトランザクションの複数の出力間でUTXOからの額を分割することはできる。例えば、Tx0内のUTXO0において定義された額を、Tx1内の複数のUTXO間で分割することができる。したがって、アリスが、UTXO0において定義された額のすべてをボブに与えたくない場合、アリスは、リマインダを使用して、Tx1の第2の出力において自分自身に残りを与えるか、または別の当事者に支払うことができる。
実際には、アリスはまた、通常、アリスのトランザクション104をブロック151に成功裏に含めるビットコインノード104に対する手数料を含める必要がある。アリスがそのような手数料を含めない場合、Tx0は、ブロックチェーンノード104によって拒否され得、したがって、技術的に有効であっても、伝搬されず、ブロックチェーン150に含まれない可能性がある(ノードプロトコルは、ブロックチェーンノード104が望まない場合にトランザクション152を受け入れることを強制しない)。いくつかのプロトコルでは、トランザクション手数料は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力(複数可)202によって指し示される総額と出力(複数可)203で指定されている総額との間の任意の差が、トランザクションを公開するブロックチェーンノード104に自動的に与えられる。例えば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1は唯一の出力UTXO1を有するとする。UTXO0において指定されたデジタル資産の額がUTXO1において指定された額よりも大きい場合、その差分は、UTXO1を含むブロックを生成するためのプルーフオブワーク競争に勝つノード104によって割り当てられ得る。しかしながら、代替的にまたは追加的に、トランザクション手数料がトランザクション152のUTXO203のうちのそれ自体の1つにおいて明示的に指定され得ることは必ずしも除外されない。
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこかで任意のトランザクション152においてそれらにロックされたUTXOから構成される。したがって、典型的には、所与の当事者103の資産は、ブロックチェーン150全体にわたる様々なトランザクション152のUTXO全体に散在している。ブロックチェーン150内のどこにも、所与の当事者103の総残高を定義する数字は記憶されない。クライアントアプリケーション105におけるウォレット機能の役割は、それぞれの当事者にロックされ、別の前方のトランザクションでまだ使用されていない様々なUTXOのすべての値を一緒に照合することである。これは、ビットコインノード104のいずれかに記憶されたブロックチェーン150のコピーにクエリを行うことによって行うことができる。
スクリプトコードは、多くの場合、概略的に(すなわち、正確な言語を使用せずに)表されることに留意されたい。例えば、特定の機能を表すためにオペレーションコード(オペコード)が使用され得る。「OP_...」は、スクリプト言語の特定のオペコードを指す。例として、OP_RETURNは、ロックスクリプトの最初にOP_FALSEが先行するときに、トランザクション内にデータを記憶することができ、それによってデータをブロックチェーン150内に不変的に記録することができる、トランザクションの使用不可能な出力を作成するスクリプト言語のオペコードである。例えば、データは、ブロックチェーンに記憶することが望まれる文書を含み得る。
典型的には、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、データの特定の一部分に署名する。いくつかの実施形態では、所与のトランザクションについて、署名は、トランザクション入力の一部、およびトランザクション出力の一部または全部に署名する。署名された出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、通常、どの出力が署名されるかを選択するために署名の最後に含まれる4バイトコードである(したがって、署名時に固定される)。
ロックスクリプトは、典型的には、それぞれのトランザクションがロックされる当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、典型的には、それが対応する署名を供給するという事実を指して「scriptSig」と呼ばれることがある。しかしながら、より一般的には、UTXOが償還されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語を使用して、任意の1つまたは複数の条件を定義することができる。したがって、より一般的な用語「ロックスクリプト」および「ロック解除スクリプト」が好まれ得る。
レイヤ2オーバーレイネットワーク
ブロックチェーンネットワーク106は、すでに、インターネット101などのネットワーク上にオーバーレイされたオーバーレイネットワークの形態である。しかしながら、ブロックチェーン上にオーバーレイネットワークの別の層を重ねることも可能である。これは、例として図3に示されている。一例はメタネットである。そのようなネットワークは、基礎となるネットワークインフラストラクチャとしてのベースネットワーク101(例えば、インターネット)と、ベースネットワーク上にオーバーレイされたオーバーレイネットワークの第1の層としてのブロックチェーンネットワーク106とに対して、オーバーレイネットワークの第2の層であるという意味で、「レイヤ2」ネットワークとも呼ばれ得る。
オーバーレイネットワーク300のこの第2の層は、ノード301およびエッジ302のネットワークを含む。ここで、ノード301は、図1および図2に関連して前述したようなブロックチェーンネットワーク106の層におけるノード104ではなく、メタネット(またはブロックチェーン上にオーバーレイされた他のそのようなネットワーク)の層におけるノードを指すことに留意されたい。メタネットネットワーク(または同様のもの)の各ノード301は、ブロックチェーン150上の異なるそれぞれのトランザクション152であり、それぞれが、それぞれのトランザクションのペイロードにデータを記憶する。したがって、メタネットネットワーク300(または同様のもの)のノード301は、本明細書では、データ記憶ノードまたはデータ記憶トランザクションとも呼ばれ得る。そこに記憶されるデータは、データコンテンツおよび/またはメタデータ、典型的には両方を含み得る。出力ベースのモデルでは、それぞれのトランザクションの使用不可能な出力203に記憶され得る。この出力は、実行時にスクリプトを終了させるロックスクリプト内の1つまたは複数のオペコードによって使用不可能にされ得る。例えば、スクリプト言語を採用するシステムでは、これは、使用されるプロトコルに応じて、OP_RETURNオペコード、またはOP_RETURNが後に続くOP_FALSEであり得る。しかしながら、これは限定されず、当業者は、他のブロックチェーンシステム、例えば、アカウントベースのモデルを採用するシステムにおいてトランザクションに任意のペイロードデータを記憶するための他の技法を認識するであろう。以下では、出力ベースのモデルに関して例示し得るが、これに限定されるものではない。
レイヤ2オーバーレイネットワーク300は、純粋にデータから構成され、完全に仮想であってもよいことに留意されたい。すなわち、ブロックチェーン150のトランザクション152上にオーバーレイされたオーバーレイネットワークとして、メタネットなどのノード301およびエッジ302は、基礎となるブロックチェーンネットワーク106または基礎となるネットワークインフラストラクチャ101の任意の特定の物理的アクタまたはエンティティに必ずしも対応しない。
データコンテンツは、例えば、テキスト、オーディオ、静止画もしくは動画、または他の文書を記憶するためにメタネット(または同様のもの)が使用されている実際のデータである。これは、ユーザコンテンツまたはユーザデータとも呼ばれ得る。メタデータは、ブロックチェーン150上にネットワークを重ねるためのプロトコルを実装する。トランザクション152の少なくともいくつかでは、それはデータコンテンツ間のリンクを定義する。これらは、ノード301間のエッジ302として説明することもできる。リンクまたはポインタは、例えば、親ノードのトランザクションID、TxIDparent、を含み得る。本明細書で参照される場合の「リンク」は、1つの可能性ではあるが、必ずしもハイパーテキストリンクを意味するものではないことに留意されたい。より一般的には、リンクは、現在のノード301がメタネット層(または、ブロックチェーン150の上に重ねられた他のそのようなオーバーレイ層)において関連している別のノード301を指し示す任意の形態のポインタを指すことができる。
便宜上、以下では、例としてメタネットに関して説明するが、これに限定されず、より一般的には、メタネットを参照する本明細書の箇所はいずれも、ブロックチェーン上にオーバーレイされた任意のオーバーレイネットワークで置き換えられ得ることが理解されよう。同様に、メタネットノードへのいかなる参照も、任意のオーバーレイネットワークノードまたはオーバーレイネットワークのデータストレージノードへの参照と置き換えられ得、メタネットリンクまたはエッジへのいかなる参照も、当該オーバーレイネットワークの層における任意のオーバーレイネットワークエッジまたはリンクへの参照と置き換えられ得る。
メタネットプロトコルは、公開ブロックチェーン上に記憶され、多くの使用事例のために様々なアプリケーションで使用されることができるオンチェーンデータを構造化するための方式および規格を定義する。プロトコルは、ノードおよびエッジを含むグラフ構造をブロックチェーントランザクションのセットから構築することができること、およびこれらの構造を使用して任意の性質のデータ(「コンテンツ」)を記憶し、伝達し、表現し、配信することができることを規定する。トランザクションをノードとして扱い、署名をトランザクション間に作成されたエッジとして扱うことによって、メタネットプロトコルは、図3に示すようなオンチェーングラフ構造の作成を可能にする。
図から分かるように、メタネット300のノード301およびエッジ302はツリー構造を形成する。すなわち、親ノード301は、1つまたは複数の子ノード301にリンクされ、任意の所与の子301はそれ自体が、それ自体の1つまたは複数の子にリンクされた親であり得、以下同様である。本目的上、当該ツリー構造は、より広いツリーまたはグラフのサブセットにすぎない可能性があることに留意されたい。
図3はまた、ノード301およびその関連付けられたエッジ302がどのように更新され得るかを示す。トランザクションはブロックチェーン152上に不変的に記録されるので、メタネットノード301に対する更新は、新しいトランザクション152によって新しいインスタンス301’および対応するエッジ302’を作成することを必要とする。
図3の構造は、ネストされたドメイン、例えば、ウェブサイトおよびそのページの構造を含み得、ここで、「トップレベルドメイン」は、その下のサブドメインをカプセル化し、以下同様である。1つの機能鍵ドメイン(後述する、例えば、書き込み鍵、ファンディング鍵(funding key)または暗号化鍵のドメイン)は、これらの構造ドメインの多くに及ぶことができる。
図3の円は、メタネットプロトコルのルールセットにしたがって作成される単なるトランザクションであるノードを表す。そのルールセットにしたがって作成されフォーマットされたトランザクション152Nの例を図4に示す。
図4の右側にあるトランザクション152Cは、メタネットの所与のノード301C(子)を実装するブロックチェーン150のトランザクション152を表す。図4の左上にあるトランザクション152Pは、メタネット層における子ノード152Cの親を実装するブロックチェーン150のトランザクションを表す。子ノードのトランザクション152Cは、ロック解除スクリプトを含み、ブロックチェーン150のファンディングトランザクション152Fの出力203を指し示す入力202を有する。言い換えれば、ファンディングトランザクション152Fの出力は、メタネットノード152Cの入力によって使用される。ファンディングトランザクション152Fおよびメタネット親トランザクション152Pは、必ずしも同じトランザクションではないことに留意されたい(ただし、それも除外されない)。
子トランザクション152Cは、ペイロード(ブロックチェーン層の観点からのペイロード)を保持する、例えばOP_RETURNによって使用不可能にされた、使用不可能な出力203を含む。このペイロードは、メタネットのデータコンテンツ(「Data」)を含み得、それは、ハッシュおよび/または暗号化されるか、または単に生のデータ(「平文の」)であり得る。
子トランザクション152Cのペイロードは、メタネットネットワーク層のメタデータも含む。このメタデータは、少なくとも親トランザクション152Pのトランザクション識別子を含む。これは、メタネット層でリンク(エッジ)302を作成する。また、子ノード301Cに関連付けられた鍵Pnodeを含むことがメタネットプロトコルによって求められ得る。
ファンディングトランザクション152Fの出力203のロックスクリプトはまた、署名が子ノード152Cの入力202内のロック解除スクリプトに含まれることを必要とする。具体的には、この署名は、メタネット親に関連付けられた鍵Pparentを使用して署名された署名(すなわち、その鍵によって署名されたメッセージ)である必要がある。これは、ブロックチェーン層においてエッジ402(使用エッジと呼ばれることもある)を作成する。必要とされる署名が子トランザクション152Cの入力202内のロック解除スクリプトに含まれていない場合、子トランザクション152Cは、ブロックチェーンネットワーク106のノード104によって妥当性確認されないので、ブロックチェーンネットワーク106を通して伝搬されることも、ブロックチェーン150に記録されることもない。しかしながら、ファンディングトランザクション152Fは必ずしもメタネット親トランザクション152Pと同じブロックチェーントランザクション152ではないので、ブロックチェーン層使用エッジ402は、必ずしもメタネット層エッジ302と同じではないことに再度留意されたい。
図4は、トランザクション全体の抽象化として、メタネットトランザクションの特定の関連のある構成要素のみを概説する。これらの構成要素は、プロトコル識別子フラグに加えて、以下を含む:
・ 公開鍵Pnode
・ 親公開鍵PParentの署名SigPParent
・ ノード自体のトランザクションID TxIDnode
・ ノードの親のトランザクションID TxIDParent
プレースホルダ<Data>は、一般に、メタネットノードトランザクションに含まれ得る任意のコンテンツデータを指す。また、いくつかのアプリケーションでは、暗号化鍵ekでデータを暗号化することを望むことも予想され、この場合、トランザクションに含まれるデータは<e(Data,ek)>としてキャストされ、ここで、e( )は適切な暗号化関数である。
各メタネットノード301は、強力なバージョニングおよび許可制御がメタネットグラフによって継承されることを可能にするインデックスであるペア(Pnode,TxIDnode)によって一意に識別され得る。各メタネットノードは、それ自体(Pnode,TxIDnode)およびその親(PParent,TxIDparent)を識別するのに十分な情報を含むことも理解されたい。
メタネット子ノード301Cのトランザクションが親ノード301Pからの正しい入力署名SigPParentを含むことを保証するために、多くの場合、これを容易にする1つまたは複数のファンディングトランザクション152Fを作成することが望ましい場合があり、これを図4の左下に示す。
親鍵Pparentおよび/または子ノード鍵Pnodeは、ブロックチェーン150への子ノード301Cのデータの書き込みを認可する書き込み鍵とみなされ得る。
したがって、メタネットは、ブロックチェーン自体の基礎となる技術のみを使用して、そのようなデータのための許可および書き込みアクセス制御を符号化するような方法で、オンチェーンデータが構造化されることを可能にするプロトコルを提供する。したがって、メタネットプロトコルは、ユーザがユーザのオンチェーンコンテンツを証明可能に所有することを可能にするソリューションである。
メタネットプロトコルは、メタネットDAG(Metanet Direct Acyclic Graph)の作成を可能にするルールのセットを定義する。メタネットDAGの単一のインスタンスは、メタネットツリーと呼ばれる。各メタネットツリーは、ルートノード(トップレベルノード)を有し、ルートノードを含む各メタネットノードは、1つまたは複数の子ノードを有することができる(例えば、再び図3を参照)。
このように、メタネットDAGは、ツリーのグローバルコレクションになり、各ツリーは、それ自体のルートノードから開始し、それ自体の局所化された許可構造を有することができる。
メタネットノード301は、単に、メタネットプロトコルのルールセットに従うトランザクションである。親を有さないルートノードと、所与の子ノードが厳密に1つの親を有する子ノードという2つのタイプのノードが存在する。一実装形態によれば、メタネットノードの最も基本的なあるとライン構造は、トランザクションが以下の基準を満たすことを求める:
・ トランザクションは、少なくとも1つのOP_RETURN出力を有する。
・ OP_RETURNペイロードは以下を含む:
- メタネットフラグ
- ノードアドレスPnode
- 親トランザクションID TxIDparent
・ 各トランザクションは、ルートノードを除き、親ノードによって署名された入力を含む。
上述したように、メタネットノードは、4つの要素を含むトランザクション152である:
・ Pnode-ノードのアドレス
・ TxIDnode-ノードのバージョン
・ Pparent-ノードの親のアドレス
・ TxIDparent-ノードの親のバージョン
メタネットエッジ302は、署名によって作成される。親ノードから子ノードへのエッジを作成するために、子ノードは、その親に関連付けられた鍵のペアを使用して署名されなければならず、Sig Pparentは、子ノードの入力に現れなければならない。
ファイル検証システム
以下では、ファイルの検証を可能にするためにメタネット(またはブロックチェーン上にオーバーレイされた他のそのようなグラフ構造)を使用することができる方法について説明する。例えば、これは、外部からの改ざん(ハッカー、ウイルス、または他のマルウェアなどによる)に対して、または正当なユーザによる意図しない挙動(例えば、意図しないファイル削除または修正)に対して保護を提供し得る。例えば、開示された技法は、ファイルに制限を設けて、ファイルの読み出し、修正、削除、または実行など、他のユーザによる特定のアクションを防止または許可するために、システム管理者によって使用され得る。
一例として、図5を参照されたい。図示のように、ルートノード301Rおよび複数のリーフノード301Lを含むツリー構造が作成される。ツリー構造は、例えば、複数の他のユーザ103のそれぞれのコンピュータ機器102による使用のための中央リソースとして、システム管理者のコンピュータ機器によって作成(および必要に応じて更新)され得る。代替的に、ツリー構造は、所与のユーザ自身のオペレーティングシステムまたはファイルシステムによって、ユーザ自身のコンピュータ機器102のプライベート記録として使用するために作成(および/または更新)されて得る。
ルート301R以外の各ノードは、1つのエッジ302によって親ノードに接続され、親ノードは、ルートノード301、または(例えば、図8~図10に示すように)それ自体が別の親の子である中間親ノード301Iであり得る。すなわち、ツリーには2つ以上のレベルが存在し得る。各リーフノード301Lは、子ノード301Cである。図5に示すように2つの層のみの場合、ルートノード301Rは、リーフノード301Lの親ノード301Pである。ツリーに2つ以上のレベルがある場合(例えば、図8、図9または図10のように)、中間レベルノード301Iは、各リーフノード301Lの親301Pであり、各中間レベルノード301Iの親は、それ自体が、ツリーのレベルの数に応じて、別のより高いレベルの中間ノード301Iまたはルートノード301Rであり得る。
各ノード301は、例えば、図3および図4に関連して説明したように、ブロックチェーン150の異なるトランザクション152である。各エッジ302は、ペアのノード301の間のリンクである。エッジ302は、それぞれの親ノードに関連付けられた秘密鍵で子ノードに暗号署名することによって作成され、それは、親の対応する公開鍵を使用して認証することができる。実施形態では、これらのエッジは、図3および図4に関連して説明したように生成される。すなわち、各ノード152は、少なくとも1つの入力202と少なくとも1つの出力203とを含む出力ベースモデル(例えばUTXOベースモデル)のトランザクションであり、親ノード301Pの秘密鍵で子ノード301Cの入力202に署名することによってエッジ302が生成される。子301Cをチェーン上に記録するためには、子301Cの入力は、ロックスクリプトが、ロックを解除し、したがってブロックチェーン上に記録するためにブロックチェーンネットワーク106によって子ノードトランザクション301C/152Cが妥当性確認されるために親の署名を必要とするファンディングトランザクション152Fの出力203を指し示す。親ノードの鍵は、親ノード301Pの出力203内のペイロードに含まれることによって、それぞれの親ノード301Pに関連付けられ得る。また、親301PのトランザクションIDは、子301Cの出力内のペイロードに含まれ得る。再び例として図4を参照する。ペイロードは、それぞれのトランザクションの使用不可能な出力に含まれ得、例えば、使用されているプロトコルに応じて、OP_RETURNまたはOP_FALSEおよびOP_RETURNによって使用不可能にされ得る。実施形態では、オーバーレイプロトコルは、メタネットプロトコルであり得、したがって、ツリー構造は、メタネットグラフまたはその一部の形態をとり得る。
しかしながら、他のオーバーレイプロトコルでは、トランザクション152間にオーバーレイエッジ302を作成し、したがって、それらのトランザクションがツリーのノードを形成するツリー構造を形成するために他の方法が使用され得ることは除外されない。また、ツリー構造は、他のタイプのトランザクションモデルを使用して、例えば、アカウントベースのモデルにおけるスマートコントラクトによって、形成され得る。
本明細書で開示されるファイル検証規定によれば、少なくとも1つのそれぞれのファイルの記録が、リーフノード301Cのうちの1つ、複数、またはすべてのそれぞれのペイロードに記憶される。各リーフノード301Lはまた、オプションで、そのそれぞれのファイルに関連付けられたメタデータを含み得る。実施形態では、このメタデータは、1つまたは複数の許可のセットの表示、1つまたは複数の許可されたユーザの表示、および/または終了時間(例えば、有効期限)の表示を含み得る。
出力ベースのモデルでは、本目的のための所与のトランザクションの「ペイロード」は、トランザクション152(すなわち、ノード301)の1つまたは複数の出力(例えば、使用不可能な出力)に含まれ得ることに留意されたい。この用語は、単一の出力に限定されない。例えば、親トランザクションIDおよびファイルの記録は、必ずしも所与のリーフノード301Lの同じ出力203に含まれる必要はなく(ただし、これは1つの可能性である)、またはメタデータおよびファイル記録は、必ずしも同じ出力203に含まれる必要はない(ただし、これも確かに1つの可能な実装形態である)。
クライアントソフトウェア105は、少なくとも1つのユーザ103(例えば、アリスまたはボブ)のコンピュータ機器102上で実行され、リーフノード301Lのうちの1つにおけるファイルの記録を使用して、ユーザの機器上にローカルに保持されたファイルの何らかの現在の(意図された)インスタンスがファイルの真のコピーであるかどうかを検証するように構成される。より一般的には、本明細書に開示される方法は、任意のコンピュータ機器上の任意の当事者(必ずしもエンドユーザまたは消費者のみではない)によって実行され得るが、例示の目的上、本明細書の実施形態に関連してそのように説明され得る。実施形態では、検証は、ユーザのコンピュータ機器102上のオペレーティングシステムまたはファイルシステムなどのシステムソフトウェアの低レベルの信頼できる部分によって実施され得る。この場合、図1に示すクライアントソフトウェア105は、統合されたブロックチェーンアクセス機能を有するオペレーティングシステムまたはファイルシステムを含み得る。
所与のリーフノード301Lに含まれるファイルの記録は、ファイルの明示的なコピー、すなわち、ファイルの生の(変換されていない)コピー(「平文の」)を含み得る。代替的に、それは、ファイルの暗号化されたバージョンのような、ファイルの変換を含んでもよい。別の代替として、記録として使用される変換は、ファイルを含むプレイメージのハッシュを含んでもよく、プレイメージは、ファイルのみ、または別の要素と連結されたファイルを含み得る。したがって、ファイルの「記録」は、記録からのファイルの回復が可能であることを必ずしも意味しないことに留意されたい。本発明の目的のために、記録は、ファイルのいくつかの現在の(意図される)インスタンス(ユーザのコンピュータ機器102上のローカルコピーなどの検証されているインスタンス)が、記録を作成するために使用されたファイルのインスタンスと同じであるかどうかを後にチェックすることを可能にする任意の指示である。例えば、ハッシュの場合、現在のインスタンスをハッシュし、そのハッシュをリーフノード301L内の記録上のファイルのハッシュと比較することができる。
所与のリーフノード301L内のツリー構造または個々のファイル記録は、例えば、システム管理者によって、またはユーザのオペレーティングシステムもしくはファイルシステムによって、最初作成され、および/またはその後更新され得る。
クライアントソフトウェア105は、実行されると、またはブロックチェーンネットワーク106から切断されている期間後にオンラインに戻ると、ブロックチェーン150を自動的に検査して、最新バージョンのツリー構造をダウンロードする。それは、ダウンロードされた構造、またはリーフノードのうちの少なくとも1つを使用して、コンピュータ機器102上でローカルに保持されるインスタンスなどのファイルの所与のインスタンス(「現在のインスタンス」)が正当であるかどうかを検証するように構成される。例えば、これは、定期的に行われてもよいし、ファイルに対して特定の動作(例えば、読み出し、書き込み、もしくは実行)またはウイルススキャンなどを行うためのユーザ103による要求などの特定のイベントに応答して行われてもよい。
検証を実行するために、ソフトウェア105は、少なくとも2つの構成チェックを実行し、検証されるべきファイルの現在のインスタンスについて両方が肯定的であることを要求する。
第1のチェックは、A)ツリー構造が、有効グラフのオーバーレイプロトコル(例えば、メタネットプロトコル)の要件を満たすことである。これは、各子ノード301Cがそのそれぞれの親ノード301Pの鍵で署名されている(すなわち、それぞれの親に関連付けられた鍵から生成された署名を含む)ことを少なくともチェックすることを含む。つまり、図5に示す2レベルの場合、各リーフノード301Lは、ルートノード301Rの鍵によって署名されなければならない。または、図8~図10のような3つ以上のレベルを有するツリーでは、各リーフノード301Lは、そのそれぞれの中間親301Iの鍵によって署名され、各中間親(それ自体がツリーのより上位の別の親301Pの子301Cである)は、階層内のその位置に応じて、ルートノード301Rまたは別の中間親301Iのいずれかの鍵によって署名される。
出力ベース(例えばUTXOベース)のトランザクションモデルの場合、署名の要件は、子トランザクション301C/152Cの入力202がそれぞれの親301Pの鍵によって署名されること、およびそれぞれの親301Pの鍵が親301P/152Pの出力203内のペイロードに含まれること(例えば、使用されているトランザクションプロトコルおよびスクリプトに応じて、OP_RETURNまたはOP_FALSEおよびOP_RETURNによって使用不可能にされるような、使用不可能な出力)であり得る。親鍵自体(および署名)もまた、子301C/152Cの入力に含まれることが要求され得る。
実施形態では、第1のチェックA)はまた、オーバーレイプロトコルの1つまたは複数のさらなる要件が満たされていること、例えば、子301C/152Cのペイロードがそれぞれの親301P/152PのトランザクションIDを含むことをチェックすることを含み得る。
第2のチェックは、B)ファイルの現在のインスタンス、すなわち、当該の現在のファイルの意図されたインスタンスが、関連するリーフノード301Lに保持されたファイルの記録と一致することのチェックである。記録がファイル自体の明示的なコピー(生のファイル「平文の」)を含む場合、このチェックは、ファイルを比較してそれらが同一であることをチェックすることを含む。または、記録がファイルのハッシュを含む場合、チェックは、現在の(例えば、ローカル)インスタンスをハッシュし、ハッシュを比較してそれらが同一であることをチェックすることを含む。または、記録がファイルの暗号化されたバージョンを含む場合、チェックは、同じ暗号化を使用して現在の(例えば、ローカル)インスタンスを暗号化し、暗号化されたバージョンが同一であることをチェックすること、または記録されたインスタンスを復号し、これが現在の(例えば、ローカル)インスタンスと一致することをチェックすることを含み得る。場合によっては、暗号化とハッシングの両方を使用することができる。
2つのチェックは、いずれの順序でも実行することができ、A)およびB)ならびに「第1」および「第2」は、単なる任意のラベルにすぎないことに留意されたい。
チェックA)およびB)の両方が真であることが分かった場合にのみ、当該ファイルは、検証済み、すなわち有効であると宣言され得る(ただし、ファイルを検証するこの文脈における「有効」という用語は、ブロックチェーンネットワーク106のノード104によって適用されるノードプロトコルによるトランザクションの妥当性確認と混同されるべきではなく、両方が必要とされるが、それらは異なる概念である)。例えば、これは、ファイルが検証され、したがって使用するのに安全であることを宣言する、ユーザのコンピュータ機器102上のオペレーティングシステムまたはファイルシステムを含み得る。例えば、実施形態では、ユーザは、ファイルの読み出しまたは実行など、ファイルに対して何らかのアクションを実行することを要求している可能性があり、オペレーティングシステムまたはファイルシステムは、開示された検証にパスすることを条件としてのみ、このアクションの実行を許可する。
実施形態では、オペレーティングシステムまたはファイルシステムは、それぞれのファイルの記録が保持される同じノード301Lから許可されたアクションを読み出すように構成される。この場合、オペレーティングシステムまたはファイルシステムは、追加の条件として、要求されたアクション(例えば、読み出し、書き込み、削除、または実行)がそれぞれのノードで指定された許可されたアクションの中にある場合にのみ、その要求されたアクションがファイルに対して実行されることを許可する。代替的にまたは追加的に、実施形態では、オペレーティングシステムまたはファイルシステムは、それぞれのファイルの記録が保持されているノード301Lから許可されたユーザを読み出すように構成される。この場合、オペレーティングシステムまたはファイルシステムは、要求されたアクション(例えば、読み出し、書き込み、削除または実行)を実行することを要求するユーザが許可されたユーザの中にある場合にのみ、そのアクションがファイルに対して実行されることを許可する。
実施形態では、ファイルを検証するためのさらなる条件として、1つまたは複数の追加のチェックを適用する(例えば、オペレーティングシステムまたはファイルシステムによって実施する)こともできる。これらは、例えば、ルートノードが特定の信頼できるエンティティ、例えば、システム管理者によって署名されなければならないという第3のチェックC)、ファイルが記録された場合の記録ある子ノード301C自体がツリー内の別の子ノード301Cの親301Iであってはならない(すなわち、リーフノード301Lでなければならない)という第4のチェックD)、および/または記録に含まれる終了時間が現在の時間より前であってはならない(すなわち、記録が失効(expired)していない)という第5のチェックE)を含み得る。チェックC)は、プロセスにおける追加の信頼レベルを提供する。チェックD)は、以下でより詳細に説明するように、新しいリーフノードを古いノードに付加することによって古い記録を無効化または更新するための機構を可能にする。チェックE)は、例えば、ユーザのコンピュータ102がオフラインになり、ブロックチェーン150から最新バージョのンツリーにしばらくの間アクセスできない場合に、ファイルを無制限に検証するために記録が使用されるのを防ぐ。
すべてのこれらのチェックは、任意の順序で実行することができ、A~E)および「第1」~「第5」は、単なる任意のラベルにすぎないことに留意されたい。
図6は、本開示の技法の実施形態において採用され得る別の例示的な変形例を示す。図6は、マークルツリーとも呼ばれることがあるハッシュツリーを示す。ハッシュツリーのノード601は、図5などにおけるオーバーレイネットワークのツリー構造のノード301に対応しないことに留意されたい。ハッシュツリーは複数のハッシュリーフ601Lを含み、各々がツリーにおいて1つの親に対する子である。ツリーのルートにはハッシュルート601Rがある。
ハッシュツリーを決定するために、リーフ601Lは、1つまたは複数のリーフレベルのセットに配置され、各セット内で、そのセットのリーフが互いに組み合わされ(例えば、連結され)、次いで、この組合せがハッシュされる。リーフレベルのセットが1つしかない場合(すなわち、リーフレベルのセットがすべてのリーフである場合)、このセットのハッシュは、単にハッシュルート601Rである。一方、リーフのセットが2つ以上存在する(すなわち、図示のように、リーフが異なるリーフレベルのセットに分割される)場合、結果として得られるハッシュは、1つまたは複数の第2のレベルのセットに配置される。第2のレベルの各セット内で、下のレベルからのハッシュが互いに組み合わされ(例えば、連結され)、次いで、この組合せがハッシュされる。第2のレベルのセットが1つしかない場合、結果として得られるハッシュはハッシュルート601である。第2のレベルのセットが2つ以上存在する場合、第3のレベルにおいて同じプロセスが繰り返され、以下同様に、ハッシュルートが決定されるまでツリーを上に進む。ハッシュツリーは、マークルツリーと呼ばれることもある(この場合、ハッシュルートはマークルルートと呼ばれ得、ハッシュリーフはマークルリーフと呼ばれる)。「マークルツリー」は、各セットのサイズが正確に2つのメンバーである(すなわち、ツリーの全体にわたってハッシュがペアで行われる)ことを意味すると解釈されることがあるが、この制限は、本明細書では必ずしも課されない。
本明細書に開示されるいくつかの実施形態によれば、ハッシュツリー内の各リーフ601Lは、関連するファイル、例えば、特定のソフトウェアのファイル(実行可能ファイルおよび関連するデータファイルなど)のグループからの異なるそれぞれのファイルを含むプレイメージのハッシュである。次いで、ハッシュルート601Rが、このファイルのグループから計算される。このような実施形態では、オーバーレイネットワークツリー(例えば、メタネットツリー)のノード301のうちの所定の1つに記憶されたファイル記録は、複数のファイルのハッシュルート601Rであり得る(したがって、図6に示すツリー全体は、図5などに示すツリーのノード301のうちの1つに記憶される記録の算出方法を表していることになる)。次いで、チェックB)は、ユーザのコンピュータ機器102上のファイルの現在のローカルコピーから計算された対応するハッシュルートが、ブロックチェーン105上の対応するオーバーレイネットワークノード301に記憶されたハッシュルート601Rと同一であることをチェックすることを含む。このようにして、グループ内のファイルのうちのたった1つのインスタンスがユーザのコンピュータ機器102上で変更された場合であっても、ファイルのグループ全体がユーザに対して無効化される。例えば、この場合も同様に、このテストは、オペレーティングシステムまたはファイルシステムによって実施され得る。
そのような実施形態では、例えば、図5または図7~図10のオーバーレイネットワークツリー構造内のノード301のうちの少なくともいくつかはそれぞれ、(ノード301ごとの個々のファイルではなく)ファイルの異なるそれぞれのグループを記録し得る。
図7は、ツリー内のファイル記録を更新するための例示的な機構を示す。1つの可能性として、新しいリーフノード301L’を、前の記録を含むリーフノード301Lと同じ親ノード301P/R/Iに付加することができる。すなわち、新しいエッジ302’が、古い記録の親と同じ親ノード301P/I/Rから新しいノード301L’に作成される。この場合、リーフ記録301L、301L’の両方が有効のままである。しかしながら、別の可能性では、新しいリーフノード301L’は、古い記録を含むノード301(以前はリーフ301L)に付加される。すなわち、古い記録のノード301から新しいノード301L’に新しいエッジ302’が作成される。この場合、上述のチェックD)と組み合わせて、古い記録が無効にされ、新しい記録が唯一の有効なバージョンとして残される。
図8~図10は、3つ以上のレベルを有するツリー構造のいくつかの例を示す。図8では、ツリー構造は、ファイルフォルダ構造を模倣するために使用される。図9では、ルートノードは、システム管理者の鍵に関連付けられ、中間親301Iは、個々のユーザの鍵に関連付けられ得る。例えば、ユーザの鍵は、ツリーの特定のサブセットに対する許可を与えるために、システム管理者によってユーザに割り当てられ得る。図10は、ルートノード301Rが会社全体のシステムに関連付けられ、異なる中間親301Iが会社内の異なるサブシステムに関連付けられる例を示す。
上記の実施形態は、検証機構がオペレーティングシステムまたはファイルシステムの一部として組み込まれるファイルの管理(読み出し、実行など)に関して説明されているが、これは限定的ではないことに留意されたい。ユーザがファイルの完全性をチェックすることのみを望む可能性がある他の可能な使用事例が存在し、この場合、単純なアプリケーションまたは他のソフトウェア(例えば、ある種のアンチウィルス)もこの方法を実施することができる。このソフトウェアは、他のファイルの完全性を検証するように構成され、ソフトウェアは、望ましくないファイル変更、またはファイルもしくはプログラムを危険にさらしたハッカーの場合、ユーザに警告する。プロセスは、上述したものと同じであるが、オペレーティングシステムまたはファイルシステムに統合される必要はない。むしろ、それは、ユーザがインストールするだけのプログラムであって、ユーザが新しいツリーを初期化し、後にファイルの完全性をチェックする(および、ファイル変更の場合に警告する)ことを可能にするプログラムであり得る。
図11は、UTXOベースのトランザクションモデルにおいて子ノード301Cを実装するための例示的なトランザクションを示す。
図12は、本明細書に開示される実施形態による例示的な方法のフローチャートである。例えば、方法は、オペレーティングシステムまたはファイルシステムによって自動的に実行され得る。ステップ1210において、方法は、ブロックチェーンネットワーク106を介してブロックチェーン150を検査して、オーバーレイネットワークツリー構造(例えば、メタネットグラフ)にアクセスすることを含む。このステップは、オペレーティングシステムまたはファイルシステムによって、定期的に、および/またはユーザが特定のファイルにアクセスすることを要求したとき、および/またはブロックチェーンネットワーク102にアクセスすることができない期間(例えば、106がインターネットに接続されていなかったため)の後にコンピュータ機器102がオンラインに戻ったときなど、特定のイベントに応答して実行され得る。オペレーティングシステムまたはファイルシステムがツリー構造にアクセスするのが初めてではない場合、コンピュータ機器102上にローカルに記憶されたツリーの以前にダウンロードされたバージョンを更新し得る。ダウンロードされたバージョンは、コンピュータ機器102が再びオフラインになった場合に、後でファイルを検証するために使用され得る。したがって、いくつかのシナリオでは、ステップ1210は、ユーザのコンピュータ機器102のローカルストレージからローカルにダウンロードされたツリーのコピーにアクセスすることによって置き換えられ得る。
ステップ1220において、方法は、アクセスされたツリー構造がオーバーレイネットワークプロトコル(例えば、メタネットプロトコル)の要件を満たすことをチェックすることを含む。ステップ1230において、方法は、検証されるべき何らかの所望のターゲットファイル、例えば、ユーザが何らかのアクション(例えば、読み出し、書き込み、削除、または実行)を実行するためにアクセスすることを要求しているファイルの記録を、ツリー構造のどのノード301が含むかを識別することを含む。ステップ1220および1230は、互いに対してどの順序で実行されてもよいことに留意されたい。
ステップ1240において、方法は、識別されたノード301内のファイルの記録が、当該の現在のインスタンス、例えば、ユーザのコンピュータ機器102上のローカルバージョンと一致することをチェックすることを含む。例えば、これは、記録内のファイルハッシュを現在のインスタンスのハッシュと比較することを含み得る。
ステップ1250において、方法は、実装形態に応じて課され得る任意の追加のオプションのチェックを実行することを含む。これは、ユーザがファイルにアクセスする許可を有すること、および/またはユーザが要求しているアクションが許可されていることをチェックすることを含み得る。さらなる代替または追加の例として、このステップは、前述のチェックC)~E)のいずれか1つ、いくつか、またはすべてを含み得る。
チェック1220、1240、および1250は、互いに対してどの順序で実行されてもよいことに留意されたい。
ステップ1260において、方法は、適用されたチェックのすべてが満たされたかどうかを決定する。これらすべてのチェックが満たされていることを条件としてのみ、方法はステップ1270に進み、使用するファイルの現在のインスタンスを検証する。例えば、これは、要求されたアクション(例えば、読み出し、書き込み、削除、または実行)がそれに対して実行されることを可能にすることを含み得る。しかしながら、チェックのいずれかが満たされない場合、方法は代わりにステップ1280に分岐し、ファイルは検証されていないと宣言される。好ましくは、これは、ファイルの現在の(意図された)インスタンスがこれ以上使用されないようにすることを含む。
さらなる例示として、以下では、メタネットベースの実装形態の文脈において、上記の概念のいくつかの例をより詳細に説明する。
メタネットベースのシステム
本明細書に開示される実施形態によれば、メタネットは、オンチェーンソフトウェア妥当性確認およびデータ完全性を可能にする方法を提供し、システムセキュリティを保証するために使用され得る。メタネットで保護されたシステムを使用したいシステム管理者は、メタネットルートノードを作成し、それをそのシステム(例えば、ターミナルまたはサーバ)に一意に関連付けることができる。システムごとに新しいメタネットルートが提供され得る。各ファイルは、標準プロセス(例えば、sha256)を使用してハッシュされ得、ハッシュは、システムメタネットルートノード(例えば、図5)のメタネットノード子に記憶され得る。これは、本明細書ではファイルハッシュ(FH)ノードと呼ばれ得る。各メタネットノードはまた、ファイルに対して許可された動作(読み出し、書き込み、実行)と、それらを実行することを許可されたユーザとを指定し得る。
ファイル有効性
ファイルは、それに関連付けられたファイルハッシュノードが以下の3つの条件を満たす(加えて、ツリー自体がメタネットプロトコルを満たすものとして検証されている)場合に有効であるとみなされる:
I.ファイルのハッシュは、ファイルハッシュノードに示されるものである、
II.ファイルハッシュノードはリーフノードである(子を有さない)、
III.ファイルハッシュノードが失効していない。
ファイルハッシュノードは、そのノードを表すトランザクションに書かれた有効期限が経過したとき、または、そのトランザクションに含まれるUTXOが使用された場合、失効する。有効期限を有するファイルハッシュノードは、UTXOがその有効期限の前に使用されない限り、設定された有効期限まで有効である。有効期限のないファイルハッシュは、そのUTXOが使用されない限り有効である。
第2の条件(ii)は、ノードの無効化または更新を可能にすることである。実施形態では、無効化のための少なくとも2つの可能な機構が存在することに留意されたい。1つは、トランザクションレベルでメタネットノードの出力203を割り当てる(例えば、使用する)ことであり、もう1つは、メタネットレベルでメタネットエッジ302によってそのノードに取り付けられた別のリーフノードを作成することである。
ファイルを無効に設定するには、2つの方法が可能である:
i.新しいノードを現在のファイルハッシュノードに付加する。このノードは、ハッシュもしくはランダムなハッシュ(例えば、プライバシーの理由で)の代わりに空のフィールドを含むことができる;または
ii.ファイルハッシュトランザクションに含まれるUTXOを使用する新しいトランザクション(必ずしもメタネットトランザクションではない)を生成する。
すでに述べたように、ファイル有効性は、有効期限を設定して構成され得、この場合、ファイルは、(人間の時間またはブロックの高さで)設定された時間に達するまで有効である。その後、ファイルは、失効したノードに、同じハッシュであるが異なる有効期限を有する新しいファイルハッシュノードを付加することで、システム管理者によって更新されなければならない。追加のセキュリティ対策として、オペレーティングシステムは、失効したファイルハッシュノードに関連付けられたファイルを自動的に削除することができる。
好ましくは、オペレーティングシステムは、ファイルハッシュノード有効性をチェックすることができるように、ツリーの更新されたバージョンをローカルに維持するであろう。UTXOも使用する有効性チェックの場合には、保留中のトランザクションプール154の更新されたコピーも使用可能であるべきである。
ソフトウェア有効性:ファイルハッシュノード(単一のファイルを有するソフトウェアの場合)またはマークルルート601Rを記憶するマークルルートノード(複数のファイルまたは依存性を有するソフトウェアの場合)が一般的なファイルの同じ条件を尊重する場合、ソフトウェアの一部は有効であると考えられる。加えて、マークルルートノードは、マークルツリー有効性を構築し、検証する。
ファイル更新:保護されたファイルを更新する必要があるとき、システム管理者は新しいファイルハッシュノードを生成する(マークルツリーノードを使用するソフトウェアのためのプロセスは同じである)。2つの可能なケースが識別され得(図7参照)、第1のケースは、ファイルの古いバージョンが依然として有効であることであり、第2のケースは、ファイルの古いバージョンが無効になる(そのファイルに対する動作が以降許可されない)ことである。
第1の可能性:ファイルの更新されたバージョンのみが有効である。ファイルの最新バージョンのみが有効であるべき場合、新しいファイルハッシュノードは、ノードの古いバージョンに付加されなければならない。分岐の最新ノード(すなわち、ツリーの最深部)のみが有効であるため、中間バージョンは無効とみなされ、それらに基づいて試みられたあらゆる動作が無効化される。より高いレベルのセキュリティを実施するために、オペレーティングシステムは、無効になったファイルハッシュノードに関連付けられたファイルを自動的に削除することができる。
第2の可能性:ファイルのより古いバージョンは有効なままである。ファイルの2つ以上のバージョンが有効であるべき場合、新しいファイルハッシュノードは、古いファイルハッシュノードではなくシステムルートノードに付加されなければならない(これらの2つのノードは兄弟である)。
フォルダ構造の複製
これまで、説明のこの部分では、ファイルまたはファイルハッシュ(またはソフトウェアもしくはマークルツリー)ノード結合は純粋に論理的であり、SysMetツリー内に有効なファイルハッシュノードがある場合、同じハッシュを有するファイルは、ファイルハッシュノードのプロパティおよび制限を継承する。しかしながら、このセクションでは、メタネットツリー構造にシステムフォルダ構造も結合することで、さらなるレベルのセキュリティを導入する。例えば、図8を参照されたい。これは、より高いレベルのセキュリティを保証する:ファイルが有効でなければならない(有効ファイルハッシュノード)だけでなく、使用されるために特定のフォルダ内になければならない。
この実装形態では、メタネットツリーは、ツリー構造内のファイル位置を記述するシステムフォルダ構造を反映する。この技法が使用される場合、ファイルハッシュノードは、フォルダおよびサブフォルダを有するフォルダ構造にしたがって作成される。この技法は、フォルダノードという新しいタイプのメタネットノードの使用を必要とする。
フォルダノード:フォルダノードは、システム内のフォルダ構造を模倣するために使用されるメタネットノードである。このタイプのノードはまた、ハッシュされた絶対フォルダパスおよび名前(例えば、sha256(「C://folder/path/folder_name」))を含み得、ファイルハッシュノード(そのフォルダに含まれるファイル)および他のフォルダノード(そのサブフォルダ)にリンクされ得る。
最も単純な形態では、フォルダノードは、システムフォルダ構造を複製するためのプレースホルダとして使用される。しかしながら、これらのノードは、フォルダおよびその内容に関する情報をメタデータの形態で含めることで、強化され得る。いくつかの実施形態では、ユーザIDリストおよび許可された動作リストなどの制御フィールドは、フォルダノードへの割当てができない場合があり、したがって、ファイル許可は、代わりに、ファイルハッシュまたはマークルルートノードを使用して管理され得る。より高度な許可構造は、ユーザノード(後述する)を使用して達成することができる。
この実装形態では、ファイル有効性は以下のようにチェックされる:
I.ファイルが有効なファイルハッシュノードを有するかどうかをチェックする(前述したように)、および
II.ハッシュされたファイル絶対パスが、ファイルハッシュ親ノード(フォルダノード)に記憶されたものと一致することをチェックする。
マルチユーザシステム
いくつかのユーザは、同じシステムまたはシステムの一部へのアクセスが与えられ、特定のファイルまたは特定のフォルダに対する動作を実行することを認可され得る。ファイルを読み出す許可を与えるような、より単純な場合、すべてのユーザIDをファイルハッシュまたはマークルルートノードにリストすることができる。しかしながら、より洗練された場合では、特別な管理およびより構造化された許可方法を必要とし得る。これらの場合、システム管理者は、ユーザ固有のメタネットノードを作成して、それらにノード所有権を譲渡することができる。これらのユーザ固有のノードは、以下ではユーザノードと呼ばれ、特定のユーザに関連付けられる。このタイプのファイルは、ファイルまたはフォルダ管理をユーザに転送するために使用される(Unixコマンドchownと同様に)。
ユーザノード:本明細書で開示される場合、ユーザノードは、毎回システム管理者に明示的な認可を要求することなく、ユーザがシステム上でいくつかの動作を実行することを認可するために使用され得るメタネットノードである。ユーザノードは、システム管理者によって作成され、システムルートノード301R(図9参照)またはフォルダノードに付加される。実施形態では、システム管理者は、ユーザノードにいくつかの制限を課すことができ、ユーザノードから作成された後続のノード(それらの子)は、同じ制限を継承する。これらの制限は、許可される動作のタイプ、有効期限、許可されるファイルタイプ、およびファイルロケーションを含み得る。
ユーザは、ユーザノードで指定された制限を尊重することを条件に、新しいファイルおよびプログラムをそのシステムに追加することができる。例えば、ユーザノードは、ファイルの読み出しおよび書き込みを許可され得るが、それらの実行は許可されない可能性があり、または、ファイルは、所定のドライブまたはフォルダにおいてのみ実行され得る。これらの制限は、システムのセキュリティを維持するのを助ける。例えば、これらの制限なしに攻撃者がユーザ秘密鍵を盗んだ場合、攻撃者は、マシン全体を危険にさらす完全なシステム制御を行うことができるであろう。
図9に示すようなユーザノードの概念は、例えば、図5に示すような単純なユーザ許可の概念とは異なる。図5では、システム管理者は、ユーザがこのノードのための特定の許可を有することを指定するだけであるが、図8に示すようなユーザノードのシステムでは、システム管理者は、ユーザが自身の新しいサブノードを作成することを可能にすることができる。例えば、ユーザは、特定のフォルダを所有すること、新しいファイルまたはサブフォルダを追加すること、および/またはそれらを再び削除することを許可され得る。
実施形態では、ユーザノードが更新されると、そのすべての子ノードはデフォルトで無効にされ、それらはユーザノードの新しいバージョンに再作成され、付加される必要がある。これは非能率的に見えるかもしれないが、ユーザノードから作成されたノードが常に、親ユーザノードの同じプロパティ(例えば、許可、有効期限)を反映することを保証する。
ユーザノードは、以下のように作成され得る:Pparent(Pparentはシステム管理者に属する)によって所有されるメタネットノードが、新しい所有者Pnode(PnodeはユーザUに属する)として指定する新しいメタネットトランザクションを作成する。この時点から、Uは、新しいメタネットトリップワイヤノードを作成し、それらをその分岐に付加することできる。
企業のための複数システム管理
企業では、会社のシステム管理者のみがすべてのマシンのファイルおよびプログラムを妥当性確認することができるような、より厳格なシステム管理が好まれ得る。このシステム管理は、提案されたアーキテクチャに新しい層を追加することによって達成され得る。この場合、各システムのシステムルートノードは、会社のシステム管理者が会社システム管理者ノードを使用することで作成される(図10参照)。
このシナリオでは、会社のシステム管理者は、任意の会社システムでファイルを更新または無効にすることを許可された唯一の者である。ユーザによって所有される公開鍵に関連付けられたユーザノードを作成することによって、特定のシステムまたはその一部をユーザに割り当てることができる。代替的に、ユーザはシステムにファイルを追加し、会社のシステム管理者に承認を求めることができる。システム管理者は、ファイルを検証および妥当性確認し、新しいファイルハッシュまたはマークルツリーノードをシステムツリーに追加する。新しいノードが追加されるとすぐに、システムはファイルを妥当性確認し、必要とされる動作を実行することができる。
オンチェーンでのファイル記憶
ファイルハッシュノードは、そのハッシュだけではなく、ファイル全体をオンチェーンで記憶するように修正することができる。これらのノードは、以下ではファイルノードと呼ばれる。ファイルハッシュは妥当性確認および完全性を保証するが、安全な保管も必要な場合または他の手法によるファイルの更新が複雑で実行不可能な場合は、完全なファイルノードが有用であり得る。
これは、システム管理者が、チェーン上にファイルをリリースすることによって一度だけファイルを公開し、次いで、すべてのユーザのコンピュータからデータをダウンロードできるので、有用である。リリースは、ユーザのコンピュータ102がオンラインになったときにオペレーティングシステムによって自動的に検出され、更新され得る(管理者は、ユーザに更新を警告する電子メールなどのメッセージを送信する必要がない)。例えば、これにより、外部サーバの必要なしに、ドライバー、ライブラリなどの更新方法としてブロックチェーンを利用することができる。ユーザのオペレーティングシステムは、既知のメタネットツリーに関連付けられたファイルの以前のバージョンを有するので、チェーン上のどこを見るべきかを知っている。つまり、ツリーが更新されたかどうかをチェックするために最新バージョンをダウンロードするとき、ファイルの最新バージョンを新しいリーフとみなす。
安全な記憶:重要なデータは、ファイルノードを使用して記憶され、取り出されることができるので、ハードウェア損傷または窃盗の場合でも、ファイルを常に取り出すことができる。ブロックチェーンは公開されているため、オンチェーンにアップロードされたデータは、最先端の暗号化技法で暗号化され、鍵は安全に保管され得る。重要な機密ファイルは、好ましくは、少なくとも暗号化されていない形態では、オンチェーンに記憶されるべきではない。
ファイル更新:いくつかのシステムを管理するシステム管理者は、ファイル更新を直接オンチェーンでリリースすることができる。システムは、最新のメタネットシステムツリーを取り出すたびに、これらのファイルも自動的に更新する。これは、例えば、セキュリティフィックスをリリースするか、または構成ファイルを更新するのに有用であり得る。システム管理者のみがシステムプリファレンスを構成および更新することができる場合、システム管理者は、ファイルノードにおいてconfigファイルをオンチェーンでリリースすることによってそれを行うことができる。各システムは、システムツリーのそのコピーを自動的に更新し、古いconfigファイルを無効にし、有効なファイルノード(子を有さずかつ失効していないノード)内で見つけられた最新のバージョンをダウンロードする。
メタネットトリップワイヤプロトコル
このセクションでは、プロトコルの特定の例として、メタネットトリップワイヤプロトコル(MTP)を紹介する。次いでメタネットで保護されたシステムを作成するためにそれをどのように使用するかを説明する。MTPは、メタネットプロトコルの上に構築され、メタネットノードを特殊化し、オペレーティングシステムを保護するためのルールのセットを追加する。メタネットツリー構造は、任意の一般的なシステム(例えば、ラップトップ、サーバ、スマートフォン)内のファイルおよびフォルダを制御および妥当性確認するために使用される。
MTPを統合するオペレーティングシステムは、任意のファイル動作(すなわち、読み出し、書き込み、実行)の前にそのメタネットシステムツリーをチェックし、ファイルが有効である場合にのみその動作を実行する。前のセクションですでに説明したように、ファイル自体またはそのハッシュが有効なメタネットトリップワイヤノードに記憶されている場合、ファイルは有効である(ノードは、前述したプロパティを尊重する場合に有効である)。ファイルのコピーまたはそのハッシュは常にブロックチェーンに記憶されているので、ファイル内の単一の変更がMTPによって検出され、動作の発生を拒否するイベントフラグがトリガされる。
複数のファイル(例えば、実行可能ファイル、構成ファイル、ライブラリ、データ)が実行されるのを必要とするソフトウェアの場合のように、洗練されたトリップワイヤ機構が可能である。これらの場合、各ファイルハッシュは、マークルルートノードに記憶されるマークルツリーを作成するために使用される。マークルツリーは「トリップワイヤ」として機能し、これらのファイルのいずれかにおける単一の変更がそれをオフに設定し、ソフトウェアが実行されるのを防ぐイベントフラグをトリガする。これは、マルウェア攻撃を防ぐためだけでなく、例えば、ライセンス契約が成立しているとき、またはソフトウェアおよびライブラリの特定のセットを使用して特定の結果が得られることをユーザが証明したいときにも特に有用である。
メタネットトリップワイヤノードおよびエッジ
メタネットノードは、ファイルのハッシュまたはファイル自体を記憶するために使用される。それらはまた、ユーザに許可を与え、ファイルおよびフォルダ情報を記憶するために使用される。これらのノードは、メタネットエッジを使用してリンクされ、階層制御構造を形成する。新しいメタネットトリップワイヤノードおよび新しいメタネットトリップワイヤエッジを作成するためのプロセスについてここで説明する。
メタネットトリップワイヤノード:メタネットトリップワイヤ(MT)ノードは、ファイルを妥当性確認または記憶し、許可、ユーザ、およびフォルダを管理するように特殊化されたメタネットノードである。メタネットノードは、メタネットプロトコルに従うブロックチェーントランザクションである。メタネットノードは、OP_RETURNの後にメタネットフラグ(4バイトのプレフィックス)をトランザクションに含めることによって作成される。メタネットフラグの後に、トランザクションは、ハッシュのようなファイルの有効性に関する情報と、有効期限または許可された動作のリストなどの任意の他のオプションのパラメータとを含む。各ノードには、システム管理者によって制御される新しい公開鍵Pnodeが割り当てられ、Pnodeに関連付けられた秘密鍵は、そのノードの子を作成する必要がある。したがって、秘密鍵の所有者のみが新しいファイルを更新または追加することができる。ユーザノードを作成することは、公開鍵Pnodeがシステムユーザによって制御される新しいMTノードを作成することを意味し、これにより、ユーザは、新しいファイルまたはフォルダを作成することができる。異なるタイプのMTノードが上記で説明されている。
メタネットトリップワイヤエッジ:メタネットトリップワイヤエッジは、標準メタネットエッジのルールに従う:メタネットエッジは、親メタネットノードおよび子メタネットノードという2つのメタネットノード間の関連付けである(MTPでは、これらはMTノードである)。エッジは、親の署名が別のメタネットノード(子)の入力に現れるときに作成される。親のみがエッジを作成することができ、したがって、それ自体を子にリンクすることができる。エッジは、異なるノード間のリンクを作成するために使用される。例えば、システムルートノードおよびそのファイルハッシュとユーザノードとの間、およびファイルハッシュノードと同じファイルのより新しいバージョンとの間には常にリンクがある。メタネットトリップワイヤトランザクションの例を図11に示す。
ノードタイプ
このセクションでは、MTノードがリストされ、詳細に説明される。すべてのMTノードは、OP_RETURN(例えば、図11)に含まれる追加のフィールドを有するメタネットノードである。
システムルートノード:システムルートノードは、親公開鍵を含まない。しかしながら、スプーフィング攻撃を防ぐために、システム管理者によって作成される。<file hash>フィールドには、システムハッシュまたはシステムを記述する一意の識別子(例えば、MACアドレス、ドライブシリアル番号、CPU情報などの組合せ)が記憶される。システムルートノードの親は、システム管理者またはシステム所有者である。
ユーザノード:ユーザノードは、システム管理者からユーザに、またはユーザから別のユーザにノード所有権を譲渡するために使用される。新しいユーザは<user>フィールドで指定され、許可された動作のリストは<permitted operations list>フィールドで指定される。ユーザノードの親は、システムルートノード、別のユーザノード、またはフォルダノードであり得る。
ファイルハッシュノード:ファイルハッシュノードは、ファイルのハッシュを含む。<file hash>フィールドには、ハッシュが記憶される。追加的に、<path hash>フィールドでパスを指定することができる。ノードを有するファイルの親は、システムルートノード、フォルダノードもしくはユーザノード、または更新の場合には別のファイルハッシュノードであり得る。
マークルルートノード:互いにリンクされる必要があるファイルのグループ(例えば、ソフトウェアの場合、実行可能ファイル、configファイル、いくつかのライブラリおよびデータが必要とされ得る)は、マークルツリーにおいて互いにハッシュされ得、マークルルートは、マークルルートノードに記憶される(ファイルがノードを有するのと同様であるが、個々のファイルのハッシュだけではなくファイルのグループのマークルルートを記憶する)。マークルルートは<file hash>フィールドに記憶される。マークルツリーに含まれるファイルの順序付きリスト(絶対パスを含む)は、<file list>フィールドに記憶される。
マークルルートノードの親は、システムルートノード、フォルダノード、もしくはユーザノード、または更新の場合にはファイルハッシュノードもしくは別のマークルルートノードであり得る。
ファイルノード:ファイルノードは、オンチェーンでファイル全体を記憶する。<file>フィールドは、ファイルのバイトコードを含み、オプションで、<file hash>フィールドは、ファイルのハッシュを記憶する(FileHashノードと同様に)。
ファイルノードの親は、システムルートノード、フォルダノード、もしくはユーザノード、または更新の場合には別のファイルノードであり得る。
フォルダノード:フォルダノードは、システムフォルダ構造を記述するために使用される。<path hash>フィールドには、絶対パスのハッシュが記憶される。このタイプのノードは、システムフォルダ構造がシステムツリーにおいて複製される場合に使用される。フォルダノードの親は、システムルートノード、別のフォルダノード、またはユーザノードであり得る。
ツリー実装
MTプロトコルは、ツリー初期化とノード管理という2つのフェーズで構成される。以下では、これらのフェーズについて説明し、それらの完了および実行に関わる段階的なプロセスについて論じる。
ツリー初期化:ツリー初期化フェーズでは、メタネットシステムツリーが作成され、システムルートが初期化される。以下のステップが実行される:
1.システム管理者が選択される。
2.システム管理者がルート鍵Padminを選択する。
3.Padminは、システムルートノードを作成するために使用され、以下を含む:
I.システムの一意の識別子、および
II.初期ノードを作成するために使用されることとなる新しい鍵Proot(相対的な秘密鍵はシステム管理者によって制御される)。
4.システム管理者は、システムルートノードのトランザクションIDおよび鍵Padmin(代替的に、Prootが使用され得る)を使用してシステムを初期化する。
ノード管理:ノード管理フェーズは、MTノード挿入、更新、および削除という3つの主要な動作を含む。
挿入:新しいMTノードは、上述したルールにしたがってシステムルートまたは他のノードに付加することができる。新しいノードは次のように作成される:
1.新しいトランザクションが作成され、OP_RETURNの後に必要なフィールド(例えば、メタネットフラグ、ユーザidリスト、有効期限、…)が挿入される。
2.親ノードは、新しい鍵Pnode、親ノードのトランザクションIDを追加し、トランザクションに署名する。Pnodeに対する秘密鍵は、新しいノードがユーザノードである場合を除き、システム管理者によって制御される。この場合、秘密鍵はユーザによって制御され、このノードの将来の子はユーザによって署名される。
更新:既存のノードのより新しいバージョンを作成する(例:ハッシュを更新する)ことでノードが更新される。ノードが、より古いバージョンに付加される場合(これは、より古いバージョンの子である)、新しいバージョンのみが有効である(通常、この場合、親の同じ鍵Pnodeが使用される)。新しいバージョンが、より古いノードの同じ親に付加される場合(それらは兄弟である)、両方のバージョンが有効である(通常、この場合、新しい鍵Pnodeが使用される)。
削除:ノードは、無効なハッシュを持つ新しいノードを付加するか、そのUTXOを使用することによって削除される(図11のx BSVを参照)。Pnodeに関連付けられた秘密鍵を知っているシステム管理者またはユーザのみが、より新しいバージョンのノードを付加することまたはUTXOを使用することができる。
オペレーティングシステムでのツリー管理
オペレーティングシステムは、ルートノードの鍵ProotおよびトランザクションIDを(安全な方法で)記憶することによってツリーをセットアップするシステム管理者によって初期化される。システムが初期化されるとき、1つまたは複数のマイニングノードからメタネットシステムツリーの最新バージョンをダウンロードする。
ファイルに対する動作を実行する必要があるたびに、ファイルがシステムツリーと照合され、ファイルが有効な場合にのみ動作が完了する。システム管理者またはユーザがファイルまたはソフトウェアを更新すると、メタネットシステムツリーの最新バージョンをダウンロードする必要がある。セキュリティとスピードを高めるために、システムツリーを定期的に更新し、すべてのファイルを予防的にチェックすることができる。
実施例
1.新しいシステムが初期化される。これは、メタネットシステムツリーをダウンロードする。
2.ユーザがファイルを開こうとする。
3.ファイルがメタネットシステムツリーと照合される。
a.ファイルが有効であり、ユーザがそのファイルを開く許可を有している場合:
- ファイルが開かれる。
b.ファイルが有効でない場合(例えば、撃者がマルウェアを挿入した場合)、またはユーザがファイルを開く許可を有していない場合:
- システムはイベントフラグをトリガするトリップワイヤを作動させ、動作は拒否される。
上記の実施形態は、例としてのみ記載されていることが理解されよう。
例えば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンはブロックチェーン150の1つの特定の例であり、上記の説明は概して任意のブロックチェーンに適用され得ることが理解されよう。すなわち、本発明は、ビットコインブロックチェーンに限定されるものではない。より一般的には、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上記のあらゆる言及は、それぞれブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への言及に置き換えることができる。ブロックチェーン、ブロックチェーンネットワーク、および/またはブロックチェーンノードは、上記で説明したように、ビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の説明されたプロパティのうちのいくつかまたはすべてを共有し得る。
本発明の好ましい実施形態では、ブロックチェーンネットワーク106はビットコインネットワークであり、ビットコインノード104は、ブロックチェーン150のブロック151を作成し、公開し、伝搬し、記憶するという説明された機能の少なくともすべてを実行する。これらの機能のすべてではないが1つまたはいくつかのみを実行する他のネットワークエンティティ(またはネットワーク要素)が存在し得ることは除外されない。すなわち、ネットワークエンティティは、ブロックを作成および公開することはしないが、ブロックを伝搬および/または記憶する機能を実行し得る(これらのエンティティは、好ましいビットコインネットワーク106のノードとはみなされないことを想起されたい)。
本発明の非優先実施形態では、ブロックチェーンネットワーク106は、ビットコインネットワークでなくてもよい。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を作成し、公開し、伝搬し、記憶する機能のすべてではないが、少なくとも1つまたはいくつかを実行し得ることは除外されない。例えば、それらの他のブロックチェーンネットワーク上で、「ノード」は、ブロック151を作成および公開するが、それらのブロック151を記憶および/または他のノードに伝搬しないように構成される、ネットワークエンティティを指すために使用され得る。
さらにより一般的には、上記の「ビットコインノード」104という用語へのいかなる言及も、「ネットワークエンティティ」または「ネットワーク要素」という用語に置き換えることができ、そのようなエンティティ/要素は、ブロックを作成し、公開し、伝搬し、記憶する役割の一部またはすべてを実行するように構成される。そのようなネットワークエンティティ/要素の機能は、ブロックチェーンノード104を参照して上記で説明述した方法と同じ方法でハードウェアに実装され得る。
さらにより一般的には、下記ステートメントのうちのいずれか1つまたは複数による方法、装置、またはプログラム、が提供され得る。
ステートメント1:ブロックチェーン上にオーバーレイされたツリー構造を使用する方法であって、ツリー構造は、複数のノードとノード間のエッジとを含み、各ノードは、ブロックチェーン上に記録された異なるトランザクションであり、各エッジは、それぞれの子ノードからそれぞれの親ノードに接続し、エッジは、トランザクションIDを含む各トランザクションによって形成され、各子ノードは、子ノードのそれぞれのペイロードにおいてそれぞれの親ノードのトランザクションIDを指定し、親ノードのうちの1つは、ツリー構造のルートノードであり、方法は、ブロックチェーンを検査して、ツリー構造の少なくとも一部を識別するステップであって、ターゲット子ノードのそれぞれのペイロードにおいてファイルの記録を含む子ノードのうちのターゲット子ノードを少なくとも識別することと、ツリー構造を通ってターゲット子ノードからルートノードに戻る1つまたは複数のエッジを含むパスを識別することとを含む、ステップと、チェックを実行するステップであって、A)ターゲット子ノードからルートノードに戻る識別されたパスに沿ったエッジごとに、それぞれの子ノードがそれぞれの親ノードに関連付けられた鍵によって署名されていることをチェックすることと、B)ファイルの現在のインスタンスがターゲット子ノードに含まれる記録と一致することをチェックすることとを含む、ステップと、少なくともチェックA)およびB)が肯定的であるという条件で、ファイルの現在のインスタンスを検証するステップとを含む、方法。
ステートメント2:上記検証するステップを条件として、ユーザがファイルの現在のインスタンスに対して要求されたアクションを実行することを可能にするステップを含む、ステートメント1の方法。
ステートメント3:方法は、ユーザのコンピュータ機器上のオペレーティングシステムまたはファイルシステムによって実行され、オペレーティングシステムまたはファイルシステムは、ユーザがコンピュータ機器を使用して要求されたアクションを実行することを可能にする前に上記チェックを実施するように構成される、ステートメント2の方法。
ステートメント4:要求されたアクションは、ファイルを読み出すこと、ファイルを修正すること、ファイルを実行すること、またはファイルを削除することのうちの1つを含む、ステートメント2または3の方法。
ステートメント5:ターゲット子ノードのペイロードは、1つまたは複数の許可されたアクションの指示をさらに含み、オペレーティングシステムまたはファイルシステムは、要求されたアクションがターゲット子ノードにおいて示された許可されたアクションのうちの1つであるというさらなる条件でのみ、要求されたアクションを可能にすることを実行するように構成される、ステートメント2、3または4の方法。
ステートメント6:1つまたは複数の許可されたアクションは、ファイルを読み出すこと、ファイルを修正すること、ファイルを実行すること、またはファイルを削除することのうちの1つまたは複数を含む、ステートメント5の方法。
ステートメント7:ターゲット子ノードのペイロードは、1つまたは複数の許可されたユーザの指示をさらに含み、オペレーティングシステムまたはファイルシステムは、アクションを要求するユーザがターゲット子ノードのペイロードにおいて示された許可されたユーザであるというさらなる条件でのみ、要求されたアクションを可能にすることを実行するように構成される、ステートメント2から6のいずれかの方法。
ステートメント8:方法は、ファイルの現在のインスタンスの完全性を検証するために、アンチウィルスソフトウェアまたは別のアプリケーションによって実行される、ステートメント1または2の方法。
ステートメント9:それぞれの親ノードに関連付けられた鍵は、親ノードのペイロードに含まれることによって親に関連付けられる、先行ステートメントのいずれかの方法。
ステートメント10:各トランザクションは、ロックスクリプトを含む少なくとも1つの出力と、それぞれの他のトランザクションの出力を指し示し、かつそれぞれの他のトランザクションの出力をロック解除するためのロック解除スクリプトを含む少なくとも1つの入力とを含む、先行請求項のいずれかにの方法。
ステートメント11:各子の入力は、それぞれの親の鍵によって署名され、A)は、上記パスに沿った各子ノードの入力が、それぞれの親の鍵によって署名されていることをチェックすることを含む、ステートメント10の方法。
ステートメント12:各子ノードのペイロードは、それぞれの子ノードの出力のうちの1つまたは複数に含まれる、ステートメント10または11の方法。
ステートメント13:上記記録は、少なくともファイルの明示的なコピーを含み、B)は、ファイルの現在のインスタンスが、ターゲット子ノードのペイロードに記録されたコピーと同じであることをチェックすることを含む、先行ステートメントのいずれかの方法。
ステートメント14:上記記録は、少なくともプレイメージのハッシュを含み、プレイメージはファイルを含み、B)は、ファイルの現在のインスタンスを含むプレイメージの現在のインスタンスのハッシュが、ターゲット子ノードのペイロードに記録されたハッシュと同じであることを少なくともチェックすることを含む、先行ステートメントのいずれかの方法。
ステートメント15:上記記録は、ハッシュツリーのリーフとして複数のファイルから生成された、ハッシュツリーのハッシュツリールートを含み、上記ファイルは、複数のファイルのうちの1つであり、B)は、複数のファイルの現在のインスタンスから計算されたハッシュルートが、ターゲット子ノードに記録されたハッシュルートと同じであることをチェックすることを含む、先行ステートメントのいずれかの方法。
ステートメント16:上記親ノードのうちの少なくとも1つは、上記親ノードのうちの別の親ノードの子ノードである中間親ノードである、先行ステートメントのいずれかの方法。
ステートメント17:上記少なくとも1つの中間親ノードは、上記パスが2つ以上のエッジを含むように、ターゲット子ノードとルートノードとの間の上記パスに沿った少なくとも1つのノードを含む、ステートメント16の方法。
ステートメント18:上記少なくとも1つの中間親ノードは、ファイルを含むフォルダを表すフォルダノードを含む、ステートメント17の方法。
ステートメント19:上記少なくとも1つの中間親ノードは、ユーザノードを含み、ルートノードに関連付けられた鍵は、システム管理者の鍵であり、ユーザノードに関連付けられた鍵は、ユーザの鍵である、ステートメント17の方法。
ステートメント20:上記チェックは、C)ルートノードが信頼できるエンティティによって署名されていることをチェックするという追加のチェックを含み、上記検証することは、チェックC)が肯定的であることをさらに条件とする、先行ステートメントのいずれかの方法。
ステートメント21:上記信頼できるエンティティはシステム管理者である、ステートメント20の方法。
ステートメント22:ルートノードの入力は、信頼できるエンティティによって署名され、チェックC)は、ルートノードの入力が信頼できるエンティティによって署名されていることをチェックすることを含む、少なくともステートメント10に従属するステートメント20または21の方法。
ステートメント23:上記チェックは、D)ターゲット子ノードがグラフ構造の他の子ノードの親ノードでもないことをチェックするというさらなるチェックを含み、上記検証することは、チェックD)が、ターゲット子ノードが他の子ノードのどの子ノードの親でもないと決定することをさらに条件とする、先行ステートメントのいずれかの方法。
ステートメント24:新しいエッジを介してターゲット子ノードに新しい子ノードを付加することによって、ブロックチェーン上のグラフ構造に記録されたファイルを後に更新するステップを含み、新しい子ノードは、新しい子ノードのペイロードにおいて更新されたファイルの記録を含む、ステートメント23の方法。
ステートメント25:ターゲット子ノードは、記録の終了時間をさらに指定し、上記チェックは、E)現在の時間がターゲット子ノードにおいて指定された終了時間よりも遅くないという点で記録が失効していないことをチェックするという別のチェックを含み、上記検証は、上記チェックE)が、現在の時間が失効していないと決定することをさらに条件とする、先行ステートメントのいずれかの方法。
ステートメント26:ツリー構造はメタネットグラフである、先行ステートメントのいずれかの方法。
ステートメント27:コンピュータシステムであって、1つまたは複数の処理ユニットを含む処理装置と、1つまたは複数のメモリユニットを含むメモリとを備え、メモリは、処理装置上で実行されるように構成されたコードを記憶し、コードは、処理装置上で実行されると、先行ステートメントのいずれかの動作を実行するように構成されている、システム。
ステートメント28:コンピュータ可読ストレージ上に具現化されたコンピュータプログラムであって、コンピュータプログラムは、1つまたは複数の処理ユニット上で実行されると、ステートメント1から27のいずれかの動作を実行するように構成されたコードを含む、コンピュータプログラム。
開示された技術の他の変形または応用は、本明細書の開示が与えられると、当業者に明らかになるであろう。本開示の範囲は、上述の実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。

Claims (28)

  1. ブロックチェーン上にオーバーレイされたツリー構造を使用する方法であって、前記ツリー構造は、複数のノードとノード間のエッジとを含み、各ノードは、前記ブロックチェーン上に記録された異なるトランザクションであり、各エッジは、それぞれの子ノードからそれぞれの親ノードに接続し、前記エッジは、トランザクションIDを含む各トランザクションによって形成され、各子ノードは、前記子ノードのそれぞれのペイロードにおいて前記それぞれの親ノードの前記トランザクションIDを指定し、前記親ノードのうちの1つは、前記ツリー構造のルートノードであり、前記方法は、
    前記ブロックチェーンを検査して、前記ツリー構造の少なくとも一部を識別するステップであって、ターゲット子ノードの前記それぞれのペイロードにおいてファイルの記録を含む前記子ノードのうちの前記ターゲット子ノードを少なくとも識別することと、前記ツリー構造を通って前記ターゲット子ノードから前記ルートノードに戻る1つまたは複数のエッジを含むパスを識別することとを含む、ステップと、
    チェックを実行するステップであって、
    A)前記ターゲット子ノードから前記ルートノードに戻る前記識別されたパスに沿ったエッジごとに、前記それぞれの子ノードが前記それぞれの親ノードに関連付けられた鍵によって署名されていることをチェックすることと、
    B)前記ファイルの現在のインスタンスが前記ターゲット子ノードに含まれる前記記録と一致することをチェックすることと
    を含む、ステップと、
    少なくともチェックA)およびB)が肯定的であるという条件で、前記ファイルの前記現在のインスタンスを検証するステップと
    を含む方法。
  2. 前記検証するステップを条件として、ユーザが前記ファイルの前記現在のインスタンスに対して要求されたアクションを実行することを可能にするステップを含む、請求項1に記載の方法。
  3. 前記方法は、前記ユーザのコンピュータ機器上のオペレーティングシステムまたはファイルシステムによって実行され、前記オペレーティングシステムまたはファイルシステムは、前記ユーザが前記コンピュータ機器を使用して前記要求されたアクションを実行することを可能にする前に前記チェックを実施するように構成される、請求項2に記載の方法。
  4. 前記要求されたアクションは、前記ファイルを読み出すこと、前記ファイルを修正すること、前記ファイルを実行すること、または前記ファイルを削除することのうちの1つを含む、請求項2または3に記載の方法。
  5. 前記ターゲット子ノードの前記ペイロードは、1つまたは複数の許可されたアクションの指示をさらに含み、前記オペレーティングシステムまたはファイルシステムは、前記要求されたアクションが前記ターゲット子ノードにおいて示された前記許可されたアクションのうちの1つであるというさらなる条件でのみ、前記要求されたアクションを可能にすることを実行するように構成される、請求項2から4のいずれか一項に記載の方法。
  6. 前記1つまたは複数の許可されたアクションは、前記ファイルを読み出すこと、前記ファイルを修正すること、前記ファイルを実行すること、または前記ファイルを削除することのうちの1つまたは複数を含む、請求項5に記載の方法。
  7. 前記ターゲット子ノードの前記ペイロードは、1つまたは複数の許可されたユーザの指示をさらに含み、前記オペレーティングシステムまたはファイルシステムは、前記アクションを要求する前記ユーザが前記ターゲット子ノードの前記ペイロードにおいて示された許可されたユーザであるというさらなる条件でのみ、前記要求されたアクションを可能にすることを実行するように構成される、請求項2から6のいずれか一項に記載の方法。
  8. 前記方法は、前記ファイルの前記現在のインスタンスの完全性を検証するために、アンチウィルスソフトウェアまたは別のアプリケーションによって実行される、請求項1または2に記載の方法。
  9. それぞれの親ノードに関連付けられた前記鍵は、前記親ノードのペイロードに含まれることによって前記親に関連付けられる、請求項1から8のいずれか一項に記載の方法。
  10. 各トランザクションは、ロックスクリプトを含む少なくとも1つの出力と、それぞれの他のトランザクションの出力を指し示し、かつ前記それぞれの他のトランザクションの前記出力をロック解除するためのロック解除スクリプトを含む少なくとも1つの入力とを含む、請求項1から9のいずれか一項に記載の方法。
  11. 各子の前記入力は、前記それぞれの親の前記鍵によって署名され、A)は、前記パスに沿った各子ノードの前記入力が、前記それぞれの親の前記鍵によって署名されていることをチェックすることを含む、請求項10に記載の方法。
  12. 各子ノードの前記ペイロードは、前記それぞれの子ノードの前記出力のうちの1つまたは複数に含まれる、請求項10または11に記載の方法。
  13. 前記記録は、少なくとも前記ファイルの明示的なコピーを含み、B)は、前記ファイルの前記現在のインスタンスが、前記ターゲット子ノードの前記ペイロードに記録された前記コピーと同じであることをチェックすることを含む、請求項1から12のいずれか一項に記載の方法。
  14. 前記記録は、少なくともプレイメージのハッシュを含み、前記プレイメージは前記ファイルを含み、B)は、前記ファイルの現在のインスタンスを含む前記プレイメージの前記現在のインスタンスの前記ハッシュが、前記ターゲット子ノードの前記ペイロードに記録された前記ハッシュと同じであることを少なくともチェックすることを含む、請求項1から13のいずれか一項に記載の方法。
  15. 前記記録は、ハッシュツリーのリーフとして複数のファイルから生成された、前記ハッシュツリーのハッシュツリールートを含み、前記ファイルは、前記複数のファイルのうちの1つであり、B)は、前記複数のファイルの現在のインスタンスから計算された前記ハッシュルートが、前記ターゲット子ノードに記録された前記ハッシュルートと同じであることをチェックすることを含む、請求項1から14のいずれか一項に記載の方法。
  16. 前記親ノードのうちの少なくとも1つは、前記親ノードのうちの別の親ノードの子ノードである中間親ノードである、請求項1から15のいずれか一項に記載の方法。
  17. 前記少なくとも1つの中間親ノードは、前記パスが2つ以上のエッジを含むように、前記ターゲット子ノードと前記ルートノードとの間の前記パスに沿った少なくとも1つのノードを含む、請求項16に記載の方法。
  18. 前記少なくとも1つの中間親ノードは、前記ファイルを含むフォルダを表すフォルダノードを含む、請求項17に記載の方法。
  19. 前記少なくとも1つの中間親ノードは、ユーザノードを含み、前記ルートノードに関連付けられた前記鍵は、システム管理者の鍵であり、前記ユーザノードに関連付けられた前記鍵は、ユーザの鍵である、請求項17に記載の方法。
  20. 前記チェックは、C)前記ルートノードが信頼できるエンティティによって署名されていることをチェックするという追加のチェックを含み、前記検証することは、前記チェックC)が肯定的であることをさらに条件とする、請求項1から19のいずれか一項に記載の方法。
  21. 前記信頼できるエンティティはシステム管理者である、請求項20に記載の方法。
  22. 前記ルートノードの入力は、前記信頼できるエンティティによって署名され、前記チェックC)は、前記ルートノードの入力が前記信頼できるエンティティによって署名されていることをチェックすることを含む、少なくとも請求項10に従属する請求項20または21に記載の方法。
  23. 前記チェックは、D)前記ターゲット子ノードが前記グラフ構造の他の子ノードの親ノードでもないことをチェックするというさらなるチェックを含み、前記検証することは、前記チェックD)が、前記ターゲット子ノードが前記他の子ノードのどの子ノードの親でもないと決定することをさらに条件とする、請求項1から22のいずれか一項に記載の方法。
  24. 新しいエッジを介して前記ターゲット子ノードに新しい子ノードを付加することによって、前記ブロックチェーン上の前記グラフ構造に記録された前記ファイルを後に更新するステップを含み、前記新しい子ノードは、前記新しい子ノードのペイロードにおいて前記更新されたファイルの記録を含む、請求項23に記載の方法。
  25. 前記ターゲット子ノードは、前記記録の終了時間をさらに指定し、前記チェックは、E)現在の時間が前記ターゲット子ノードにおいて指定された前記終了時間よりも遅くないという点で前記記録が失効していないことをチェックするという別のチェックを含み、前記検証は、前記チェックE)が、現在の時間が失効していないと決定することをさらに条件とする、請求項1から24のいずれか一項に記載の方法。
  26. 前記ツリー構造はメタネットグラフである、請求項1から25のいずれか一項に記載の方法。
  27. コンピュータシステムであって、
    1つまたは複数の処理ユニットを含む処理装置と、
    1つまたは複数のメモリユニットを含むメモリと
    を備え、
    前記メモリは、前記処理装置上で実行されるように構成されたコードを記憶し、前記コードは、前記処理装置上で実行されると、請求項1から26のいずれか一項に記載の動作を実行するように構成されている、システム。
  28. コンピュータ可読ストレージ上に具現化されたコンピュータプログラムであって、前記コンピュータプログラムは、1つまたは複数の処理ユニット上で実行されると、請求項1から26のいずれか一項に記載の動作を実行するように構成されたコードを含む、コンピュータプログラム。
JP2022575356A 2020-06-12 2021-05-12 ファイル検証システムおよび方法 Pending JP2023528649A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2008951.2 2020-06-12
GB2008951.2A GB2595927A (en) 2020-06-12 2020-06-12 File verification system and method
PCT/EP2021/062620 WO2021249717A1 (en) 2020-06-12 2021-05-12 File verification system and method

Publications (2)

Publication Number Publication Date
JP2023528649A true JP2023528649A (ja) 2023-07-05
JPWO2021249717A5 JPWO2021249717A5 (ja) 2024-04-25

Family

ID=71835499

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022575356A Pending JP2023528649A (ja) 2020-06-12 2021-05-12 ファイル検証システムおよび方法

Country Status (6)

Country Link
US (1) US20230224174A1 (ja)
EP (1) EP4133395A1 (ja)
JP (1) JP2023528649A (ja)
CN (1) CN115699003A (ja)
GB (1) GB2595927A (ja)
WO (1) WO2021249717A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112749144B (zh) * 2021-01-15 2023-06-30 云南云电同方科技有限公司 一种基于区块链的持久化文件存储系统及方法
US20230038652A1 (en) * 2021-08-03 2023-02-09 Johnson Controls Tyco Ip Holdings, Llp Systems and methods for verifying video authenticity using blockchain

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7895666B1 (en) * 2006-09-01 2011-02-22 Hewlett-Packard Development Company, L.P. Data structure representation using hash-based directed acyclic graphs and related method
US11025407B2 (en) * 2015-12-04 2021-06-01 Verisign, Inc. Hash-based digital signatures for hierarchical internet public key infrastructure
US11582042B2 (en) * 2018-03-16 2023-02-14 General Electric Company Industrial data verification using secure, distributed ledger
WO2019195639A1 (en) * 2018-04-05 2019-10-10 Neji, Inc. Programmatic creation of blockchains
JP2022508138A (ja) * 2018-11-27 2022-01-19 エヌチェーン ホールディングス リミテッド ブロックチェーン上にデータを格納するコンピュータにより実施されるシステム及び方法
US11251963B2 (en) * 2019-07-31 2022-02-15 Advanced New Technologies Co., Ltd. Blockchain-based data authorization method and apparatus

Also Published As

Publication number Publication date
GB2595927A (en) 2021-12-15
EP4133395A1 (en) 2023-02-15
WO2021249717A1 (en) 2021-12-16
GB202008951D0 (en) 2020-07-29
CN115699003A (zh) 2023-02-03
US20230224174A1 (en) 2023-07-13

Similar Documents

Publication Publication Date Title
US11899817B2 (en) Systems, methods, and apparatuses for storing PII information via a metadata driven blockchain using distributed and decentralized storage for sensitive user information
AU2022226929B2 (en) Advanced non-fungible token blockchain architecture
US10664451B1 (en) Systems and methods for encrypting data in backend storage caches shared by multiple decentralized applications
US20230342437A1 (en) Blockchain-based system and method for publishing an operating system
US20230224174A1 (en) File verification system and method
JP2023508088A (ja) ブロックチェーンオーバーレイネットワークへの鍵のマッピング
Sari et al. FileTribe: blockchain-based secure file sharing on IPFS
US11374755B1 (en) Entangled token structure for blockchain networks
JP2023524855A (ja) ブロックチェーンを介したデータの効率的かつセキュアな処理、アクセス、および送信のためのコンピュータで実施されるシステムおよび方法
US11283595B1 (en) Systems and methods for securing cached data stored off-chain in a blockchain-based network
WO2021053425A1 (en) Multi-criteria blockchain protocol
WO2023099357A1 (en) Compressible blockchains
CN112016118A (zh) 匿名数据库评级更新
US20240121118A1 (en) Blockchain tree structure
Jahan et al. Utilizing Hyperledger-Based Private Blockchain to Secure E-Passport Management
Valle Trillo Certification of IoT elements using the blockchain
TW202334847A (zh) 用於安全且有效之資料儲存之電腦實現方法及系統
CN117136527A (zh) 用于区块链实现的数据应用程序中的签名验证的改进方法和系统
WO2024032994A1 (en) Blockchain-implemented database overlay, verification and indexing system
WO2024028077A1 (en) Wrapped encryption
KR20240041944A (ko) 컴퓨터 구현 방법 및 시스템
WO2023227467A1 (en) Blockchain-based message journaling

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240415

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240415