本明細書の図において一般的に説明され、示されているように、本明細書のコンポーネントが、多種多様な異なる構成で配置および設計されてよいということが、容易に理解されるであろう。したがって、添付の図において表された方法、装置、非一過性コンピュータ可読媒体、およびシステムのうちの少なくとも1つの実施形態に関する以下の詳細な説明は、請求されている本出願の範囲を制限するよう意図されておらず、単に選択された実施形態を代表している。
本明細書全体を通して説明された特徴、構造、または特性は、1つまたは複数の実施形態において、任意の適切な方法で組み合わせられるか、または削除されてよい。例えば、語句「実施形態例」、「一部の実施形態」、またはその他の同様の言葉の使用は、本明細書全体を通じて、実施形態に関連して説明された特定の特徴、構造、または特性が少なくとも1つの実施形態に含まれてよいということを指している。したがって、語句「実施形態例」、「一部の実施形態において」、「その他の実施形態において」、またはその他の同様の言葉の出現は、本明細書全体を通じて、必ずしもすべてが実施形態の同じグループを指しておらず、説明された特徴、構造、または特性は、1つまたは複数の実施形態において、任意の適切な方法で組み合わせられるか、または削除されてよい。さらに、各図では、要素間の任意の接続は、示された接続が一方向または双方向の矢印である場合でも、一方向通信または双方向通信あるいはその両方を許可することができる。また、図面に示された任意のデバイスは、異なるデバイスであることができる。例えば、情報を送信しているモバイル・デバイスが示された場合、その情報を送信するために、有線デバイスも使用され得る。
加えて、「メッセージ」という用語が実施形態の説明において使用されていることがあるが、本出願は、多くの種類のネットワークおよびデータに適用されてよい。さらに、特定の種類の接続、メッセージ、および信号伝達が実施形態例において示されることがあるが、本出願は、特定の種類の接続、メッセージ、および信号伝達に限定されない。
実施形態例は、ランダム化された選択プロセスを対象にする方法、システム、コンポーネント、非一過性コンピュータ可読媒体、デバイス、またはネットワーク、あるいはその組み合わせを、許可型ブロックチェーン内の署名者ノードに提供する。
1つの実施形態では、本出願は、互いに通信する複数のノードを含んでいる分散ストレージ・システムである分散型データベース(ブロックチェーンなど)を利用する。分散型データベースは、相互に信頼できない関係者間でレコードを維持することができる分散型台帳に似ている、追加専用の変更不可能なデータ構造を含む。信頼できない関係者は、本明細書ではピアまたはピア・ノードと呼ばれる。各ピアは、データベース・レコードのコピーを維持し、単一のピアは、分散されたピア間で合意に達することなく、データベース・レコードを変更することができない。例えば、ピアは、ブロックチェーン格納トランザクションの妥当性を確認し、それらの格納トランザクションをブロックにグループ化し、ブロック上にハッシュ・チェーンを構築するために、合意プロトコルを実行してよい。このプロセスは、一貫性のために、必要に応じて、格納トランザクションを順序付けることによって台帳を形成する。さまざまな実施形態では、許可型ブロックチェーンまたは許可なしブロックチェーンあるいはその両方が使用され得る。パブリック・ブロックチェーンまたは許可なしブロックチェーンには、特定の識別情報なしで、誰でも参加することができる。パブリック・ブロックチェーンは、ネイティブ暗号通貨を含み、プルーフ・オブ・ワーク(PoW:Proof of Work)などのさまざまなプロトコルに基づいて、合意を使用することができる。一方、許可型ブロックチェーン・データベースは、資金、商品、情報などを交換する企業などの、共通の目標を共有しているが、互いに完全には信用していない実体のグループ内で、安全な相互作用を提供する。
本出願は、分散型ストレージ方式に合わせてある、「スマート・コントラクト」または「チェーンコード」と呼ばれる、任意のプログラム可能な論理を操作するブロックチェーンを利用することができる。場合によっては、システム・チェーンコードと呼ばれる、管理機能およびパラメータのための特殊なチェーンコードが存在することがある。アプリケーションは、ブロックチェーン・データベースの改ざん防止の特性、および署名または署名ポリシーと呼ばれるノード間の基礎になる合意を活用する、信頼できる分散されたアプリケーションであるスマート・コントラクトをさらに利用することができる。このアプリケーションに関連付けられたブロックチェーン・トランザクションは、ブロックチェーンにコミットされる前に「署名される」ことができ、一方、署名されていないトランザクションは無視される。署名ポリシーは、チェーンコードが、トランザクションの署名者を、署名に必要なピア・ノードのセットの形態で指定できるようにする。クライアントが、トランザクションを、署名ポリシーで指定されたピアに送信するときに、トランザクションの妥当性を確認するためのトランザクションが実行される。妥当性確認の後に、トランザクションが順序付けフェーズに移行し、順序付け段階では、合意プロトコルが使用され、ブロックにグループ化された、署名されたトランザクションの順序付けられたシーケンスを生成する。
本出願は、ブロックチェーン・システムの通信実体であるノードを利用することができる。「ノード」は、異なる種類の複数のノードが同じ物理サーバ上で実行され得るという意味で、論理機能を実行してよい。ノードは、信頼できるドメイン内でグループ化され、さまざまな方法でそれらのノードを制御する論理的実体に関連付けられる。ノードは、トランザクション呼び出しを署名者(例えば、ピア)にサブミットし、トランザクション提案を順序付けサービス(例えば、順序付けノード)にブロードキャストするクライアントまたはサブミット・クライアント・ノードなどの、さまざまな種類を含んでよい。別の種類のノードは、クライアントがサブミットしたトランザクションを受信し、トランザクションをコミットし、ブロックチェーン・トランザクションの台帳の状態およびコピーを維持することができるピア・ノードである。ピアは署名者の役割を持つこともできるが、これは必須要件ではない。順序付けサービス・ノードまたは順序付けノードは、すべてのノードのための通信サービスを実行するノードであり、トランザクションをコミットするとき、およびブロックチェーンの世界状態(world state)(通常は制御情報および設定情報を含んでいる初期ブロックチェーン・トランザクションの別名)を変更するときの、システム内のピア・ノードの各々へのブロードキャストなどの、配信保証を実施する。
本出願は、ブロックチェーンのすべての状態遷移の順序付けられた改ざん防止機能付きレコードである台帳を利用することができる。状態遷移は、参加している関係者(例えば、クライアント・ノード、順序付けノード、署名者ノード、ピア・ノードなど)によってサブミットされたチェーンコード呼び出し(すなわち、トランザクション)から生じてよい。各参加している関係者(ピア・ノードなど)は、台帳のコピーを維持することができる。トランザクションは、1つまたは複数のオペランド(作成、更新、削除など)として台帳にコミットされているアセットのキーと値のペアのセットをもたらしてよい。台帳は、変更不可能な順序付けられたレコードをブロックに格納するために使用されるブロックチェーン(チェーンとも呼ばれる)を含む。台帳は、ブロックチェーンの現在の状態を維持する状態データベースも含む。
本出願は、ハッシュ・リンク・ブロックとして構造化されたトランザクション・ログであるチェーンを利用することができ、各ブロックはN個のトランザクションのシーケンスを含んでおり、Nは1以上である。ブロック・ヘッダーは、ブロックのトランザクションのハッシュ、および前のブロックのヘッダーのハッシュを含んでいる。このようにして、台帳のすべてのトランザクションが順序付けられ、暗号によって一緒にリンクされてよい。したがって、ハッシュ・リンクを壊さずに台帳データを改ざんすることはできない。直前に追加されたブロックチェーンのブロックのハッシュは、それ以前に発生したチェーン上のすべてのトランザクションを表し、すべてのピア・ノードが一貫性のある信頼できる状態にあることを保証できるようにする。チェーンは、ブロックチェーンのワークロードの追加専用という性質を効率的にサポートするピア・ノードのファイル・システム(すなわち、ローカル、取り付けられたストレージ、クラウドなど)に格納されてよい。
変更不可能な台帳の現在の状態は、チェーンのトランザクション・ログに含まれているすべてのキーの最新の値を表す。現在の状態は、チャネルに知られている最新のキーの値を表すため、世界状態と呼ばれることもある。チェーンコード呼び出しは、台帳の現在の状態のデータに対してトランザクションを実行する。それらのチェーンコードの相互作用を効率的にするために、最新のキーの値が状態データベースに格納されてよい。状態データベースは、単にチェーンのトランザクション・ログへのインデックス付きビューであってよく、したがって、いつでもチェーンから再生成され得る。状態データベースは、ピア・ノードの起動時に、トランザクションが受け取られる前に、自動的に回復されて(必要な場合は、生成されて)よい。
さまざまな実施形態によれば、(例えば、ブロックチェーン・ピア・ノードを含んでいる)署名者組織は、例えばクライアント、ピア・ノードなどによって、ブロックチェーン台帳にすでに格納されているデータ(例えば、データ・ブロックのハッシュ値など)に基づいてランダムに選択されてよい。組織のランダム化された選択は、ブロックチェーンのメンバーによって知られているプロセスを使用して実行され得る。残りのメンバー・ノードは、データの同じハッシュを使用して同じプロセスを実行することによって、署名者組織の選択のランダム化を検証することができ、このようにして、署名者組織の選択のランダム化の完全性を保証する。
本明細書において説明され、示された解決策の利点は、実行順序型であるより大きい許可型ブロックチェーン・ネットワーク内のトランザクションで格納される必要があるデータの量を減らすことを含む。特に、ピア組織のランダムなサブセットを選択することによって、それらのランダムに選択された組織に対して攻撃者が前もって攻撃を開始する可能性が非常に低くなる。したがって、安全な署名ポリシーに必要な組織が少なくなる。加えて、ピアをハッキングする攻撃者が、ランダムなピア選択プロセスの発生前に、そのプロセスを見つけ出さなければならず、これは非常に困難であるため、本明細書の解決策は、ピアのセキュリティを改善する。
一部の許可型ブロックチェーンは、実行順序の妥当性確認の枠組みに従い、この枠組みは、ブロックの妥当性確認時に、すべてのピアがトランザクションを実行する代わりに、トランザクションが、ネットワーク内のピア(例えば、署名者ノード)のサブセット上で投機的に実行され、データ内の予想される変更などの計算結果が、実行しているピアによって署名され、その後、それらの計算結果が順序付けノードに送信され、順序付けノードがトランザクションをブロックにまとめる。コミット時に、ブロックがピア・ノードに送信され、各ピア・ノードが、実行結果が適切に署名されている限り、それらの実行結果が正しいということを検証する。
そのような許可型ブロックチェーンの例はHyperledger Fabricであり、Hyperledger Fabricでは、クライアントがソフトウェア開発キット(SDK:software development kit)を使用し、ソフトウェア開発キットが、スマート・コントラクトの名前およびスマート・コントラクト・トランザクションへの入力を含んでいるトランザクション提案を、署名者ピア・ノードに送信する。署名者は、トランザクションを投機的に実行し、読み取り/書き込みセット(「署名」とも呼ばれる)に署名し、署名をクライアントに返送し、クライアントは、これらの署名を使用してトランザクションを構築する。次に、クライアントによって、トランザクションが順序付けサービスに送信され、順序付けサービスがトランザクションをブロックにまとめる。ブロックがピアに配布され、ピアは、実行結果がピアの許容できるサブセットによって署名されているかどうか、およびトランザクションの読み取りセットが投機的実行以降に変化していないかどうかを含む、トランザクション実行の側面の妥当性を確認する。前者は、「署名ポリシー」と呼ばれ、その役割は、ネットワークのセキュリティの前提に従って、場合によっては、トランザクションが拘束される取引関係も考慮して、トランザクションが十分なピア上で正しく実行されていることを強制することである。
すべての署名を実行する組織/ピア・ノードの信頼できるコアをブロックチェーン・ネットワークに含めることは、すべてのトランザクション実行の健全性を保証することができるが、他者に完全な信用が存在しないというブロックチェーン・ネットワークの極めて核心的な部分と矛盾する不合理な信用の前提を必要とする。
非限定的な例として、ブロックチェーン・ネットワークは、複数の管理領域内のピアによって取引相手間のトランザクションが署名されることを必要としてよい。会社Aが会社Bに送金する契約では、会社Aのピアおよび会社Bのピアだけでなく、会社Cなどの監査組織のピアよってシミュレートされ、署名されるトランザクションを含むことが標準的である。この例では、会社AおよびBは、これらの会社の残高が商取引に応じて確実に更新されるようにしたいであろう。監査人のピアは、多くの場合、システム内で循環する通貨の合計金額が同じままになるように含まれ、通貨の合計金額が同じでない場合、通貨が会社Aの口座から引き落とされないが、会社Bの口座が増えるというように、ピアAおよびBが悪意をもって合意した可能性がある。したがって、ネットワーク内のすべてのピアによってトランザクションが有効であると見なされるようにするために、したがってトランザクションの実行結果がコミット時に適用されるようにするために、対応する組織(A、B、およびC)の各々からのピアがトランザクションに署名することが、必要とされてよい。
この署名ポリシーは、取引プロセスに十分に結び付けられているが、一部の脅威モデル(特に、他の組織によってハッキングされる組織を考慮する脅威モデル)に適していないことがある。この例において、組織AまたはBが監査組織Cをハッキングする場合、ハッキング側が共謀し、Aの口座残高が変化しないまま、Bの口座残高が増えるようなトランザクション実行結果を構築し、組織Cの(セキュリティを侵害された)ピアに、この実行結果に署名させ、その後、このトランザクションが、ネットワーク内のすべてのピアによって有効と見なされるであろう。そのような目的で、トランザクションに署名する必要があるさまざまな組織を増やし、そうすることによって、不正なトランザクション実行に署名するために十分な(セキュリティを侵害された悪意のある)組織を獲得することをますます困難にするのが一般的である。
ブロックチェーン・ネットワークが拡大し、さらに多くの組織が参加するにつれて、セキュリティと性能の間のトレードオフが発生する。例えば、トランザクションが有効と見なされるために、異なる組織からのより多くの署名が必要になるほど、署名ポリシーがより安全になる。しかしそれは、コミット時に検証するべきより多くの署名が存在するということも意味し、より多くの署名は、公開鍵(およびHyperledger Fabricでは、x509証明書全体)がトランザクションに存在する必要もあるということも意味し、これによってトランザクションのサイズが増え、署名者ピア上の全体的実行負荷が増大する。これら3つの要因(より多くの署名検証、より大きいトランザクション、追加のトランザクション実行および署名)の各々は、システム性能に対する悪影響を引き起こす。さらに、ネットワーク内の組織が多いほど、攻撃者が組織をハッキングするか、または共謀するように組織に影響を与えるのがより容易になり(より多くの機会が存在し)、異なる組織からの必要な署名が少ないほど、攻撃者が攻撃を開始するのがより容易になる。
別の説得力のある使用事例は、互いに完全には信用していないが、それでも実行順序の枠組み内で正しいスマート・コントラクトの実行を保証したい多数の(数十個または100個にさえなる)組織を含むブロックチェーン・ネットワークを伴う事例である。この例の場合は、組織の大部分を含んでいる署名ポリシー、または実際には、組織の数においてやや線形である任意の署名ポリシーが、性能および拡張性の観点から、非実用的である。その結果、署名するために一定の数の組織(例えば、100個のうちの10個の組織)を必要とする署名ポリシーは、唯一の実行可能な解決策であるが、おそらく比較的少数の組織が、ハッキングされる可能性があるか、または共謀して、相互利益を促進するためにスマート・コントラクトのビジネス・ルールに従って実行されなかったトランザクションを偽造することができ、したがって、ネットワークのデータの完全性を損なう。
そのような攻撃の重要なイネーブラは、トランザクション提案を(署名のために)ピアにサブミットするクライアントが、署名者の選択において完全な自由を有しており、したがってクライアントは、概要が示された攻撃の共犯者として積極的役割を果たすことができるという事実である。コミット・ピアが、署名ピアのランダムなサブセットを選択することをクライアントに強制することができれば、この懸念は軽減され得る。さらに、ブロックチェーンは、クライアント自身によって選択されるランダム性に依存することができず、そうでなければ、クライアントは、選択が望ましい破損したピアを生み出すまで、単に(ランダムな)選択を繰り返すことができる。代わりにランダム性は、クライアントが完全には制御しない(その後、検証されることができる)ソースから生じなければならない。
実施形態例は、ブロックチェーンにすでに格納されている既知/検証可能なデータに対して実行する既知のアルゴリズムに基づいてネットワークからピア組織をランダムに選択することをクライアント(またはピア・ノードなどのその他の実体)に要求することによって、ランダム性を署名者ピア組織の選択プロセスに導入する。ブロックチェーン・ネットワーク内の組織の数に基づいて、一意の識別子(数値)が組織の各々に割り当てられ得る。ブロックチェーン・ネットワークから署名者組織のサブセットを選択するために、クライアントは、以前のブロックのグループからのブロック・ハッシュ値を使用することを要求されてよい。ブロック・ハッシュは、乱数(例えば、2進数)を生成するために使用され得る。2進乱数が、ビット値のセグメントにセグメント化されてよい。第1のビット値が、2進乱数からスライスされ、10進値に変換されてよく、この10進値が、組織の一意の識別子に直接的または間接的にマッピングされてよい。十分な署名者組織がランダムに決定されるまで、このプロセスが繰り返され得る(別のスライスが2進乱数から取得される)。次に、クライアントは、トランザクションの署名を実行するために、これらの署名者ノードに依存してよい。
本明細書の解決策において説明される別の利点は、基本的に、ブロック・ハッシュとして使用され得るブロックチェーン上のブロック(直前に格納されたブロック)のサブセットを指定する、ブロック間隔の使用である。クライアントは、ブロックチェーン台帳の現在の高さを取り出し、ブロックチェーン台帳の現在の高さをブロック間隔値で割ることに基づいて、完全性値を生成する。得られた完全性値は、トランザクションと共に格納されてよく、クライアントが、ブロックチェーン台帳に直前に格納されたブロックのうちから、ブロック間隔によって示されたブロックを選択したということを検証するために使用されてよい。
図1は、実施形態例に従って、トランザクションの署名のためのピア・ノードをランダムに選択するためのコンピューティング環境100を示している。図1を参照すると、コンピューティング環境100は、N個のピア・ノード110を含む許可型ブロックチェーンを含んでいる。この例では、N個のピア・ノード110のいずれかが、トランザクションの署名者として機能することができる。各ピアは、それ自身の組織(図に示されていない)に参加し、例えば、ピア1が組織1であり、ピア2が組織2である、などとなる。さまざまな実施形態によれば、クライアント120は、ピア組織のサブセットをランダムに選択するように強制されてよく、その後、N個のピア・ノード110のグループからのピア・ノードが、署名を実行する。さらに、どのピア組織を選択するべきかをランダムに決定するプロセスは、ブロック・ハッシュ値、または図4A~4Cの例で説明されるような複数のブロック・ハッシュ値などの、ブロックチェーンにすでに格納されている検証可能なデータに基づいてよい。図1の例では、クライアント120が、N個のピア・ノード110のうちからピア2、3、5、および8をランダムに選択している。
一部の実施形態では、ランダムな選択を実行するための論理は、クライアント120のソフトウェア開発キット(SDK)に構築されてよく、ピア・ノードまたは順序付けノードから最新のブロック(または直前に格納されたブロックのサブセットのうちのブロック)を取得し、その後、この情報を使用して、組織のランダム化された選択を計算する。別の例として、ランダムな選択を実行するための論理が、SDKが問い合わせることができる信頼できるピアに構築されてよく、クライアントのために選択を計算するサービスとして機能する。さらに、トランザクション(およびそれに対応するブロック)をブロックチェーンにコミットするときに、N個のピア・ノード110もランダムな選択プロセスの妥当性を確認できるように、N個のピア・ノード110の各々が、ノード内に構築されたランダムな選択プロセスを含んでよい。
例えば、SHA-256、MD5などのハッシュ関数によって、ブロック・ハッシュが生成されてよい。得られたハッシュ値は、128ビット、256ビット、512ビットなどの特定のサイズを有する文字列である。さまざまな実施形態によれば、疑似乱数発生器(PRNG:pseudo-random number generator)などによって2進乱数を生成するために、ハッシュ値が使用されてよい。得られた2進乱数は、ブロック・ハッシュと同じ数のビットを含んでよいが、文字と数字の組み合わせの代わりに、乱数は2進数1および0のみを含んでよい。64ビットのハッシュ値の例を以下に示す。
Hash =as7r430pohvb21msw98210pplhnmbn30431trewq9820pksgreder084321abyx09
ここで、ブロック・ハッシュは、ハッシュ値を2進乱数に変換するPRNGへのシード値の役割を果たしてよい。例えば、PRNGは、一連の2進乱数の特性に近い特性を有する一連の2進数を生成するためのアルゴリズムを含んでよい。PRNGによって生成されるシーケンスは、(真にランダムな値を含んでよい)PRNGのシードと呼ばれる初期値(ブロック・ハッシュ)によって完全に決定されるため、真にランダムではない。上記のハッシュから作成された2進数のPRNGの例を以下に示す。
PRNG =1100101000101110100010110101001011001010010010010101001010001
ブロック・ハッシュから作成されたPRNGの値に基づいて、ランダムなピア選択プロセスが実行されてよい。例えば、ネットワークに含まれているピア組織の数に基づいて、N個のピア組織110のうちの各ピア組織に一意の識別子が割り当てられてよい。一意の識別子は、数値(10進数など)であってよい。例えば、N個の組織の各々に、0~N-1の一意の識別子が割り当てられ得る。一方、データ・セグメント/チャンクが、2進数形式であるPRNGから除去され、10進数の形態に変換され得る。データ・セグメントのサイズは、log2(N)ビット、またはf(x)=2xの逆関数に対応する2の基数での対数であってよい。例えば、ピア組織の数が20(すなわち、N=20)である場合、各ピア組織に、0~19の一意の値が割り当てられてよく、データ・セグメントのサイズはlog2(20)=4.32であってよく、この値が5ビットに切り上げられる。
したがって、この例では10001である最初の5ビットが、PRNGから除去され、17である10進数に変換されてよい。この値は、ピア組織の一意の識別子18に対応する。システムが5つの署名者組織を選択する必要がある場合、追加のビット・セグメントを2進乱数から取得し、このプロセスをビット・セグメントに対して実行することによって、5つの異なる一意の識別子が決定されるまで、このプロセスが繰り返され得る。十分な組織がランダムに識別される前に、2進乱数がビットを使い果たした場合、ブロック・ハッシュが再びハッシュされてプロセスが繰り返されてよく、または別のブロック・ハッシュが選択されてプロセスが繰り返されてよい。
強制されたランダムなピア選択が、多数の組織を含むブロックチェーン・ネットワークなどのブロックチェーン・ネットワークの署名ポリシーに含まれてよい。その結果、署名ポリシーが満たされるための十分な組織をハッキングすることが、実現困難になる。署名ポリシーは、組織のいずれかの特定のセットに制限されず、代わりに、署名ポリシーによって許容できると見なされる、同じトランザクション実行に署名する組織の任意の十分に大きいサブセットを含んでよい。本明細書に記載された技術およびメカニズムが、組織の選択がより狭い他のモデルに適用され得るということも、理解されるべきである。
さらに、N個のピア組織の各々は、ランダムな署名者ノード選択プロセスの妥当性を確認することができる。言い換えると、コミット・ピアは、署名者ノードが実際にランダムであるということを検証してよい。乱数を生成するためのシードとして使用されるハッシュが、ブロックチェーンに格納されたブロック・ハッシュから決定されるため、ブロックチェーン・ネットワーク内のピア・ノードは、同じブロック・ハッシュを取り出し、同じ2進乱数の生成を実行することができる。次に、ピアの各々は、ブロック・ハッシュをセグメント化し、セグメントを一意の組織IDにマッピングし、同じ組織IDがクライアントによって選択されることを保証することができ、それによって、2進乱数から得られた対応する組織に基づいて正しい署名者ノードが選択されたということの妥当性を確認する。
例えば、Nが組織の数であり、K<Nが、署名ポリシーが満たされるためにトランザクションに署名しなければならない組織の数であるとする。ネットワーク・ピアによって妥当性が確認され得るトランザクションを偽造するために、攻撃者は、N個の組織のうちのK個をハッキング/説得する必要があり、つまり攻撃者は、任意のK個の組織を選択し、それらをターゲットにすることができる。しかし、ランダムに選択されたK個の組織を急にハッキングすることは、攻撃者にとって明らかに極めて困難である。本明細書に記載された署名ポリシーは、(選択されたn個の組織のうちの任意のk個を選択するのとは対照的に)ランダムに選択されたK個の組織の制限された組み合わせのみを選択することを攻撃者に強制し、下でさらに説明されるように、組織の組み合わせは、T個ごとのブロックの後に、ブロックチェーン自体の内容に従って絶えず(ランダムに)変化する。例えば、すべての連続するT個のブロックのシーケンスは、N個の組織のうちのK個の選択に対して、少数の組み合わせを定義するために使用されてよく、トランザクションが有効であると見なされるためには、K個の組織の組み合わせが、最後のT個のブロック内で検出されるように、それらの組み合わせによって、トランザクションが署名される必要がある。
「最後のT個のブロック」は、本明細書では、ターゲット間隔制約(target interval constraint)と呼ばれてよく、Tはブロック間隔値である。例えば、署名ポリシーは、トランザクションが有効に署名されるために、ブロックチェーンに格納された最後のT個のブロックからのブロック・ハッシュに基づいて、ランダムなピア選択プロセスが実行されなければならないという制約を含んでよい。これを検証するために、クライアントまたはピアは、台帳の現在の高さ(H)をブロック間隔(T)で割った値などの完全性値をトランザクションに含めてよい。次に、妥当性確認時に、コミット・ピアが、現在の高さ(H)をTで割った(最も近い最小の整数に切り上げた)値がその数値に等しいかどうかをチェックし、等しくない場合、トランザクションが無効であると見なされる。この制約は、長過ぎるトランザクションが、未来のブロックに含めるためにサブミットされる前に、クライアントによって保持されることができないということを指示し、基本的に、トランザクションが、ブロックチェーンがT個のブロックよりさらに進んだ後のブロックに入った場合、高さHでシミュレートされたトランザクションを無効にする。この制約の使用は、セキュリティの保証を大幅に向上させることができる。
さまざまな実施形態によれば、本明細書で提供された変更に基づいて、攻撃者がトランザクションを偽造しようとした場合、攻撃者は、ランダムに選択された組織を引き継ぐことを強制され、この引継ぎは、それに要する時間のため、達成不可能であることがある。ここで、新しいT個のブロックが、すでに形成されていてよく、偽造されたトランザクションが古い(T個のブロックが形成される前の)組織の署名から形成された場合、トランザクションの署名者のセットが、最後のT個のブロックによって生じた組織のいずれかの組み合わせにおいて検出されないため、そのトランザクションは、コミット時に無効化される。別の選択肢として、攻撃者は、前もって選択された組織を引き継ぎ、その有効として事前に準備された署名者のセットからの署名を宣言するT個のブロックが形成されるのを待機する必要があってよい。しかしこれは、発生するのに長い時間を要するか、または全く発生しないことがある。これは、ブロックチェーンの高さをブロック間隔値Tで割った値に対応するトランザクションの完全性値をブロックに記録することによっても妨げられる。これによって、攻撃者は、事前に準備された署名者のセットを引き起こすT個のブロックの正しい間隔を推測することが必要になる。しかし、他の(悪意のない)関係者がトランザクションをブロックチェーンにサブミットしている場合、T個のブロックの間隔を事前に予測することは、ランダムな入力(本物の関係者によって選択され、ランダム性を含んでいるトランザクション)に依存するため、不可能である。
実施形態例は、256ビットを出力する安全なハッシュ関数を使用してブロック・ハッシュを生成し(この技術は、さまざまな長さのハッシュ関数に適合するように変更され得る)、最後のT個の連続するブロックのハッシュをH0、H1、H2、...HT-1として示し、署名者の組織をO0、O1、O2、...、ON-1として示してよい。一意の組織IDをエンコードするために、システムはlog2(N)ビットを使用してよく、K個の組織をエンコードするために、システムはlog2(N)ビットのうちの少なくともK個の数値を取得してよい。最後のT個の連続するブロックのハッシュが、次の方法でK個の組織の第1の組み合わせを定義する。システムは、組織のIDを表すために、数値の空のセットSを初期化し、ブロック・ハッシュ(HT-1など)の最下位のlog2(N)ビットを受け取り、それをB0として示し、B0の数値表現をSに追加する。次にシステムは、ブロック・ハッシュの次のlog2(N)ビットを受け取り、それをB1として示し、B1がSに存在する場合、システムはB1を破棄することができ、そうでない場合、システムはB1をSに追加することができる。その後システムは、プロセスを続行し、K個の異なるIDを検出するか、またはブロック・ハッシュHT-1内のビットを使い果たすまで、ブロック・ハッシュの次のlog2(N)ビットに移動してよい。システムが十分な異なるIDを保有していない場合、システムは、ブロック・ハッシュを再びハッシュするか、または以前のブロック・ハッシュを取り出し、さらに多くの一意のIDの取り出しを開始することができる。
ブロックチェーン・ネットワークが100個のピア組織をネットワークに含み、10個の組織からの署名が必要とされる例では、N=100およびK=10である。さらに、ターゲット間隔制約が、ブロック・ハッシュを最後の12個のブロックからであるように制限し、ブロック間隔値がT=12である。この例では、最後の12個のブロックは、組織の選択を指示し、つまりトランザクションごとに、署名用のK個の組織の識別に使用するために、最大でT個のブロック・ハッシュが存在する。例えば、ブロックチェーンは、毎秒2000トランザクションのスループットを維持してよい。この例では、アプリケーションは、トランザクションに署名するために約3秒を有し、このトランザクションを次のブロックに含めるために送信する。選択するための100個の識別子および8ビットの32個の間隔が存在するため、単一のブロック・ハッシュが10個の異なる数値を含んでいない(つまり、256ビットのハッシュ・サイズを使用する場合、32個の8ビットのシーケンスすべてが、全体で10個未満の数値を含む)確率は極めて小さい。さらに、ブロック・ハッシュがK個未満の識別子を生み出す場合(これは、前述したように低い確率で発生する)、システムは、ブロックのハッシュにもう一度ハッシュを適用してから、このハッシュを使用し続けてよい。代替として、ブロック・ハッシュをシードとして疑似乱数発生器(PRNG)を使用して、数値の導出が実行され得る。
図2Aは、実施形態例に従って、ブロックチェーン・アーキテクチャの構成200を示している。図2Aを参照すると、ブロックチェーン・アーキテクチャ200は、特定のブロックチェーン要素(例えば、ブロックチェーン・ノードのグループ202)を含んでよい。ブロックチェーン・ノード202は、1つまたは複数のノード204~210を含んでよい(単に例として、これらの4つのノードが示されている)。これらのノードは、ブロックチェーン・トランザクションの追加および妥当性確認プロセス(合意)などの、複数の活動に参加する。ブロックチェーン・ノード204~210のうちの1つまたは複数は、署名ポリシーに基づいてトランザクションに署名してよく、アーキテクチャ200内のすべてのブロックチェーン・ノードのための順序付けサービスを提供してよい。ブロックチェーン・ノードは、ブロックチェーン認証を開始し、ブロックチェーン層216に格納されたブロックチェーンの変更不可能な台帳に書き込もうとしてよく、この書き込みのコピーが、基盤になる物理的インフラストラクチャ214にも格納されてよい。ブロックチェーンの構成は、格納されたプログラム/アプリケーション・コード220(例えば、チェーンコード、スマート・コントラクトなど)にアクセスして実行するためにアプリケーション・プログラミング・インターフェイス(API:application programming interfaces)222にリンクされた1つまたは複数のアプリケーション224を含んでよく、プログラム/アプリケーション・コード220は、参加者によって要求されてカスタマイズされた構成に従って作成することができ、それら自身の状態を維持し、それら自身のアセットを制御し、外部の情報を受信することができる。ブロックチェーンの構成は、トランザクションとしてデプロイし、分散型台帳に追加することによって、すべてのブロックチェーン・ノード204~210にインストールすることができる。
ブロックチェーン・ベースまたはプラットフォーム212は、ブロックチェーン・データのさまざまな層と、サービス(例えば、暗号信用サービス、仮想実行環境など)と、新しいトランザクションを受信して格納し、データ・エントリにアクセスしようとしている監査人にアクセスを提供するために使用されてよい、基盤になる物理的コンピュータ・インフラストラクチャとを含んでよい。ブロックチェーン層216は、プログラム・コードを処理し、物理的インフラストラクチャ214に参加させるために必要な仮想実行環境へのアクセスを提供するインターフェイスを公開してよい。暗号信用サービス218は、アセット交換トランザクションなどのトランザクションを検証し、情報をプライベートに保つために使用されてよい。
図2Aのブロックチェーン・アーキテクチャの構成は、ブロックチェーン・プラットフォーム212によって公開された1つまたは複数のインターフェイスおよび提供されたサービスを介して、プログラム/アプリケーション・コード220を処理および実行してよい。コード220は、ブロックチェーンのアセットを制御してよい。例えば、コード220は、データを格納および転送することができ、スマート・コントラクトおよび条件を含む関連するチェーンコードまたは実行の対象になるその他のコード要素の形態で、ノード204~210によって実行されてよい。非限定的な例として、リマインダ、更新、または変更、更新の対象になるその他の通知、あるいはその組み合わせなどを実行するために、スマート・コントラクトが作成されてよい。スマート・コントラクト自体は、権限付与およびアクセスの要件ならびに台帳の使用に関連付けられたルールを識別するために使用され得る。例えば、書き込みデータ228を含んでいるブロックチェーンに書き込まれる処理結果を作成するために、読み取りデータ226が、ブロックチェーン層216に含まれている1つまたは複数の処理実体(例えば、仮想マシン)によって処理されてよい。物理的インフラストラクチャ214は、本明細書に記載されたデータまたは情報のいずれかを取り出すために利用されてよい。
高水準のアプリケーションおよびプログラミング言語を使用して、スマート・コントラクトが作成され、その後、ブロックチェーン内のブロックに書き込まれてよい。スマート・コントラクトは、ブロックチェーン(例えば、ブロックチェーン・ピアの分散ネットワーク)への登録、格納、または複製、あるいはその組み合わせが実行される実行可能コードを含んでよい。トランザクションは、スマート・コントラクトが満たされていることに関連付けられた条件に応答して実行され得る、スマート・コントラクト・コードの実行である。スマート・コントラクトの実行は、デジタル・ブロックチェーン台帳の状態に対する信頼できる変更をトリガーしてよい。スマート・コントラクトの実行によって引き起こされるブロックチェーン台帳に対する変更は、1つまたは複数の合意プロトコルを介して、ブロックチェーン・ピアの分散ネットワーク全体に自動的に複製されてよい。
スマート・コントラクトは、データをキーと値のペアの形式でブロックチェーンに書き込んでよい。さらに、スマート・コントラクト・コードは、ブロックチェーンに格納された値を読み取り、それらをアプリケーションの動作において使用することができる。スマート・コントラクト・コードは、さまざまな論理演算の出力をブロックチェーンに書き込むことができる。このコードは、仮想マシンまたはその他のコンピューティング・プラットフォーム内の一時的データ構造を作成するために使用されてよい。ブロックチェーンに書き込まれたデータは、パブリックになること、またはプライベートとして暗号化されて維持されること、あるいはその両方が行われ得る。スマート・コントラクトによって使用/生成される一時的データは、提供された実行環境によってメモリ内に保持され、ブロックチェーンに必要なデータが識別された後に削除される。
チェーンコードは、追加機能と共に、スマート・コントラクトのコード解釈を含んでよい。本明細書に記載されているように、チェーンコードは、コンピューティング・ネットワーク上にデプロイされるプログラム・コードであってよく、合意プロセス中に、チェーン・バリデータによって一緒に実行されて妥当性を確認される。チェーンコードは、ハッシュを受信し、以前に格納された特徴抽出機能の使用によって作成されたデータ・テンプレートに関連付けられたハッシュをブロックチェーンから取り出す。ハッシュ識別子のハッシュと、格納された識別子テンプレート・データから作成されたハッシュが一致する場合、チェーンコードは、権限付与キーを、要求されたサービスに送信する。チェーンコードは、暗号の詳細に関連付けられたデータをブロックチェーンに書き込んでよい。
図2Bは、実施形態例に従って、ブロックチェーンのノード間のブロックチェーン・トランザクション・フロー250の例を示している。図2Bを参照すると、トランザクション・フローは、アプリケーション・クライアント・ノード260によって1つまたは複数の署名ピア・ノード(例えば、ピア・ノード281および283)に送信されるトランザクション提案291を含んでよい。さまざまな実施形態によれば、アプリケーション・クライアント・ノード260は、本明細書の例で説明されたように、(例えば、ピア・ノードなどを介して)ブロックチェーンのブロックから取り出されたハッシュ値に基づいて、署名ピア組織をランダムに選択してよい。例えば、ブロック・ハッシュが2進乱数に変換され得る。2進数は、2進乱数からスライスされ、署名ピア・ノードを識別するために使用される、ビット・セグメントに分割され得る。アプリケーション・クライアント・ノード260は、K個の署名者ノードを識別し、トランザクション提案291を署名ピア・ノードに送信してよい。署名ピア・ノードは、クライアントの署名を検証し、チェーンコード関数を実行してトランザクションを開始してよい。出力は、チェーンコードの結果、チェーンコードに読み取られたキー/値のバージョンのセット(読み取りセット)、およびチェーンコードに書き込まれたキー/値のセット(書き込みセット)を含んでよい。提案応答292が、承認されている場合は署名と共に、クライアント260に返送される。クライアント260は、署名をトランザクションのペイロード293にまとめ、合意のために順序付けサービス・ノード284にブロードキャストする。その後、順序付けサービス・ノード284は、トランザクションをブロックに順序付け、それらのブロックをチャネル上のすべてのピア281~283に配布する。ブロックチェーンへのコミットの前に、各ピア281~283は、署名者ピア・ノード選択プロセスが実際にランダムであるということを検証し、トランザクションの妥当性を確認してよい。例えば、ピアは、同じブロック・ハッシュに基づいてそれら自身のランダムな選択プロセスを実行し、正しい署名者ノードが選択されたことを検証し、署名ポリシーもチェックして、指定されたピアの正しい割り当てが結果に署名し、トランザクションのペイロード293に対する署名を認証したことを確認してよい。
図2Bを再び参照すると、290で、クライアント・ノード260が、ブロックチェーンに格納されたブロックのブロック・ハッシュに基づいて、K個の署名者ピア組織(例えば、ピア・ノード281およびピア・ノード283)をランダムに選択する。クライアント・ノード260は、要求を構築し、290で署名者としてランダムに選択された署名者ピア・ノード281および283に送信することによって、トランザクション291を開始する。クライアント260は、サポートされているソフトウェア開発キット(SDK:software development kit)を利用するアプリケーションを含んでよく、このアプリケーションは、使用可能なAPIを利用してトランザクション提案を生成する。提案は、データが台帳から読み取られること、または台帳に書き込まれること(すなわち、アセットの新しいキーと値のペアを書き込むこと)、あるいはその両方を実行できるように、チェーンコード関数を呼び出すことの要求である。SDKは、トランザクション提案を、適切に設計された形式(例えば、遠隔手続き呼び出し(RPC:remote procedure call)を経由するプロトコル・バッファ)にパッケージ化するためのシムとして機能し、クライアントの暗号認証情報を受け取って、トランザクション提案の一意の署名を生成してよい。
それに応じて、署名ピア・ノード281および283は、(a)トランザクション提案が適切に形成されていること、(b)トランザクションが過去にすでにサブミットされていないこと(リプレイアタック保護)、(c)署名が有効であること、および(d)そのチャネルに対する提案された操作を実行するための適切な権限がサブミッター(例では、クライアント260)に与えられていることを検証してよい。署名ピア・ノード281および283は、トランザクション提案の入力を、呼び出されるチェーンコード関数への引数として受け取ってよい。その後、チェーンコードが、現在の状態データベースに対して実行され、応答値、読み取りセット、および書き込みセットを含んでいるトランザクション結果を生成する。ただしこの時点では、台帳に対する更新は行われない。292で、値のセットが、署名ピア・ノード281および283それぞれの署名と共に、提案応答292としてクライアント260のSDKに返され、このSDKが、アプリケーションが使用するためのペイロードを構文解析する。
それに応じて、クライアント260のアプリケーションが、署名ピアの署名を検査/検証し、提案応答を比較して、提案応答が同じであるかどうかを判定する。チェーンコードが単に台帳に問い合わせた場合、アプリケーションは問い合わせ応答を検査し、通常は、トランザクションを順序付けノード・サービス284にサブミットしない。クライアント・アプリケーションが、台帳を更新するためにトランザクションを順序付けノード・サービス284にサブミットしようとしている場合、アプリケーションは、サブミットする前に、指定された署名ポリシーが満たされているかどうか(すなわち、トランザクションに必要なすべてのピア・ノードがトランザクションに署名したかどうか)を判定する。ここで、クライアントは、トランザクションの複数の関係者のうちの1つのみを含んでよい。アーキテクチャは、アプリケーションが応答を検査しないことを選択するか、またはその他の方法で署名されていないトランザクションを転送する場合でも、署名ポリシーが、ピアによってまだ実施され、コミット妥当性確認フェーズで維持されるようにする。
検査に成功した後に、ステップ293で、クライアント260が、署名をトランザクションにまとめ、順序付けノード284へのトランザクション・メッセージ内でトランザクション提案およびトランザクション応答をブロードキャストする。トランザクションは、読み取り/書き込みセット、ランダムに選択された署名ピアの署名、およびチャネルIDを含んでよい。順序付けノード284は、その動作を実行するために、トランザクションの内容全体を検査する必要はなく、代わりに順序付けノード284は、単に、トランザクションをネットワーク内のすべてのチャネルから受信して、チャネル別に経時的に順序付けし、チャネルごとにトランザクションのブロックを作成してよい。
トランザクションのブロックは、順序付けノード284からチャネル上のすべてのピア・ノード281~283に配信される。いずれかの署名ポリシーが満たされていることを保証するため、および読み取りセットがトランザクションの実行によって生成されて以来、読み取りセットの変数に関して台帳の状態に対する変更がないことを保証するために、ブロック内のトランザクション294の妥当性が確認される。ブロック内のトランザクションは、有効または無効であるとしてタグ付けされる。
さまざまな実施形態によれば、ステップ295で、ピア・ノード281~283の各々が、クライアント・ノード260によって実行されたランダムな署名者組織選択プロセスを検証することができる。例えば、ピア・ノード281~283の各々は、ブロックに含まれているトランザクションが、290からのランダムな選択に従ってピアによってシミュレートされ、署名されたかどうかをチェックすることができる。さらに、ランダムな選択の検証が成功した場合、ステップ296で、各ピア・ノード281~283は、ブロックをチャネルのチェーンに追加し、有効なトランザクションごとに、書き込みセットが現在の状態データベースにコミットされる。トランザクション(呼び出し)が変更不可能なようにチェーンに追加されたことをクライアント・アプリケーションに通知するため、およびトランザクションの妥当性が確認されたか、または無効にされたかを通知するために、イベントが発行される。
図3Aは許可型ブロックチェーン・ネットワーク300の例を示しており、許可型ブロックチェーン・ネットワーク300は、分散型の非集中的ピアツーピア・アーキテクチャを特徴とする。この例では、ブロックチェーン・ユーザ302は、許可型ブロックチェーン304に対するトランザクションを開始してよい。この例では、トランザクションは、デプロイ、呼び出し、または問い合わせであることができ、SDKを利用するクライアント側のアプリケーションを介して、APIを介して直接的に、などによって、発行されてよい。ネットワークは、監査人などのレギュレータ306へのアクセスを提供してよい。ブロックチェーン・ネットワーク・オペレータ308は、レギュレータ306を「監査人」として登録し、ブロックチェーン・ユーザ302を「クライアント」として登録するなど、メンバーの許可を管理する。監査人を、台帳への問い合わせのみに制限することができ、一方、特定の種類のチェーンコードのデプロイ、呼び出し、および問い合わせを行うための権限をクライアントに与えることができる。
ブロックチェーン開発者310は、チェーンコードおよびクライアント側のアプリケーションを書き込むことができる。ブロックチェーン開発者310は、インターフェイスを介して、チェーンコードをネットワークに直接デプロイすることができる。従来のデータ・ソース312からの認証情報をチェーンコードに含めるために、開発者310は、帯域外接続を使用してデータにアクセスすることができる。この例では、ブロックチェーン・ユーザ302は、ピア・ノード314を介して許可型ブロックチェーン304に接続する。ピア・ノード314は、いずれかのトランザクションを開始する前に、ユーザの登録およびトランザクションの証明書を、ユーザの役割および許可を管理する認証機関316から取得する。場合によっては、ブロックチェーン・ユーザは、許可型ブロックチェーン304上でトランザクションを実行するために、それらのデジタル証明書を所有しなければならない。一方、チェーンコードを利用しようとしているユーザは、従来のデータ・ソース312上のそれらのユーザの認証情報を検証することが必要になることがある。ユーザの権限付与を確認するために、チェーンコードは、従来の処理プラットフォーム318を介して、このデータへの帯域外接続を使用することができる。
図3Bは許可型ブロックチェーン・ネットワーク320の別の例を示しており、許可型ブロックチェーン・ネットワーク320は、分散型の非集中的ピアツーピア・アーキテクチャを特徴とする。この例では、ブロックチェーン・ユーザ322は、トランザクションを許可型ブロックチェーン324にサブミットしてよい。この例では、トランザクションは、デプロイ、呼び出し、または問い合わせであることができ、SDKを利用するクライアント側のアプリケーションを介して、APIを介して直接的に、などによって、発行されてよい。ネットワークは、監査人などのレギュレータ326へのアクセスを提供してよい。ブロックチェーン・ネットワーク・オペレータ328は、レギュレータ326を「監査人」として登録し、ブロックチェーン・ユーザ322を「クライアント」として登録するなど、メンバーの許可を管理する。監査人を、台帳への問い合わせのみに制限することができ、一方、特定の種類のチェーンコードのデプロイ、呼び出し、および問い合わせを行うための権限をクライアントに与えることができる。
ブロックチェーン開発者330は、チェーンコードおよびクライアント側のアプリケーションを書き込む。ブロックチェーン開発者330は、インターフェイスを介して、チェーンコードをネットワークに直接デプロイすることができる。従来のデータ・ソース332からの認証情報をチェーンコードに含めるために、開発者330は、帯域外接続を使用してデータにアクセスすることができる。この例では、ブロックチェーン・ユーザ322は、ピア・ノード334を介してネットワークに接続する。ピア・ノード334は、いずれかのトランザクションを開始する前に、ユーザの登録およびトランザクションの証明書を認証機関336から取得する。場合によっては、ブロックチェーン・ユーザは、許可型ブロックチェーン324上でトランザクションを実行するために、それらのデジタル証明書を所有しなければならない。一方、チェーンコードを利用しようとしているユーザは、従来のデータ・ソース332上のそれらのユーザの認証情報を検証することが必要になることがある。ユーザの権限付与を確認するために、チェーンコードは、従来の処理プラットフォーム338を介して、このデータへの帯域外接続を使用することができる。
一部の実施形態では、本明細書におけるブロックチェーンは、許可なしブロックチェーンであってよい。参加するために許可を必要とする許可型ブロックチェーンとは対照的に、誰でも許可なしブロックチェーンに参加することができる。例えばユーザは、許可なしブロックチェーンに参加するために、個人のアドレスを作成し、トランザクションをサブミットすることによって、したがってエントリを台帳に追加することによって、ネットワークとの情報のやりとりを開始してよい。さらに、すべての関係者が、ノードをシステム上で実行すること、およびトランザクションの検証に役立つようにマイニング・プロトコルを採用することを選択できる。
図3Cは、複数のノード354を含んでいる許可なしブロックチェーン352によって処理されているトランザクションのプロセス350を示している。送信側356は、許可なしブロックチェーン352を介して、支払いまたはその他の形態の値(例えば、証書、医療記録、契約、商品、サービス、またはデジタル・レコードにカプセル化され得る任意のその他のアセット)を受信側358に送信することを望んでいる。1つの実施形態では、送信側デバイス356および受信側デバイス358の各々は、トランザクション・パラメータのユーザ・インターフェイス制御および表示を提供する(ブロックチェーン352に関連付けられた)デジタル・ウォレットを有してよい。それに応じて、トランザクションがブロックチェーン352全体のノード354にブロードキャストされる。ブロックチェーン352のネットワーク・パラメータに応じて、ノードが、許可なしブロックチェーン352の作成者によって確立されたルール(事前に定義されるか、または動的に割り当てられてよい)に基づいてトランザクションを検証する(360)。例えば、この検証は、関わっている関係者の識別情報を検証することなどを含んでよい。トランザクションは、直ちに検証されてよく、またはトランザクションは、他のトランザクションと共にキューに配置されてよく、ノード354は、ネットワーク・ルールのセットに基づいてトランザクションが有効であるかどうかを判定する。
構造362内で、有効なトランザクションがブロック内に形成され、ロック(ハッシュ)を使用して封印される。このプロセスは、マイニング・ノードによって、ノード354間で実行されてよい。マイニング・ノードは、特に、許可なしブロックチェーン352のブロックをマイニングして作成するために、追加のソフトウェアを利用してよい。各ブロックは、ネットワークによって合意されたアルゴリズムを使用して作成されたハッシュ(例えば、256ビットの数値など)によって識別されてよい。各ブロックは、ヘッダー、チェーン内の前のブロックのヘッダーのハッシュへのポインタまたは参照、および有効なトランザクションのグループを含んでよい。前のブロックのハッシュへの参照は、ブロックの安全な独立したチェーンの作成に関連付けられる。
ブロックをブロックチェーンに追加できるようになる前に、ブロックの妥当性が確認されなければならない。許可なしブロックチェーン352の妥当性確認は、ブロックのヘッダーから得られたパズルに対する解であるプルーフ・オブ・ワーク(PoW)を含んでよい。図3Cの例には示されていないが、ブロックの妥当性確認ための別のプロセスは、プルーフ・オブ・ステークである。アルゴリズムが、数学問題を解くマイナーに報酬を与えるプルーフ・オブ・ワークとは異なり、プルーフ・オブ・ステークでは、ウェルス(「ステーク」としても定義される)に応じて、新しいブロックの作成者が確定的方法で選択される。その後、選択されたノードによって、同様の証明が実行される。
マイニング364で、ノードは、解がネットワーク全体にわたるターゲットを満たすまで、1つの変数に対して漸進的な変更を行うことによって、ブロックを解こうとする。これによってPoWを作成し、それによって、正しい答えを保証する。言い換えると、可能性のある解は、計算リソースが問題を解くことにおいて消耗されたということを証明しなければならない。一部の種類の許可なしブロックチェーンでは、マイナーに、ブロックを正しくマイニングしたことに対する報酬として価値(例えば、コインなど)が与えられることがある。
ここで、攻撃者が、1つのブロックの変更を受け入れるために、その後のすべてのブロックを変更しなければならないため、PoWプロセスは、ブロックの変更と共に、ブロックチェーンの変更を極めて困難にする。さらに、新しいブロックがマイニングされるにつれて、ブロックを変更することの困難さが増大し、その後のブロックの数が増加する。配布366で、正常に妥当性が確認されたブロックが、許可なしブロックチェーン352全体に配布され、すべてのノード354が、そのブロックを、許可なしブロックチェーン352の監査可能な台帳であるマジョリティ・チェーン(majority chain)に追加する。さらに、送信側356によってサブミットされたトランザクションにおける価値が、受信側デバイス358のデジタル・ウォレットに預け入れられるか、またはその他の方法で転送される。
図4Aは、実施形態例に従って、署名者組織をランダムに選択することにおいて使用するために、ブロックチェーン410からハッシュを取り出すプロセス400Aを示している。図4Aを参照すると、ブロックチェーン410上の格納のためにトランザクションをサブミットしたいクライアント420によって、ランダムなピア選択プロセスが実行される。クライアント420の代わりに、ピア・ノードまたはその他のサービスによってランダムな組織選択プロセスが実行されてよいということも、理解されるべきである。ここで、クライアント420は、1つまたは複数のブロック(およびブロック・ハッシュ)を、ブロックチェーン410を管理するブロックチェーン・ネットワークのピア・ノード(図示されていない)または順序付けサービス(図示されていない)から取り出してよい。ランダムなピア選択プロセスは、ブロックチェーン410上のブロックのサブセットを指定する制約を含んでよく、このサブセットからブロック・ハッシュが取り出されてよい。言い換えると、この制約(本明細書では、ターゲット間隔制約とも呼ばれる)は、ブロックチェーンに直前に追加された既定の数のブロック(ブロック間隔値412)を指定してよい。この例では、ブロック間隔値412は5に等しい(例えば、T=5)。したがって、ブロック・ハッシュは、ブロックチェーン台帳に追加された最後の5個のブロック内を含む1つまたは複数のブロックから取り出されなければならない。
この例では、クライアント420は、ブロック間隔412に含まれているブロックのいずれかからブロック・ハッシュを選択してよい。場合によっては、クライアント420は、ブロックチェーン410に直前に追加されたブロックを自動的に選択してよいが、実施形態はこれに限定されない。クライアント420が、ブロック間隔412内からブロックを選択したことを検証するために、クライアント420は、ブロックチェーン台帳の現在の高さ(i)をブロック間隔値412(T)で割った値に等しい完全性値をサブミットしてよい。ブロックチェーン台帳の高さが50であり(例えば、H=50)、ブロック間隔値が5である(例えば、T=5)場合、完全性値は(H/T)=(50/5)=10になる。図4Bは、図4Aのクライアント420によって選択されたブロックのブロック・ハッシュ430を示している。ここで、ブロック・ハッシュ430は、SHA256ハッシュなどの文字および数字の256ビットを含んでいる。このハッシュ値430は、ブロック・ハッシュ430の値に基づいてハッシュ値430を疑似2進乱数440に変換する2進乱数発生器のシードであってよい。2進乱数は、図4Cの例でさらに説明されるように、署名者ピアを識別するために使用され得る。
図4Bを参照すると、一意の識別子をピア組織に割り当てるプロセスが示されている。この例では、ブロックチェーン・ネットワークが16(例えば、N=16)個のピア組織を含んでいる。各ピアに、一意の識別子が割り当てられてよい。したがって、一意のID450の表に示されているように、16個の組織に、0~N-1の値が割り当てられてよい。この例では、一意のID450の各々が、10進数値として表されているが、2進数値として表されてもよい。
図4Cは、実施形態例に従って、2進乱数440を、ブロックチェーン内の組織の数に基づくサイズを有する2進ビット・セグメント(binary bit segments)441に分割し、2進ビット・セグメント441に基づいて署名者ノードを識別する、プロセス400Cを示している。この例では、乱数440は(シードとして使用されるハッシュ値430と同じ)256ビットを有している。組織を識別するために、クライアント420は、ブロックチェーン・ネットワーク内の組織の数に基づいて、2進乱数440をより小さいチャンクまたはサイズのビットにセグメント化してよい。例えば、対数関数log2(N)ビットが2進ビット・セグメント441のサイズを決定してよい。この例では、ビット・セグメント441に、log2(16)=4ビットのサイズが与えられる。
ビット・セグメント441の2進数は、ピア組織の一意のID450のうちの1つにマッピングされ得る10進数値に変換されてよい。例えば、最初のビット・セグメントが「1011」の乱数を含み、この乱数が、ピア組織12の一意のIDにマッピングされる11の10進数値に変換され得る。2進セグメントを10進数値に変換し、ピア組織の一意のIDにマッピングするこのプロセスは、署名ポリシーを満たすための十分な一意のID(および対応する組織)が識別されるまで、繰り返され得る。この例では、必要な署名者の数はK=4である。その結果、組織12、組織9、組織11、および組織6が、2進乱数440の最初の4つのセグメントから識別される。したがって、プロセスが終了してよく、クライアント420は、トランザクション提案を、ランダムな選択プロセスから識別された4つの組織(12、9、11、および6)の各々のノードにサブミットすることができる。
10進数値への2進ビット・セグメントの変換が、以前のビット・セグメントの重複する一意のIDへのマッピングを引き起こす場合、ビット・セグメントが破棄され得る。システムは、取得され得る最初の4つの異なる一意のIDを探し続ける。クライアント420が2進ビット・セグメントを使い果たした場合(これは、必要なノード/署名者の数の方がより大きい場合に起こることが多い)、クライアント420は、ブロック間隔412から別のブロック・ハッシュを取得するか、または現在のハッシュを再びハッシュし、新しい乱数を生成して、必要な残りの数の署名者ノードを識別するためのプロセスを再開してよい。
図5は、実施形態例に従って、署名者になるべきピア組織をランダムに選択する方法500を示している。図5を参照すると、510で、この方法は、ブロックチェーンに格納されたデータ・ブロックのブロック・ハッシュを取り出すことを含んでよい。例えば、この方法を実行しているクライアント、スマート・コントラクト、ブロックチェーン・ピア・ノードなどのシステムは、直前に格納された既定の量のブロックからブロック・ハッシュを選択することに制限されてよい。これらのブロックの間隔は、ブロック間隔値と呼ばれてよい。例えば、ブロック間隔値が10である場合、この方法は、ブロックチェーンに格納された最後の10個のブロックのうちの1つまたは複数のブロックのみからブロック・ハッシュを選択してよい。そうすることで、セキュリティは、古いハッシュを使用している攻撃者から保護する。
520で、この方法は、ブロック・ハッシュの値に基づいて、署名者になるべきピア組織のサブセットをブロックチェーンのブロックチェーン・ネットワークからランダムに決定することを含んでよい。例えば、ランダムに決定することは、ブロック・ハッシュを2進乱数に変換することと、2進乱数を複数のビット・セグメントに分割することと、複数のビット・セグメントのうちの1つまたは複数に基づいて、ピア組織のサブセットを識別することとを含んでよい。
530で、この方法は、ブロックチェーン格納要求を、クライアントからランダムに決定された署名者ピア・ノードのサブセットに送信することを含んでよい。さらに、540で、この方法は、ランダムに決定された署名者ピア・ノードのサブセットからのシミュレートされた応答を、格納要求提案に収集することを含んでよい。図5に示されていないが、一部の実施形態では、この方法は、ランダムに決定された署名者ピア・ノードのサブセットから収集された、シミュレートされた応答を含んでいる格納要求提案を、ブロックチェーンの順序付けノード・サービスに送信することをさらに含んでよい。
さまざまな実施形態によれば、識別することは、ブロックチェーン・ネットワークに含まれているピア・ノードの数に基づいて、複数のピア・ノードのうちの各ピア・ノードに一意の識別子を割り当てることと、複数のビット・セグメントからのビット・セグメントを10進数値に変換することと、ビット・セグメントの10進数値をピア・ノードのうちの1つの一意の識別子にマッピングすることとを含んでよい。ビット・セグメントは、2進乱数シーケンスからスライスされた特定のサイズのビットであってよい。次に、システムは、どの組織が一意の識別子に対応するかを識別し、その組織からのピアをトランザクションの署名者ノードとして選択してよい。一部の実施形態では、ブロックチェーン・ネットワークに含まれている組織の数に基づいて、ビット・セグメントのサイズが選択されてよい。
一部の実施形態では、この方法は、ブロックチェーン上の最新のブロックのサブセットを識別するブロック間隔値を決定することをさらに含んでよく、このサブセットからブロック・ハッシュが取り出され得る。一部の実施形態では、この方法は、ブロック間隔値によって識別された最新のブロックのサブセット内のブロックを選択することと、ブロック間隔値によって識別されたブロックのサブセット内の選択されたブロックからブロック・ハッシュを取り出すこととをさらに含んでよい。一部の実施形態では、この方法は、ブロックチェーンの現在の高さおよびブロック間隔値に基づいて完全性値を生成することと、完全性値を格納要求提案内に格納することとをさらに含んでよい。格納要求提案は、順序付けノードに送信されてよく、順序付けノードは、格納要求提案をデータ・ブロックに含め、このデータ・ブロックを、ブロックチェーンのコミット・ノードに配布し、コミット・ノードでは、データ・ブロックがブロックチェーン台帳に格納され得る。
さまざまな実施形態によれば、方法500は、図5に明示的に示されていない追加のステップを含んでよい。例えば、クライアントは、応答をトランザクション提案にまとめ、トランザクション提案をブロックチェーンの順序付けサービスに送信してよい。順序付けサービスは、トランザクション提案をブロックに追加し、このブロックをブロックチェーン・ネットワーク内のすべてのコミット・ピア・ノードに送信してよい。それに応じて、コミット・ピアの各々は、ブロックに含まれているトランザクションが、ランダムな選択プロセスに従ってピアによってシミュレートされ、署名されたかどうかを検証してよい。チェックが成功した場合、コミット・ピアによってトランザクションが台帳に追加され、そうでない場合、トランザクションが追加されない。
図6Aは、実施形態例に従ってさまざまな動作を実行するように構成された物理的インフラストラクチャ610を含んでいる例示的なシステム600を示している。図6Aを参照すると、物理的インフラストラクチャ610は、モジュール612およびモジュール614を含んでいる。モジュール614は、実施形態例のいずれかに含まれる(モジュール612内の)動作ステップ608のいずれかを実行してよい、ブロックチェーン620およびスマート・コントラクト630(ブロックチェーン620に存在してよい)を含んでいる。ステップ/動作608は、説明されたか、または図に示された実施形態のうちの1つまたは複数を含んでよく、1つまたは複数のスマート・コントラクト630またはブロックチェーン620あるいはその両方から書き込まれるか、または読み取られる、出力されたか、または書き込まれた情報を表してよい。物理的インフラストラクチャ610、モジュール612、およびモジュール614は、1つまたは複数のコンピュータ、サーバ、プロセッサ、メモリ、または無線通信デバイス、あるいはその組み合わせを含んでよい。さらに、モジュール612およびモジュール614は同じモジュールであってよい。
図6Bは、実施形態例に従ってさまざまな動作を実行するように構成された別の例示的なシステム640を示している。図6B参照すると、システム640はモジュール612および614を含んでいる。モジュール614は、実施形態例のいずれかに含まれる(モジュール612内の)動作ステップ608のいずれかを実行してよい、ブロックチェーン620およびスマート・コントラクト630(ブロックチェーン620に存在してよい)を含んでいる。ステップ/動作608は、説明されたか、または図に示された実施形態のうちの1つまたは複数を含んでよく、1つまたは複数のスマート・コントラクト630またはブロックチェーン620あるいはその両方から書き込まれるか、または読み取られる、出力されたか、または書き込まれた情報を表してよい。物理的インフラストラクチャ610、モジュール612、およびモジュール614は、1つまたは複数のコンピュータ、サーバ、プロセッサ、メモリ、または無線通信デバイス、あるいはその組み合わせを含んでよい。さらに、モジュール612およびモジュール614は同じモジュールであってよい。
図6Cは、実施形態例に従って、契約当事者間でのスマート・コントラクトの構成、およびブロックチェーンに対してスマート・コントラクトの条件を実施するように構成された仲介サーバを利用するように構成された例示的なシステムを示している。図6Cを参照すると、構成650は、通信セッション、アセット転送セッション、あるいはプロセスまたは手順を表してよく、これらは、1つまたは複数のユーザ・デバイス652または656あるいはその両方を明示的に識別するスマート・コントラクト630によって動作させられる。スマート・コントラクトの実行の、実行、動作、および結果は、サーバ654によって管理されてよい。スマート・コントラクト630の内容は、スマート・コントラクト・トランザクションの関係者である実体652および656のうちの1つまたは複数によるデジタル署名を要求してよい。スマート・コントラクトの実行結果は、ブロックチェーン・トランザクションとしてブロックチェーン620に書き込まれてよい。スマート・コントラクト630は、1つまたは複数のコンピュータ、サーバ、プロセッサ、メモリ、または無線通信デバイス、あるいはその組み合わせに存在してよい、ブロックチェーン620に存在する。
図6Dは、実施形態例に従って、ブロックチェーンを含んでいるシステム660を示している。図6Dの例を参照すると、アプリケーション・プログラミング・インターフェイス(API)ゲートウェイ662が、ブロックチェーンの論理(例えば、スマート・コントラクト630またはその他のチェーンコード)およびデータ(例えば、分散型台帳など)にアクセスするための共通インターフェイスを提供する。この例では、APIゲートウェイ662は、1つまたは複数の実体652および656をブロックチェーン・ピア(すなわち、サーバ654)に接続することによってブロックチェーンに対してトランザクション(呼び出し、問い合わせなど)を実行するための共通インターフェイスである。ここで、サーバ654は、世界状態および分散型台帳のコピーを保持するブロックチェーン・ネットワークのピア・コンポーネントであり、これらのコピーは、クライアント652および656が世界状態に関するデータを問い合わせること、およびトランザクションをブロックチェーン・ネットワークにサブミットすることを可能にし、スマート・コントラクト630および署名ポリシーに応じて、署名ピアがスマート・コントラクト630を実行する。
前述の実施形態は、ハードウェアにおいて、プロセッサによって実行されるコンピュータ・プログラムにおいて、ファームウェアにおいて、またはこれらの組み合わせにおいて実装されてよい。コンピュータ・プログラムは、ストレージ媒体などのコンピュータ可読媒体に具現化されてよい。例えば、コンピュータ・プログラムは、ランダム・アクセス・メモリ(RAM:random access memory)、フラッシュ・メモリ、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memory)、電子的消去可能プログラマブル読み取り専用メモリ(EEPROM:electrically erasable programmable read-only memory)、レジスタ、ハード・ディスク、取り外し可能なディスク、コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disk read-only memory)、または従来技術において知られた任意のその他の形態のストレージ媒体に存在してよい。
例示的なストレージ媒体は、プロセッサがストレージ媒体から情報を読み取り、ストレージ媒体に情報を書き込むことができるように、プロセッサに結合されてよい。代替方法では、ストレージ媒体はプロセッサと一体であってよい。プロセッサおよびストレージ媒体は、特定用途向け集積回路(ASIC:application specific integrated circuit)に存在してよい。代替方法では、プロセッサおよびストレージ媒体は、個別のコンポーネントとして存在してよい。
図7Aは、実施形態例に従って、分散型台帳720に追加されている新しいブロックのプロセス700を示しており、図7Bは、実施形態例に従って、ブロックチェーンの新しいデータ・ブロック構造730の内容を示している。図7Aを参照すると、クライアント(図示されていない)は、トランザクションをブロックチェーン・ノード711、712、または713、あるいはその組み合わせにサブミットしてよい。クライアントは、ブロックチェーン720に対する活動を規定するための、いずれかのソースから受信された命令であってよい。一例として、クライアントは、ブロックチェーンのトランザクションを提案するデバイス、人、または実体などの要求者の代わりに動作するアプリケーションであってよい。複数のブロックチェーン・ピア(例えば、ブロックチェーン・ノード711、712、および713)が、ブロックチェーン・ネットワークの状態および分散型台帳720のコピーを維持してよい。クライアントによって提案されたトランザクションをシミュレートして署名する署名ピア、および署名を検証し、トランザクションの妥当性を確認し、トランザクションを分散型台帳720にコミットするコミット・ピアを含む、さまざまな種類のブロックチェーン・ノード/ピアが、ブロックチェーン・ネットワーク内に存在してよい。この例では、ブロックチェーン・ノード711、712、および713は、署名者ノード、コミッター・ノード(committer node)、あるいはその両方の役割を実行してよい。
分散型台帳720は、ブロック内の変更不可能な順序付けられたレコードを格納するブロックチェーン、およびブロックチェーン722の現在の状態を維持する状態データベース724(現在の世界状態)を含む。1つのチャネルにつき1つの分散型台帳720が存在してよく、各ピアが、そのピアがメンバーであるチャネルごとに、分散型台帳720のそれ自身のコピーを維持する。ブロックチェーン722は、ハッシュ・リンク・ブロックとして構造化されたトランザクション・ログであり、各ブロックがN個のトランザクションのシーケンスを含む。ブロックは、図7Bに示されているコンポーネントなどの、さまざまなコンポーネントを含んでよい。ブロックのリンク(図7Aの矢印によって示されている)は、前のブロックのヘッダーのハッシュを、現在のブロックのブロック・ヘッダー内に追加することによって生成されてよい。このようにして、ブロックチェーン722上のすべてのトランザクションが、順序付けられ、暗号によって一緒にリンクされ、ハッシュ・リンクを壊さずにブロックチェーン・データを改ざんすることを防ぐ。さらに、これらのリンクのため、ブロックチェーン722内の最新のブロックが、その前に来たすべてのトランザクションを表す。ブロックチェーン722は、追加専用のブロックチェーンのワークロードをサポートするピアのファイル・システム(ローカルまたは取り付けられたストレージ)に格納されてよい。
ブロックチェーン722および分散型台帳720の現在の状態が、状態データベース724に格納されてよい。ここで、現在の状態データは、ブロックチェーン722のチェーン・トランザクション・ログにこれまで含まれたすべてのキーの最新の値を表す。チェーンコード呼び出しは、状態データベース724内の現在の状態に対してトランザクションを実行する。それらのチェーンコードの相互作用を極めて効率的にするために、すべてのキーの最新の値が状態データベース724に格納される。状態データベース724は、ブロックチェーン722のトランザクション・ログへのインデックス付きビューを含んでよく、したがって、いつでもチェーンから再生成され得る。状態データベース724は、ピアの起動時に、トランザクションが受け取られる前に、自動的に回復されてよい(または必要な場合に生成されてよい)。
署名ノードは、トランザクションをクライアントから受信し、シミュレーション結果に基づいてトランザクションに署名する。署名ノードは、トランザクション提案をシミュレートするスマート・コントラクトを保持する。署名ノードがトランザクションに署名するときに、署名ノードは、シミュレートされたトランザクションの署名を示す署名ノードからクライアント・アプリケーションへの署名された応答である、トランザクションの署名を生成する。トランザクションに署名する方法は、チェーンコード内で指定されることがある署名ポリシーによって決まる。署名ポリシーの例は、「署名ピアの大部分がトランザクションに署名しなければならない」である。異なるチャネルは、異なる署名ポリシーを有してよい。署名されたトランザクションは、クライアント・アプリケーションによって順序付けサービス710に転送される。
順序付けサービス710は、署名されたトランザクションを受け取り、それらをブロック内に順序付けし、ブロックをコミット・ピアに配信する。例えば、順序付けサービス710は、トランザクションのしきい値に達したか、タイマーがタイムアウトするか、または別の条件の場合に、新しいブロックを開始してよい。図7Aの例では、ブロックチェーン・ノード712は、ブロックチェーン720に格納するための新しいデータの新しいデータ・ブロック730を受信したコミット・ピアである。ブロックチェーン内の第1のブロックは、ブロックチェーン、ブロックチェーンのメンバー、格納されたデータなどに関する情報を含んでいるジェネシス・ブロックと呼ばれてよい。
順序付けサービス710は、順序付けノードのクラスタで構成されてよい。順序付けサービス710は、トランザクション、スマート・コントラクトを処理することも、共有台帳を維持することもない。むしろ、順序付けサービス710は、署名されたトランザクションを受け取ってよく、それらのトランザクションが分散型台帳720にコミットされる順序を指定する。ブロックチェーン・ネットワークのアーキテクチャは、「順序付け」の特定の実装(例えば、Solo、Kafka、BFTなど)が着脱可能なコンポーネントになるように設計されてよい。
トランザクションは、一貫性のある順序で分散型台帳720に書き込まれる。トランザクションの順序は、トランザクションがネットワークにコミットされるとき状態データベース724に対する更新が有効であることを保証するように確立される。暗号パズルを解くことまたはマイニングによって順序付けが発生する暗号通貨ブロックチェーン・システム(例えば、ビットコインなど)とは異なり、この例では、分散型台帳720の関係者が、そのネットワークに最も適した順序付けメカニズムを選択してよい。
順序付けサービス710は、新しいデータ・ブロック730を初期化し、新しいデータ・ブロック730がコミット・ピア(例えば、ブロックチェーン・ノード711、712、および713)にブロードキャストされてよい。それに応じて、各コミット・ピアは、読み取りセットおよび書き込みセットが状態データベース724内の現在の世界状態にまだ一致することをチェックして確認することによって、新しいデータ・ブロック730内のトランザクションの妥当性を確認する。特に、コミット・ピアは、署名者がトランザクションをシミュレートしたときに存在していた読み取られたデータが、状態データベース724内の現在の世界状態と同一であるかどうかを判定することができる。コミット・ピアがトランザクションの妥当性を確認した場合、トランザクションが分散型台帳720のブロックチェーン722に書き込まれ、状態データベース724が、読み取り/書き込みセットからの書き込みデータに更新される。トランザクションが失敗した場合、すなわち、コミット・ピアが、読み取り/書き込みセットが状態データベース724内の現在の世界状態に一致しないということを検出した場合、ブロック内に順序付けられたトランザクションは、そのブロックにまだ含まれるが、無効としてマーク付けされ、状態データベース724が更新されない。
図7Bを参照すると、分散型台帳720のブロックチェーン722に格納された新しいデータ・ブロック730(データ・ブロックとも呼ばれる)が、ブロック・ヘッダー740、ブロック・データ750、およびブロック・メタデータ760などの、複数のデータ・セグメントを含んでよい。図7Bに示された新しいデータ・ブロック730およびその内容などの、さまざまな示されたブロックおよびそれらの内容が、例にすぎず、実施形態例の範囲を制限するよう意図されていないということが、理解されるべきである。新しいデータ・ブロック730は、ブロック・データ750内のN個(例えば、1、10、100、500、1000、2000、3000など)のトランザクションのトランザクション情報を格納してよい。新しいデータ・ブロック730は、(例えば、図7Aのブロックチェーン722上の)前のブロックへのリンクをブロック・ヘッダー740内に含んでもよい。特に、ブロック・ヘッダー740は、前のブロックのヘッダーのハッシュを含んでよい。ブロック・ヘッダー740は、新しいデータ・ブロック730の一意のブロック番号、ブロック・データ750のハッシュなどを含んでもよい。新しいデータ・ブロック730のブロック番号は、一意であり、0から開始する漸進的/連続的順序などのさまざまな順序で割り当てられてよい。
ブロック・データ750は、新しいデータ・ブロック730内に記録された各トランザクションのトランザクション情報を格納してよい。例えば、トランザクション・データは、トランザクションの種類、バージョン、タイムスタンプ、分散型台帳720のチャネルID、トランザクションID、エポック、ペイロードの可視性、チェーンコード・パス(トランザクションのデプロイ)、チェーンコード名、チェーンコードのバージョン、入力(チェーンコードおよび関数)、公開鍵および証明書などのクライアント(作成者)の識別、クライアントの署名、署名者の識別情報、署名者の署名、提案のハッシュ、チェーンコード・イベント、応答の状態、名前空間、書き込みセット(トランザクションによって読み取られたキーおよびバージョンのリストなど)、書き込みセット(キーと値のリストなど)、開始キー、終了キー、キーのリスト、マークル・ツリー・クエリ・サマリー(Merkle tree query summary)などのうちの1つまたは複数を含んでよい。トランザクション・データは、N個のトランザクションの各々に格納されてよい。
一部の実施形態では、ブロック・データ750に含まれている各トランザクションが、トランザクションをサブミットしたピア・ノードのブロック高さをブロックチェーンのブロック間隔値で割った値に等しいブロック間隔値752を格納してもよい。ブロック間隔値752は、ブロック間隔値752内にあるブロックからのブロック・ハッシュ値を使用して、ランダム化された署名者ノード選択プロセスが実行されたことを検証するために、使用され得る。ブロック間隔値752は、本明細書で説明されたか、または示された、ステップ、特徴、プロセス、または動作、あるいはその組み合わせのうちの1つまたは複数を含む。それに応じて、ブロック間隔値752が、分散型台帳720上のブロックの変更不可能なログに格納され得る。ブロック間隔値752をブロックチェーンに格納する利点の一部は、本明細書で開示されて示されたさまざまな実施形態に反映され、ランダムなピア選択プロセスの完全性を保証することを含む。
ブロック・メタデータ760は、メタデータの複数のフィールドを(例えば、バイト配列などとして)格納してよい。メタデータ・フィールドは、ブロック作成時の署名、最後の構成ブロックへの参照、ブロック内の有効なトランザクションと無効なトランザクションを識別するトランザクション・フィルタ、ブロックを順序付けた順序付けサービスの永続的な最後のオフセットなどを含んでよい。順序付けサービス710によって署名、最後の構成ブロック、および順序付けノードのメタデータが追加されてよい。一方、ブロックのコミッター(ブロックチェーン・ノード712など)は、署名ポリシー、読み取り/書き込みセットの検証などに基づいて、有効/無効情報を追加してよい。トランザクション・フィルタは、ブロック・データ750内のトランザクションの数に等しいサイズのバイト配列、およびトランザクションが有効/無効だったかどうかを識別する妥当性確認コードを含んでよい。
図7Cは、本明細書に記載された実施形態に従って、デジタル・コンテンツのためのブロックチェーン770の実施形態を示している。デジタル・コンテンツは、1つまたは複数のファイルおよび関連する情報を含んでよい。これらのファイルは、媒体、画像、ビデオ、音声、テキスト、リンク、グラフィックス、アニメーション、Webページ、文書、またはデジタル・コンテンツのその他の形態を含んでよい。ブロックチェーンの変更不可能な追加専用の特徴は、デジタル・コンテンツの完全性、有効性、および信頼性を保護するための予防手段として役立ち、認容性ルールが適用される法的手続きにおいて、あるいは証拠が考慮されるか、またはデジタル情報の提示および使用がその他の方法で対象になる、その他の設定において、ブロックチェーンの使用を適切にする。この場合、デジタル・コンテンツはデジタル証拠と呼ばれることがある。
ブロックチェーンは、さまざまな方法で形成されてよい。1つの実施形態では、デジタル・コンテンツは、ブロックチェーン自体に含まれ、ブロックチェーン自体からアクセスされてよい。例えば、ブロックチェーンの各ブロックは、参照情報(例えば、ヘッダー、値など)のハッシュ値を、関連するデジタル・コンテンツと共に格納してよい。その後、ハッシュ値および関連するデジタル・コンテンツは、一緒に暗号化されてよい。したがって、各ブロックのデジタル・コンテンツは、ブロックチェーン内の各ブロックを復号することによってアクセスされてよく、各ブロックのハッシュ値は、前のブロックを参照するための基礎として使用されてよい。これは、次のように示されてよい。
ブロック1 ブロック2・・・・ブロックN
ハッシュ値1 ハッシュ値2 ハッシュ値N
デジタル・コンテンツ1 デジタル・コンテンツ2 デジタル・コンテンツN
1つの実施形態では、デジタル・コンテンツがブロックチェーンに含まれなくてよい。例えば、ブロックチェーンは、デジタル・コンテンツを含んでいない各ブロックの内容の暗号化されたハッシュを格納してよい。デジタル・コンテンツは、元のファイルのハッシュ値に関連して、別のストレージ領域またはメモリ・アドレスに格納されてよい。他のストレージ領域は、ブロックチェーンを格納するために使用されるストレージ・デバイスと同じストレージ・デバイスであってよく、または異なるストレージ領域もしくは分離したリレーショナル・データベースであってもよい。各ブロックのデジタル・コンテンツは、対象のブロックのハッシュ値を取得するか、または問い合わせ、次に、実際のデジタル・コンテンツに対応して格納されているハッシュ値をストレージ領域内で検索することによって、参照またはアクセスされてよい。この動作は、例えば、データベース・ゲートキーパーによって実行されてよい。これは、次のように示されてよい。
ブロックチェーン ストレージ領域
ブロック1のハッシュ値 ブロック1のハッシュ値・・・内容
・ ・
・ ・
・ ・
ブロックNのハッシュ値 ブロックNのハッシュ値・・・内容
図7Cの実施形態例では、ブロックチェーン770は、順序付けられたシーケンスで暗号によってリンクされた複数のブロック7781、7782、...778Nを含んでおり、N≧1である。ブロック7781、7782、...778Nをリンクするための使用される暗号化は、複数の鍵付きハッシュ関数または鍵なしハッシュ関数のいずれかであってよい。1つの実施形態では、ブロック7781、7782、...778Nは、ブロック内の情報に基づいて入力からnビットの英数字出力を生成するハッシュ関数の対象になる(nは256または別の数である)。そのようなハッシュ関数の例としては、SHA型(SHAは、セキュア・ハッシュ・アルゴリズム(Secured Hash Algorithm)を表す)アルゴリズム、マークル・ダンガード・アルゴリズム、HAIFAアルゴリズム、マークル・ツリー・アルゴリズム、ノンスに基づくアルゴリズム、および非衝突耐性PRFアルゴリズムが挙げられるが、これらに限定されない。別の実施形態では、ブロック7781、7782、...778Nは、ハッシュ関数とは異なる関数によって、暗号によってリンクされてよい。例示の目的で、以下では、ハッシュ関数(例えば、SHA-2)を参照して説明が行われる。
ブロックチェーン内のブロック7781、7782、...778Nの各々は、ヘッダー、ファイルのバージョン、および値を含む。ヘッダーおよび値は、ブロックチェーン内のハッシュ処理の結果として、ブロックごとに異なる。1つの実施形態では、値がヘッダーに含まれてよい。以下でさらに詳細に説明されるように、ファイルのバージョンは、元のファイルであるか、または元のファイルの異なるバージョンであってよい。
ブロックチェーン内の最初のブロック7781は、ジェネシス・ブロックと呼ばれ、ヘッダー7721、元のファイル7741、および初期値7761を含んでいる。ジェネシス・ブロックに使用される(実際には、その後のすべてのブロックにおいて使用される)ハッシュ処理方式は、変化してよい。例えば、最初のブロック7781内のすべての情報が一緒に同時にハッシュされてよく、または最初のブロック7781内の情報の各々または一部が別々にハッシュされ、その後、別々にハッシュされた部分のハッシュが実行されてよい。
ヘッダー7721は、1つまたは複数の初期パラメータを含んでよく、初期パラメータは、例えば、バージョン番号、タイムスタンプ、ノンス、ルート情報、難易度、合意プロトコル、期間、媒体形式、ソース、記述的キーワード、あるいは元のファイル7741もしくはブロックチェーンまたはその両方に関連付けられたその他の情報、あるいはその組み合わせを含んでよい。ヘッダー7721は、自動的に(例えば、ブロックチェーン・ネットワーク管理ソフトウェアによって)生成されるか、またはブロックチェーンの参加者によって手動で生成されてよい。ブロックチェーン内の他のブロック7782~778N内のヘッダーとは異なり、ジェネシス・ブロック内のヘッダー7721は、単に前のブロックが存在しないため、前のブロックを参照しない。
ジェネシス・ブロック内の元のファイル7741は、例えば、ブロックチェーンに含まれる前の処理を伴うか、または伴わずに、デバイスによって捕捉されたデータであってよい。元のファイル7741は、システムのインターフェイスを介して、デバイス、媒体ソース、またはノードから受信される。元のファイル7741はメタデータに関連付けられ、メタデータは、例えば、ユーザ、デバイス、またはシステム・プロセッサあるいはその組み合わせによって、手動または自動のいずれかで、生成されてよい。メタデータは、元のファイル7741に関連して、最初のブロック7781に含まれてよい。
ジェネシス・ブロック内の値7761は、元のファイル7741の1つまたは複数の一意の属性に基づいて生成された初期値である。1つの実施形態では、1つまたは複数の一意の属性は、元のファイル7741のハッシュ値、元のファイル7741のメタデータ、およびファイルに関連付けられたその他の情報を含んでよい。1つの実装では、初期値7761は、以下の一意の属性に基づいてよい。
1)SHA-2によって元のファイルに対して計算されたハッシュ値
2)発信デバイスID
3)元のファイルの開始タイムスタンプ
4)元のファイルの初期ストレージ位置
5)元のファイルおよび関連するメタデータを現在制御するためのソフトウェアのブロックチェーン・ネットワーク・メンバーID
ブロックチェーン内の他のブロック7782~778Nも、ヘッダー、ファイル、および値を含む。しかし、最初のブロック7721とは異なり、他のブロック内のヘッダー7722~772Nの各々は、直前のブロックのハッシュ値を含む。直前のブロックのハッシュ値は、単に前のブロックのヘッダーのハッシュであってよく、または前のブロック全体のハッシュ値であってよい。先行するブロックのハッシュ値を残りのブロックの各々に含めることによって、矢印780によって示されているように、N番目のブロックからジェネシス・ブロック(および関連する元のファイル)まで戻りブロックごとのトレースを実行することができ、監査可能かつ変更不可能な証拠保全を確立する。
他のブロック内のヘッダー7722~772Nの各々は、一般に、他の情報(例えば、バージョン番号、タイムスタンプ、ノンス、ルート情報、難易度、合意プロトコル、あるいは対応するファイルもしくはブロックチェーンまたはその両方に関連付けられたその他のパラメータまたは情報、あるいはその組み合わせ)を含んでもよい。
他のブロック内のファイル7742~774Nは、例えば実行される処理の種類に応じて、ジェネシス・ブロック内の元のファイルと同じであってよく、または元のファイルの変更されたバージョンであってよい。実行される処理の種類は、ブロックごとに変化してよい。処理は、例えば、情報を編集するか、またはその他の方法で情報の内容を変更するか、情報をファイルから取り除くか、または情報をファイルに追加するなどの、先行するブロック内のファイルの任意の変更を含んでよい。
追加的または代替的に、処理は、先行するブロックからファイルを単にコピーすること、ファイルのストレージ位置を変更すること、1つまたは複数の先行するブロックからのファイルを分析すること、ファイルをあるストレージまたはメモリ位置から別のストレージまたはメモリ位置に移動すること、あるいはブロックチェーンのファイルもしくは関連するメタデータまたはその両方に対して動作を実行することを含んでよい。ファイルを分析することを含んでいる処理は、例えば、さまざまな分析、統計値、またはファイルに関連付けられたその他の情報を追加すること、含めること、またはその他の方法で関連付けることを含んでよい。
他のブロック内の他のブロック7762~776Nの各々に含まれる値は、実行された処理の結果として、一意の値であり、すべて異なっている。例えば、いずれか1つのブロック内の値は、前のブロック内の値の更新されたバージョンに対応する。この更新は、値が割り当てられたブロックのハッシュに反映される。したがって、ブロックの値は、ブロック内で何の処理が実行されたかの指示を提供し、ブロックチェーンを元のファイルまで戻りトレースすることも可能にする。このトレースは、ブロックチェーン全体を通じて、ファイルの証拠保全を確認する。
例えば、ファイル内で示されている人の識別情報を保護するために、前のブロック内のファイルの一部が編集されるか、遮断されるか、または画素化される場合について考える。この場合、編集されたファイルを含んでいるブロックは、例えば、編集がどのように実行されたか、誰が編集を実行したか、編集が発生したタイムスタンプなどの、編集されたファイルに関連付けられたメタデータを含むであろう。このメタデータがハッシュされ、値を形成してよい。ブロックのメタデータが、前のブロック内の値を形成するためにハッシュされた情報と異なっているため、値は、互いに異なっており、復号されたときに回復されてよい。
1つの実施形態では、次のうちのいずれか1つまたは複数が発生した場合に、現在のブロックの値を形成するように、前のブロックの値が更新されてよい(例えば、新しいハッシュ値が計算されてよい)。新しいハッシュ値は、この実施形態例では、以下に示された情報のすべてまたは一部をハッシュすることによって計算されてよい。
a)ファイルがいずれかの方法で処理された場合(例えば、ファイルが編集されたか、コピーされたか、変更されたか、アクセスされたか、またはその他の動作が実行された場合)に、新しいSHA-2によって計算されたハッシュ値
b)ファイルの新しいストレージ位置
c)ファイルに関連付けられている識別された新しいメタデータ
d)あるブロックチェーンの参加者から別のブロックチェーンの参加者へのファイルのアクセスまたは制御の移動
図7Dは、1つの実施形態例に従って、ブロックチェーン790内のブロックの構造を表すことができるブロックの実施形態を示している。ブロック(ブロックi)は、ヘッダー772i、ファイル774i、および値776iを含んでいる。
ヘッダー772iは、本明細書において説明された、前のブロック(ブロックi-1)のハッシュ値、および例えば情報の種類のいずれかであってよい、追加の参照情報(例えば、参照、特性、パラメータなどを含んでいるヘッダー情報)を含む。すべてのブロックは、当然ながらジェネシス・ブロックを除いて、前のブロックのハッシュを参照する。前のブロックのハッシュ値は、単に前のブロック内のヘッダーのハッシュであるか、またはファイルおよびメタデータを含む、前のブロック内の情報のすべてもしくは一部のハッシュであってよい。
ファイル774iは、データ1、データ2、...、データNなどの複数のデータを順に含んでいる。データは、データに関連付けられた内容または特性あるいはその両方を記述するメタデータ(メタデータ1、メタデータ2、...、メタデータN)でタグ付けされる。例えば、データごとのメタデータは、データのタイムスタンプ、データのプロセス、データに示された人またはその他の内容を示しているキーワード、またはファイルの有効性および内容を全体として確立し、特に、例えば以下で説明される実施形態に関連して説明されるように、デジタル証拠を使用するのに役立つことができるその他の特徴、あるいはその組み合わせを示すための情報を含んでよい。メタデータに加えて、各データは、改ざん、ファイル内のギャップ、およびファイル全体の連続的な参照を防ぐために、前のデータへの参照(参照1、参照2、...、参照N)でタグ付けされてよい。
メタデータが(例えば、スマート・コントラクトを介して)データに割り当てられた後に、ハッシュを変更せずにメタデータを変更することはできず、ハッシュの変更は、無効であると容易に識別され得る。したがって、メタデータは、ブロックチェーン内の参加者による使用のためにアクセスされてよい、情報のデータ・ログを作成する。
値776iは、前に説明された情報の種類のいずれかに基づいて計算されたハッシュ値またはその他の値である。例えば、いずれかの特定のブロック(ブロックi)の場合、そのブロックの値は、そのブロックに対して実行された処理(例えば、新しいハッシュ値、新しいストレージ位置、関連するファイルの新しいメタデータ、制御もしくはアクセスの移動、識別子、またはその他の動作もしくは追加される情報)を反映するように更新されてよい。各ブロック内の値が、ファイルおよびヘッダーのデータのメタデータから分離しているように示されているが、別の実施形態では、値は、このメタデータに部分的または全体的に基づいてよい。
ブロックチェーン770が形成された後に、いずれかの時点で、ブロック全体にわたる値のトランザクション履歴に関してブロックチェーンに問い合わせることによって、ファイルの変更不可能な証拠保全が取得されてよい。この問い合わせ手順または追跡手順は、最後に含まれたブロック(例えば、最後の(N番目の)ブロック)の値を復号することから開始してよく、その後、ジェネシス・ブロックに達し、元のファイルが回復されるまで、他のブロックの値を復号し続ける。復号は、さらに各ブロックでヘッダーおよびファイルならびに関連するメタデータを復号することを含んでもよい。
復号は、各ブロックで行われた暗号化の種類に基づいて実行される。この復号は、秘密鍵、公開鍵、または公開鍵と秘密鍵のペアの使用を含んでよい。例えば、非対称暗号化が使用される場合、ブロックチェーンの参加者またはネットワーク内のプロセッサが、既定のアルゴリズムを使用して公開鍵および秘密鍵のペアを生成してよい。公開鍵および秘密鍵は、何らかの数学的関係によって互いに関連付けられる。公開鍵は、他のユーザからメッセージを受信するためのアドレス(例えば、IPアドレスまたは自宅住所)として機能するように、パブリックに配布されてよい。秘密鍵は、秘密に保たれ、他のブロックチェーンの参加者に送信されるメッセージにデジタル署名するために使用される。署名は、受信者が送信者の公開鍵を使用して検証することができるように、メッセージに含まれる。このようにして、受信者は、送信者のみがこのメッセージを送信できたということを確信することができる。
鍵のペアを生成することは、ブロックチェーンにアカウントを作成することに類似しているが、実際は、どこにも登録する必要はない。また、ブロックチェーンに対して実行されたすべてのトランザクションが、秘密鍵を使用して送信者によってデジタル署名される。この署名は、アカウントの所有者のみが(スマート・コントラクトによって決定された許可の範囲内である場合に)ブロックチェーンのファイルを追跡して処理することができるということを保証する。
図8Aおよび8Bは、本明細書に組み込まれて使用されてよい、ブロックチェーンの追加の使用事例を示している。特に、図8Aは、機械学習(人工知能)データを格納するブロックチェーン810の例800を示している。機械学習は、新しいデータに対する正確な予測のための予測モデルを構築するために、大量の履歴データ(またはトレーニング・データ)に依存する。機械学習ソフトウェア(例えば、ニューラル・ネットワークなど)は、多くの場合、非直感的パターンを発見するために、数百万レコードを取捨選択することができる。
図8Aの例では、ホスト・プラットフォーム820が、アセット830の予測監視のための機械学習モデルを構築してデプロイする。ここで、ホスト・プラットフォーム820は、クラウド・プラットフォーム、工業用サーバ、Webサーバ、パーソナル・コンピュータ、ユーザ・デバイスなどであってよい。アセット830は、航空機、機関車、タービン、医療機器、石油ガス機器、ボート、船、車両などの、任意の種類のアセット(例えば、機械または機器など)であることができる。別の例として、アセット830は、株式、通貨、デジタル・コイン、保険などの、無形のアセットであってよい。
ブロックチェーン810は、機械学習モデルのトレーニング・プロセス802およびトレーニング済み機械学習モデルに基づく予測プロセス804の両方を大幅に改善するために使用され得る。例えば、802では、データを収集するためにデータ科学者/技術者またはその他のユーザを必要とするのではなく、アセット830自体によって(または、図示されていない中間物を介して)、ブロックチェーン810に関する履歴データが格納されてよい。これによって、予測モデルのトレーニングを実行するときにホスト・プラットフォーム820によって必要とされる収集時間を大幅に減らすことができる。例えば、スマート・コントラクトを使用して、データを、元の場所からブロックチェーン810に真っすぐに、直接かつ確実に転送することができる。スマート・コントラクトは、ブロックチェーン810を使用して、収集されたデータのセキュリティおよび所有権を保証することによって、アセットから、機械学習モデルを構築するためにデータを使用する個人に、データを直接送信することができる。これによって、アセット830間のデータの共有を可能にする。
収集されたデータは、合意メカニズムに基づいてブロックチェーン810に格納されてよい。合意メカニズムは、記録されているデータが検証されており、正確であることを保証するために、(許可されたノードを)制御する。記録されたデータは、タイムスタンプが付与され、暗号によって署名されており、変更不可能である。したがって、記録されたデータは、監査可能、透過的、かつ安全である。ブロックチェーンに直接書き込むIoTデバイスを追加することによって、特定の場合(すなわち、サプライ・チェーン、医療、物流などの場合)に、データが記録される頻度を増やし、その精度を向上させることができる。
さらに、収集されたデータに対する機械学習モデルのトレーニングは、ホスト・プラットフォーム820による一連の改良およびテストを必要とし得る。各改良およびテストは、機械学習モデルの知識を拡張するのに役立つように、追加データまたは以前に考慮されなかったデータに基づいてよい。802では、ホスト・プラットフォーム820によって、異なるトレーニング・ステップおよびテスト・ステップ(および関連するデータ)がブロックチェーン810に格納されてよい。機械学習モデルの各改良(例えば、変数、重みなどにおける変更)は、ブロックチェーン810に格納されてよい。これによって、モデルがどのようにトレーニングされたか、およびモデルをトレーニングするためにどのデータが使用されたかの検証可能な証明を提供する。さらに、ホスト・プラットフォーム820が最終的なトレーニング済みモデルを実現した場合、得られたモデルがブロックチェーン810に格納されてよい。
モデルがトレーニングされた後に、そのモデルは、活動中の環境にデプロイされてよく、最終的なトレーニング済み機械学習モデルの実行に基づく予測/決定を行うことができる。例えば、804で、機械学習モデルは、航空機、風力タービン、医療機械などのアセットのための状態監視保全(CBM:condition-based maintenance)に使用されてよい。この例では、アセット830からフィードバックされたデータが機械学習モデルに入力され、故障イベント、エラー・コードなどのイベント予測を行うために使用されてよい。ホスト・プラットフォーム820で機械学習モデルの実行によって行われた決定は、監査可能/検証可能な証明を提供するために、ブロックチェーン810に格納されてよい。1つの非限定的な例として、機械学習モデルは、アセット830の部品での将来の停止/故障を予測し、その部品を交換するように警告または通知を作成してよい。この決定の背後にあるデータが、ホスト・プラットフォーム820によってブロックチェーン810に格納されてよい。1つの実施形態では、本明細書において説明されたか、または示されたか、あるいはその両方である特徴または動作あるいはその両方が、ブロックチェーン810で、またはブロックチェーン810に関して発生することができる。
ブロックチェーンの新しいトランザクションが新しいブロックに一緒に集められ、既存のハッシュ値に追加されることができる。次に、このハッシュ値が暗号化されて、新しいブロックの新しいハッシュを生成する。この新しいハッシュが、トランザクションが暗号化されるときなどに、トランザクションの次のリストに追加される。この結果は、先行するすべてのブロックのハッシュ値をそれぞれ含んでいるブロックのチェーンである。これらのブロックを格納するコンピュータは、ブロックのハッシュ値を定期的に比較し、それらのコンピュータがすべて合意していることを確認する。合意していないすべてのコンピュータは、問題を引き起こしているレコードを破棄する。この方法は、ブロックチェーンの改ざん防止を保証することに適しているが、完璧ではない。
このシステムを不正に操作する1つの方法は、不正なユーザが、ハッシュを変更しないような方法で、トランザクションのリストを自分の都合の良いように変更することである。これは、総当たり攻撃によって実行されることができ、言い換えると、レコードを変更し、結果を暗号化し、ハッシュ値が同じであるかどうかを確認することによって、実行されることができる。ハッシュ値が同じでない場合、一致するハッシュを見つけるまで、何度も繰り返して試みる。ブロックチェーンのセキュリティは、通常のコンピュータが、宇宙の年齢などの、全く非実用的な時間的尺度にわたってしかこの種の総当たり攻撃を実行できないという考えに基づく。それに対して、量子コンピュータは非常に高速(数千倍高速)であり、したがって、非常に大きい脅威をもたらす。
図8Bは、量子コンピューティング攻撃に対して保護するために量子鍵配送(QKD:quantum key distribution)を実装する量子セキュアなブロックチェーン852の例850を示している。この例では、ブロックチェーン・ユーザは、QKDを使用して互いの識別情報を検証することができる。この検証では、光子などの量子的粒子を使用して情報を送信し、この情報は、破壊することなく盗聴者によってコピーされることが不可能である。このようにして、送信者および受信者が、ブロックチェーンを介して、互いの識別情報を確認することができる。
図8Bの例では、4人のユーザ(854、856、858、および860)が存在している。ユーザのペアの各々は、ユーザ自身の間で秘密鍵862(すなわち、QKD)を共有することができる。この例には4つのノードが存在するため、ノードの6つのペアが存在し、したがって、QKDAB、QKDAC、QKDAD、QKDBC、QKDBD、およびQKDCDを含む6つの異なる秘密鍵862が使用される。各ペアは、光子などの量子的粒子を使用して情報を送信することによってQKDを作成することができ、この情報は、破壊することなく盗聴者によってコピーされることが不可能である。このようにして、ユーザのペアが互いの識別情報を確認することができる。
ブロックチェーン852の動作は、(i)トランザクションの作成、および(ii)新しいトランザクションを集めるブロックの構築という2つの手順に基づく。新しいトランザクションは、従来のブロックチェーン・ネットワークと同様に作成されてよい。各トランザクションは、送信者、受信者、作成時間、転送される量(または値)、送信者が操作のための資金を持っていることを正当化する参照トランザクションのリストに関する情報などを含んでよい。次に、このトランザクション・レコードは、すべての他のノードに送信され、未確認トランザクションのプールに入力される。ここで、2人の関係者(すなわち、854~860のうちのユーザのペア)が、共有秘密鍵862(QKD)を提供することによって、トランザクションを認証する。この量子署名は、すべてのトランザクションに添付され、改ざんを極めて困難にすることができる。各ノードは、ブロックチェーン852のローカル・コピーに関してトランザクションのエントリをチェックし、各トランザクションが十分な資金を持っていることを検証する。しかし、トランザクションはまだ確認されていない。
ブロックに対して従来のマイニング・プロセスを実行するのではなく、ブロードキャスト・プロトコルを使用して、分散された方法でブロックが作成されてよい。既定の期間(例えば、数秒、数分、数時間など)に、ネットワークがブロードキャスト・プロトコルをいずれかの未確認トランザクションに適用してよく、それによって、トランザクションの正しいバージョンに関してビザンチン合意(合意)を達成する。例えば、各ノードは、プライベートな値(その特定のノードのトランザクション・データ)を所有してよい。1回目に、ノードは、プライベートな値を互いに送信する。その後、ノードは、前回他のノードから受信した情報を伝達する。ここで、本物のノードが、新しいブロック内のトランザクションの完全なセットを作成することができる。この新しいブロックは、ブロックチェーン852に追加されることができる。1つの実施形態では、本明細書において説明されたか、または示されたか、あるいはその両方である特徴または動作あるいはその両方が、ブロックチェーン852で、またはブロックチェーン852に関して発生することができる。
図9は、本明細書において説明されたか、または示されたか、あるいはその両方である実施形態例のうちの1つまたは複数をサポートする例示的なシステム900を示している。システム900は、他の多数の汎用または特殊用途のコンピューティング・システム環境または構成で運用できるコンピュータ・システム/サーバ902を備えている。コンピュータ・システム/サーバ902と共に使用するのに適し得る周知のコンピューティング・システム、環境、または構成、あるいはその組み合わせの例としては、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらの任意のシステムまたはデバイスを含む分散クラウド・コンピューティング環境などが挙げられるが、これらに限定されない。
コンピュータ・システム/サーバ902は、コンピュータ・システムによって実行されているプログラム・モジュールなどの、コンピュータ・システムによって実行可能な命令との一般的な関連において説明されてよい。通常、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含んでよい。コンピュータ・システム/サーバ902は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散クラウド・コンピューティング環境で実行されてよい。分散クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカルおよびリモートの両方のコンピュータ・システム・ストレージ媒体に配置されてよい。
図9に示すように、クラウド・コンピューティング・ノード900内のコンピュータ・システム/サーバ902は、汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム/サーバ902のコンポーネントは、1つまたは複数のプロセッサまたはプロセッシング・ユニット904、システム・メモリ906、およびシステム・メモリ906を含むさまざまなシステム・コンポーネントをプロセッサ904に結合するバスを含んでよいが、これらに限定されない。
バスは、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、任意の複数の種類のバス構造のうちの1つまたは複数を表す。例として、そのようなアーキテクチャは、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカル・バス、およびPCI(Peripheral Component Interconnects)バスを含むが、これらに限定されない。
コンピュータ・システム/サーバ902は、通常、さまざまなコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ902によってアクセスできる任意の使用可能な媒体であってよく、揮発性および不揮発性媒体、取り外し可能および取り外し不可の媒体を含む。システム・メモリ906は、1つの実施形態では、他の図のフロー図を実装する。システム・メモリ906は、ランダム・アクセス・メモリ(RAM:random access memory)910またはキャッシュ・メモリ912あるいはその両方などの、揮発性メモリの形態でのコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ902は、その他の取り外し可能/取り外し不可、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体をさらに含んでよい。単に例として、取り外し不可、不揮発性の磁気媒体(図示されておらず、通常は「ハード・ドライブ」と呼ばれる)に対する読み取りと書き込みを行うために、ストレージ・システム914を提供することができる。図示されていないが、取り外し可能、不揮発性の磁気ディスク(例えば、「フロッピー(R)・ディスク」)に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、およびCD-ROM、DVD-ROM、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブを提供することができる。そのような例では、それぞれを、1つまたは複数のデータ媒体インターフェイスによってバスに接続することができる。下で詳細に示され、説明されるように、メモリ906は、本出願のさまざまな実施形態の機能を実行するように構成された一連の(例えば、少なくとも1つの)プログラム・モジュールを備える少なくとも1つのプログラム製品を含んでよい。
例えば、一連の(少なくとも1つの)プログラム・モジュール918を含んでいるプログラム/ユーティリティ916がメモリ906に格納されてよいが、これに限定されず、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データも格納されてよい。オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データまたはこれらの組み合わせの各々は、ネットワーク環境の実装を含んでよい。プログラム・モジュール918は、通常、本明細書に記載された本出願のさまざまな実施形態の機能または方法あるいはその両方を実行する。
当業者によって理解されるように、本出願の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化されてよい。したがって、本出願の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、またはソフトウェアの態様とハードウェアの態様を組み合わせる実施形態の形態を取ってよく、これらはすべて、本明細書では、一般に「回路」、「モジュール」、または「システム」と呼ばれてよい。さらに、本出願の形態は、コンピュータ可読プログラム・コードが具現化されている1つまたは複数のコンピュータ可読媒体において具現化されたコンピュータ・プログラム製品の形態を取ってよい。
また、コンピュータ・システム/サーバ902は、キーボード、ポインティング・デバイス、ディスプレイ922などの1つまたは複数の外部デバイス920、ユーザがコンピュータ・システム/サーバ902と情報をやりとりできるようにする1つまたは複数のデバイス、またはコンピュータ・システム/サーバ902が1つまたは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス(例えば、ネットワーク・カード、モデムなど)、あるいはその組み合わせと通信することもできる。このような通信は、I/Oインターフェイス924を介して行うことができる。さらに、コンピュータ・システム/サーバ902は、ローカル・エリア・ネットワーク(LAN:local area network)、一般的な広域ネットワーク(WAN:wide area network)、またはパブリック・ネットワーク(例えば、インターネット)、あるいはその組み合わせなどの1つまたは複数のネットワークと、ネットワーク・アダプタ926を介して通信することができる。図示されているように、ネットワーク・アダプタ926は、バスを介してコンピュータ・システム/サーバ902の他のコンポーネントと通信する。図示されていないが、その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム/サーバ902と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
システム、方法、および非一過性コンピュータ可読媒体のうちの少なくとも1つの実施形態例が添付の図面において示され、前述の詳細な説明において説明されたが、本出願が、開示された実施形態に限定されず、以下の特許請求の範囲によって示され、定義されているように、多数の再配置、変更、および置き換えを行うことができるということが理解されるであろう。例えば、さまざまな図のシステムの機能は、本明細書に記載されたモジュールまたはコンポーネントのうちの1つまたは複数によって、あるいは分散アーキテクチャにおいて実行することができ、送信器、受信器、またはその両方のペアを含んでよい。例えば、個々のモジュールによって実行される機能の全部または一部は、それらのモジュールのうちの1つまたは複数によって実行されてよい。さらに、本明細書に記載された機能は、さまざまな時間に、さまざまなイベントに関して、モジュールまたはコンポーネントの内部または外部で、実行されてよい。また、さまざまなモジュールの間で送信される情報は、データ・ネットワーク、インターネット、音声ネットワーク、インターネット・プロトコル・ネットワーク、無線デバイス、有線デバイスのうちの少なくとも1つを介して、または複数のプロトコルを介して、あるいはその組み合わせを介して、モジュール間で送信され得る。また、モジュールのいずれかによって送信または受信されるメッセージは、直接的に、または他のモジュールのうちの1つまたは複数を介して、あるいはその両方によって、送信または受信されてよい。
当業者は、「システム」を、パーソナル・コンピュータ、サーバ、コンソール、PDA(personal digital assistant)、携帯電話、タブレット・コンピューティング・デバイス、スマートフォン、または任意のその他の適切なコンピューティング・デバイス、あるいはデバイスの組み合わせとして具現化できるということを、理解するであろう。「システム」によって実行されている前述の機能を提示することは、本出願の範囲を限定するように全く意図されておらず、多くの実施形態のうちの1つの例を提供するよう意図されている。実際に、本明細書で開示された方法、システム、および装置は、計算技術に一致する局所的な分散された形態で実装されてよい。
本明細書において説明されたシステムの特徴の一部が、それらの実装の独立性を特により強調するために、モジュールとして提示されていることに、注意するべきである。例えば、モジュールは、カスタム超大規模集積(VLSI:very large-scale integration)回路またはゲート・アレイ、論理チップなどの市販の半導体、トランジスタ、またはその他の個別のコンポーネントを備えているハードウェア回路として実装されてよい。モジュールは、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ論理、プログラマブル論理デバイス、グラフィックス・プロセッシング・ユニットなどの、プログラム可能なハードウェア・デバイスにおいて実装されてもよい。
モジュールは、さまざまな種類のプロセッサによって実行するために、ソフトウェアにおいて少なくとも部分的に実装されてもよい。例えば、実行可能コードの識別されたユニットは、例えばオブジェクト、プロシージャ、または関数として編成されてよいコンピュータ命令の1つまたは複数の物理的または論理的ブロックを備えてよい。それにもかかわらず、識別されたモジュールの実行可能によって、物理的に一緒に配置される必要はなく、異なる位置に格納された異種の命令を含んでよく、それらの命令は、論理的に一緒に結合された場合にモジュールを備え、モジュールの規定された目的を達成する。さらに、モジュールはコンピュータ可読媒体に格納されてよく、このコンピュータ可読媒体は、例えば、ハード・ディスク・ドライブ、フラッシュ・デバイス、ランダム・アクセス・メモリ(RAM)、テープ、またはデータの格納に使用される任意のその他の媒体であってよい。
実際に、実行可能コードのモジュールは、単一の命令であるか、または多くの命令であることができ、複数の異なるコード・セグメントにわたって、異なるプログラム間および複数のメモリ・デバイスにまたがって、分散されてもよい。同様に、操作可能なデータが、識別され、本明細書ではモジュール内で示されてよく、任意の適切な形態で具現化され、任意の適切な種類のデータ構造内で編成されてよい。操作可能なデータは、単一のデータ・セットとして収集されてよく、または異なるストレージ・デバイスを含む、異なる位置にわたって分散されてよく、システムまたはネットワーク上の単なる電子信号として、少なくとも部分的に存在してよい。
本明細書の図において概略的に説明され、示されているように、本出願のコンポーネントが、多種多様な異なる構成で配置および設計されてよいということが、容易に理解されるであろう。したがって、実施形態の詳細な説明は、請求される本出願の範囲を限定するよう意図されておらず、単に、本出願の選択された実施形態を表している。
当業者は、開示された順序とは異なる順序でステップを使用して、または開示された構成におけるハードウェア要素とは異なるハードウェア要素を使用して、あるいはその両方を使用して、前述の内容を実践できるということを、容易に理解するであろう。したがって、本出願は、これらの好ましい実施形態に基づいて説明されたが、特定の変更、変形、および代替の構造が明白であるということは、当業者にとって明らかであろう。
本出願の好ましい実施形態が説明されたが、説明された実施形態が単なる例であり、それらの実施形態と同等のものおよびそれらの実施形態に対する変更の完全な範囲(例えば、プロトコル、ハードウェア・デバイス、ソフトウェア・プラットフォームなど)で考えた場合、本出願の範囲が添付の特許請求の範囲のみによって定義されるべきであるということが、理解されるべきである。