(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-08-30
(54)【発明の名称】ブロックチェーンにおける疑似乱数的な選択
(51)【国際特許分類】
H04L 9/32 20060101AFI20230823BHJP
G09C 1/00 20060101ALI20230823BHJP
【FI】
H04L9/32 200Z
G09C1/00 650B
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023509635
(86)(22)【出願日】2021-07-19
(85)【翻訳文提出日】2023-04-07
(86)【国際出願番号】 EP2021070107
(87)【国際公開番号】W WO2022033811
(87)【国際公開日】2022-02-17
(32)【優先日】2020-08-11
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】デイヴィーズ,ジャック,オーウェン
(72)【発明者】
【氏名】タータン,クローイー
(57)【要約】
ブロックチェーントランザクションを使用してデータ要素を疑似乱数的に選択するコンピュータ実装方法である。前記方法は、第1当事者によって実行され、かつ、データ要素の順序付リストおよび複数のシード入力を獲得するステップと、第1トランザクションを生成するステップと、ブロックチェーンに含めるために、前記第1トランザクションを1つ以上のブロックチェーンノードに対して利用可能にさせるステップを含む。前記第1トランザクションは、第1出力スクリプトを含み、かつ、前記第1トランザクションが第2トランザクションの入力スクリプトと共に実行されると、前記第1出力スクリプトは、前記データ要素の再順序付リストを出力し、前記複数のシード入力に基づいて生成された擬似乱数を出力し、選択されたデータ要素として、前記擬似乱数に対応するデータ要素の前記再順序付リスト内の位置に配置されたデータ要素を出力するように構成されている。
【特許請求の範囲】
【請求項1】
ブロックチェーントランザクションを使用してデータ要素を疑似乱数的に選択するコンピュータ実装方法であって、
前記方法は、第1当事者によって実行され、かつ、
データ要素の順序付リストおよび複数のシード入力を獲得するステップと、
第1トランザクションを生成するステップと、
ブロックチェーンに含めるために、前記第1トランザクションを1つ以上のブロックチェーンノードに対して利用可能にさせるステップと、
を含み、
前記第1トランザクションは、第1出力スクリプトを含み、
前記第1トランザクションが第2トランザクションの入力スクリプトと共に実行されると、前記第1出力スクリプトは、
前記データ要素の再順序付リストを出力し、
前記複数のシード入力に基づいて生成された、擬似乱数を出力し、かつ、
選択されたデータ要素として、前記擬似乱数に対応するデータ要素の前記再順序付リスト内の位置に配置されたデータ要素を出力する、
ように構成されている、
方法。
【請求項2】
前記第1出力スクリプトは、
データ要素の前記順序付リストを出力するステップ、および、
1つ以上の再順序付け動作を実行するステップであり、各再順序付け動作は、データ要素の前記リスト内の2個以上のデータ要素の順序を変更することを含む、ステップ、によって、
前記データ要素の前記再順序付リストを出力するように構成されている、
請求項1に記載の方法。
【請求項3】
前記1つ以上の再順序付け動作を実行するステップは、
前記データ要素の前記順序付リスト内のデータ要素の総数に対応する、再順序付け動作の総数を実行すること、を含む、
請求項2に記載の方法。
【請求項4】
前記第1出力スクリプトは、全体的なシフトを含み、かつ、
それぞれの動作を実行することは、前記全体的なシフト入力に基づいて、前記2個以上のデータ要素を再順序付けすること、を含む、
請求項2または3に記載の方法。
【請求項5】
前記全体的なシフトは、前記第1当事者によって生成される、
請求項4に記載の方法。
【請求項6】
前記全体的なシフトは、複数のシフト入力に基づいて生成され、
前記複数のシフト入力のうち1つ以上は、それぞれのユーザから獲得される、
請求項4または5に記載の方法。
【請求項7】
前記第1出力スクリプトは、シフト入力の順序リストを含み、
それぞれの動作を実行するステップは、前記シフト入力の順序付リストのそれぞれ1つに基づいて前記2個以上のデータ要素を再順序付けするステップを含む、
請求項2または3に記載の方法。
【請求項8】
前記シフト入力の順序付リストのうち1つ以上は、それぞれのユーザから獲得される、
請求項7に記載の方法。
【請求項9】
前記データ要素の順序付リストのうち1つ以上は、それぞれのユーザから獲得される、
請求項1乃至8いずれか一項に記載の方法。
【請求項10】
同じそれぞれのユーザから獲得された、それぞれのデータ要素およびそれぞれのシフト入力は、それぞれに、前記データ要素の順序リストおよび前記シフト入力の前記順序リスト内の対応する位置に配置される、
請求項8または9に記載の方法。
【請求項11】
前記複数のシード入力のうち1つ以上は、それぞれのユーザから獲得される、
請求項1乃至10いずれか一項に記載の方法。
【請求項12】
前記複数のシード入力は、順序付リストのシード入力において配置され、
前記同じそれぞれのユーザから獲得された、それぞれのデータ要素およびそれぞれのシフト入力は、それぞれに、前記シード入力の順序付リストおよび前記シフト入力の順序付リストにおいて対応する位置に配置されている、
請求項8または11に記載の方法。
【請求項13】
前記第1出力スクリプトは、前記複数のシード入力を含み、かつ、
前記第1出力スクリプトは、前記擬似乱数を生成するように構成されている、
請求項1乃至12いずれか一項に記載の方法。
【請求項14】
前記疑似乱数は、前記複数のシード入力に複合ハッシュ関数を適用することによって生成される、
請求項1乃至13いずれか一項に記載の方法。
【請求項15】
前記複数のシード入力に前記複合ハッシュ関数を適用することは、
前記複数のシード入力に基づいてシード全体の生成すること、
第1ハッシュダイジェストを生成するために、第1ハッシュ関数を前記シード全体に適用すること、および、
第2ハッシュダイジェストを生成するために、第2ハッシュ関数を前記シード全体に適用すること、
を含む、請求項14に記載の方法。
【請求項16】
前記第2ハッシュ関数は、モジュロ関数である、
請求項15に記載の方法。
【請求項17】
前記第1トランザクションは、開始トランザクションの出力を参照する入力を含み、
前記開始トランザクションは、それぞれのユーザからのそれぞれのコミットメントを含み、
前記それぞれのコミットメントは、前記それぞれのユーザから獲得された前記シフト入力にコミットする、
請求項6または8に記載の方法。
【請求項18】
前記第1トランザクションは、それぞれの開始トランザクションの出力を参照する複数の入力を含み、
各開始トランザクションは、それぞれのユーザからのそれぞれのコミットメントを含み、
前記それぞれのコミットメントは、前記それぞれのユーザから獲得された前記シフト入力にコミットする、
請求項6または8に記載の方法。
【請求項19】
それぞれのコミットメントは、少なくとも前記それぞれのシフト入力にハッシュ関数を適用することによって生成される、
請求項17または18に記載の方法。
【請求項20】
それぞれのコミットメントは、少なくとも前記それぞれのシフト入力、および、前記同じそれぞれのユーザからの前記それぞれのシフト入力に、ハッシュ関数を適用することによって生成される、
請求項19に記載の方法。
【請求項21】
前記方法は、
第2複数のシード入力を獲得するステップを含み、
前記第2複数のシード入力のうち1つ以上は、それぞれのユーザから獲得され、
前記疑似乱数は、前記複数のシード入力および前記第2複数のシード入力に基づいて生成される、
請求項1乃至20いずれか一項に記載の方法。
【請求項22】
前記データ要素のうち少なくとも1つは、前記第1当事者によって生成される、請求項1乃至21いずれか一項に記載の方法。
【請求項23】
前記データ要素は、公開鍵である、
請求項1乃至22いずれか一項に記載の方法。
【請求項24】
前記第1出力スクリプトは、第1出力を前記選択された公開鍵に対してロックするように構成されている、
請求項23に記載の方法。
【請求項25】
前記方法は、
前記選択されたデータ要素をオフチェーン機能に供給するステップ、を含む、
請求項1乃至24いずれか一項に記載の方法。
【請求項26】
コンピュータ機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理装置と、を含み、
前記メモリは、前記処理装置において動作するように構成されたコードを保管し、
前記コードは、前記処理装置において実行されると、請求項1乃至25のいずれか一項に記載の方法を実施するように構成されている、
コンピュータ機器。
【請求項27】
有形のコンピュータ可読記憶媒体に保管されたコンピュータプログラムであって、
1つ以上のプロセッサによって実行されると、請求項1乃至25いずれか一項に記載の方法を実施させるように構成されている、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーントランザクションを使用してデータ要素を疑似乱数的に選択する方法に関する。選択されたデータ要素は、ブロックチェーンにおいて(例えば、ロッキング状態の一部として)使用され、または、オフチェーンの使用のために抽出され得る。
【背景技術】
【0002】
「ブロックチェーン(“blockchain”)」とは、分散データ構造の一形態を指し、そこでは、ブロックチェーンの重複コピーが、分散ピアツーピア(P2P)ネットワーク(以下、「ブロックチェーンネットワーク(“blockchain network”)」と称される)内の複数のノードそれぞれにおいて維持され、そして、広く公開される。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは、1つ以上のトランザクションを含む。各トランザクション、いわゆる「コインベーストランザクション(“coinbase transaction”)」以外のものは、1つ以上のコインベーストランザクションに戻っていく1つ以上のブロックに拡がり得る順序で、先行するトランザクションに戻って指し示す。コインベースのトランザクションについては、以下で、さらに説明される。ブロックチェーンネットワークにサブミットされるトランザクションは、新しいブロックに含まれる。新しいブロックは、しばしば、「マイニング(“mining”)」と呼ばれるプロセスによって生成され、このことは、「プルーフオブワーク(“proof of work”)を実行するために競合する複数のノードそれぞれを巻き込み、すなわち、ブロックチェーンの新しいブロックに含まれることを待つ順序付けられ、かつ、検証された保留中(pending)のトランザクションの定義されたセットの表現に基づいて、暗号パズルを解決する。ブロックチェーンはいくつかのノードで削除されてよく、そして、ブロックの公開は単なるブロックヘッダの公開によって達成されることが留意されるべきである。
【0003】
ブロックチェーン内のトランザクションは、以下の目的のうち1つ以上を実行するために使用され得る。デジタル資産(すなわち、デジタルトークンの数)を伝達するため、仮想化された台帳またはレジストリ内のエントリのセットをオーダーするため、タイムスタンプエントリを受け取り、かつ、処理するため、かつ/あるいは、インデックスポインタを時間順(time-order)にするため、である。例えば、ブロックチェーンは、また、ブロックチェーンの上に追加的な機能性を積み重ねる(layer)ために使用することもできる。ブロックチェーンプロトコルは、トランザクション内のデータに対する追加的なユーザデータまたはインデックスのストレージを可能にする。単一トランザクション内に保管できる最大データ容量について事前に規定された制限は存在せず、そして、従って、ますます、より複雑なデータを組み込むことができる。例えば、このことは、ブロックチェーン内の電子文書、もしくは、オーディオまたはビデオデータを保管するために使用され得る。
【0004】
ブロックチェーンネットワークのノード(しばしば、「マイナ(“miners”)」と称されるもの)は、分散トランザクション登録および検証プロセスを実行する。これについて、後に、より詳しく説明される。要約すると、このプロセスの最中に、ノードは、トランザクションを検証し、そして、有効なプルーフオブワークソリューションを識別しようと試みるブロックテンプレートの中へそれらを挿入する。一旦、有効なソリューションが見つかると、新しいブロックがネットワークの他のノードへ伝搬され、従って、各ノードが新しいブロックをブロックチェーンに記録できるようになる。ブロックチェーン内にトランザクションを記録させるために、ユーザ(例えば、ブロックチェーンクライアントアプリケーション)は、伝搬されるネットワークのノードの1つにトランザクションを送信する。トランザクションを受信するノードは、検証されたトランザクションを新しいブロックに組み込むプルーフオブワークソリューションを見つけるために競争し得る。各ノードは、同じノードプロトコルを実施するように設定されおり、プロトコルは、トランザクションが有効であるための1つ以上の条件を含んでいる。無効なトランザクションは、ブロックに伝搬されず、また、組み込まれもしない。トランザクションが検証されており、そして、それによってブロックチェーンに受け入れられたと仮定すると、トランザクション(任意のユーザデータを含む)は、ブロックチェーンネットワーク内のノードそれぞれにおいて不変的な公的レコードとして登録され、そして、インデックス付けされたままとなる。
【0005】
最新のブロックを作成するためにプルーフオブワークパズルを成功裡に解決したノードは、典型的に、デジタル資産の総額、すなわち、トークンの数、を配布する「コインベーストランザクション(“coinbase transaction”)」と呼ばれる新しいトランザクションで報酬を受け取る。無効なトランザクションの検出と拒否は、ネットワークのエージェントとして動作し、かつ、不正行為を報告し、ブロックするようにインセンティブを持つ競合ノードの動作によって実施される。情報が広く公開されることにより、ユーザは、ノードのパフォーマンスを継続的に監査することができる。単なるブロックヘッダの公開により、参加者は、ブロックチェーンの進行中の完全性(integrity)を保証することができる。
【0006】
「出力ベース(“output-based”)」モデル(ときどき、UTXOベースモデルと称されるもの)において、所与のトランザクションのデータ構造は、1つ以上の入力および1つ以上の出力を含んでいる。任意の支出可能な出力は、トランザクションの先行するシーケンスから導き出せるデジタル資産の総額を指定する要素を含んでいる。使用可能な出力は、ときどき、UTXO(「未使用トランザクション出力(“unspent transaction output”)」)と称される。出力は、さらに、出力の将来の償還(redemption)のための条件を指定するロッキングスクリプトを含み得る。ロッキングスクリプトは、デジタルトークンまたは資産を検証し、かつ、移転するために必要な条件を定義する述部(predicate)である。トランザクションの各入力(コインベーストランザクション以外のもの)は、先行するトランザクションにおけるそうした出力に対するポインタ(すなわち、参照)を含み、そして、さらに、指し示された出力のロッキングスクリプトを解除するためのアンロッキングスクリプトを含み得る。よって、トランザクションのペアについて、第1および第2トランザクション(または「ターゲット(“target”)」トランザクション)と呼ぶ。第1トランザクションは、デジタル資産の総額を指定する少なくとも1つの出力を含み、そして、出力をアンロックする1つ以上の条件を定義するロッキングスクリプトを含まれている。第2、ターゲットトランザクションは、第1トランザクションの出力に対するポインタ、および、第1トランザクションの出力をアンロックするためのアンロッキングスクリプトを含む、少なくとも1つの入力を含む。
【0007】
そうしたモデルにおいては、第2、ターゲットトランザクションが、伝搬され、ブロックチェーン内に記録されるように、ブロックチェーンネットワークに対して送信されるとき、各ノードで適用される有効性の基準の1つは、アンロッキングスクリプトが第1トランザクションのロッキングスクリプトで定義された1つ以上の条件の全てを満たすことである。もう1つは、第1トランザクションの出力が、以前に有効であった、別のトランザクションによって未だに償還されていないことである。これらの条件のいずれかに従ってターゲットトランザクションが無効であることを発見した任意のノードは、そのトランザクションを伝搬せず(有効なトランザクションとして、しかし、無効なトランザクションを登録する可能性がある)、または、ブロックチェーンに記録される新しいブロックに含めない。
【発明の概要】
【0008】
擬似乱数は、電子ゲーム、コンピュータシミュレーション、および暗号を含む多くのアプリケーションで使用されている。さらに、擬似乱数は、擬似乱数選択、すなわち、データ要素の決定論的であるが予測不可能な選択を行うために使用され得る。このような選択をブロックチェーン上で実行することは、検証可能で、かつ、不変であるため有利である。
【0009】
ブロックチェーントランザクションの出力スクリプト(ロッキングスクリプトとしても、また知られている)は、その出力スクリプトに含まれるデータ要素のリスト(または、支出トランザクション(spending transaction)の入力スクリプトに含まれるデータ要素のリストさえ)からデータ要素を擬似ランダムに選択するように構成することができる。選択は、出力スクリプトに含まれるか、または、出力スクリプトの実行中に生成される擬似乱数に基づいて行われる。
【0010】
しかしながら、本発明者らは、データ要素のリストの初期順序付けが選択にバイアスをかける場合があることを認識した。これは、可能なアプリケーションの数のいずれにおいても望ましくないことであり得る。例えば、選択されたデータ要素がゲームのコンテキストで使用される場合、このことは、プレーヤがゲームに参加することを妨げ得る。または、選択されたデータ要素がコンピュータシミュレーションのコンテキストで使用される場合、シミュレーションの結果の精度が、負の影響を受け得る。別の例として、選択されたデータ要素が暗号のコンテキストで使用される場合、暗号システムのセキュリティが損なわれ得る。
【0011】
従って、擬似乱数が作動する要素のリストの初期順序付けから生じるいかなるバイアスも除去することが望ましい。
【0012】
ここにおいて開示される一態様に従って、ブロックチェーントランザクションを使用してデータ要素を疑似乱数的に選択するコンピュータ実装方法が提供される。前記方法は、第1当事者によって実行され、かつ、データ要素の順序付リストおよび複数のシード入力を獲得するステップと、第1トランザクションを生成するステップと、ブロックチェーンに含めるために、前記第1トランザクションを1つ以上のブロックチェーンノードに対して利用可能にさせるステップを含む。前記第1トランザクションは、第1出力スクリプトを含み、前記第1トランザクションが第2トランザクションの入力スクリプトと共に実行されると、前記第1出力スクリプトは、前記データ要素の再順序付リストを出力し、前記複数のシード入力に基づいて生成された擬似乱数を出力し、かつ、選択されたデータ要素として、前記擬似乱数に対応するデータ要素の前記再順序付リスト内の位置に配置されたデータ要素を出力する、ように構成されている。
【0013】
第1当事者(例えば、オラクル、信頼できる第三者、または、異なるタイプのエンティティ)は、データ要素の順序付リストを獲得する。第1当事者は、順序付リスト自体(リスト内の要素の順序を含む)を生成することができ、または、要素の一部または全部がそれぞれのユーザによって提供され得る。その場合、オーダー(order)は、例えば、各ユーザに関連するインデックスまたは各要素が提供される時刻に基づいてよく、もしくは、第1当事者がオーダーを再び生成し得る。第1当事者は、また、擬似乱数を生成するために使用されるシード入力のセットを獲得する。各ユーザは、それぞれのシード入力を提供することができ、そして、任意的に、第1当事者は、また、シード入力を提供することもできる。
【0014】
第1トランザクションは、擬似乱数に基づいてデータ要素を選択するように構成されたロッキングスクリプトを含んでいる(これは、あらかじめ生成されるか、または、スクリプト実行中に生成される)。擬似乱数は、データ要素のリスト内の位置に対応している。別の言葉で言えば、リスト内にはデータ要素の最大数が存在しており、そして、擬似乱数は、ゼロ(または、実装の詳細に応じて1)と最大数と間の整数である。
【0015】
データ要素の初期順序付けが選択プロセスに影響すると言える。従って、擬似乱数の前にリストを再度順序付けする(re-ordering)ことは、データ要素を選択するために使用され、初期順序付けによって導入される任意のバイアスを除去する。その前提は、優先的な初期順序付けによって選択に好都合に影響を与えることができないことを保証するメカニズムを組み込むことによって、擬似乱数発生器出力の分布における不均一性を緩和することである。
【図面の簡単な説明】
【0016】
本開示の実施形態の理解を助け、かつ、そうした実施形態がどのように実施され得るかを示すために、単なる例示として、添付の図面を参照する。
【
図1】
図1は、ブロックチェーンを実装するためのシステムに係る概略ブロック図である。
【
図2】
図2は、ブロックチェーンに記録され得る、いくつかの例示的なトランザクションを概略的に示している。
【
図3】
図3は、本発明の実施形態を実施するための一つの例示的なシステムの概略ブロック図である。
【
図4】
図4は、乱数を生成するための一つの例示的なスクリプトの実行を概略的に示している。
【
図5】
図5は、開始トランザクション(initiation transaction)の例を示している。
【
図6】
図6は、オラクルトランザクション(oracle transaction)の例を示している。
【
図7】
図7は、オラクルトランザクションの例を示している。
【
図8】
図8は、獲得-償還(winnings-redemption)トランザクションの例を示している。
【
図9】
図9は、オラクルトランザクションによって担保されている資金(fund)を使用するためのスクリプトの実行を概略的に示している。
【
図10】
図10は、2個の異なるハッシュ関数H
1、H
2を含む、複合ハッシュ関数の概略図である。
【
図11】
図11は、ランダムに選択された入力の下でf(x)の出力の分布を示している。
【
図12】
図12は、ドメイン{0,1,…,k-1}を持つ、形式f(x)=x mod Nの一般的な関数の確率分布を示している。
【
図13】
図13は、本発明のいくつかの実施形態に従った、開始トランザクションおよびオラクルトランザクションの例を、それぞれ、概略的に示している。
【
図14】
図14は、本発明のいくつかの実施形態に従った、開始トランザクションおよびオラクルトランザクションの例を、それぞれ、概略的に示している。
【発明を実施するための形態】
【0017】
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示している。システム100は、パケット交換(packet-switched)ネットワーク101、典型的には、インターネットといった広域インターネットワークを含み得る。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)ネットワーク106を形成するように配置された複数のブロックチェーンノード104を含んでいる。図示されていないが、ブロックチェーンノード104は、ほぼ完全なグラフとして配置されてもよい。従って、各ブロックチェーンノード104は、他のブロックチェーンノード104に高度に接続されている。
【0018】
各ブロックチェーンノード104は、ピア(peer)のコンピュータ機器を含み、ノード104の異なるノードは異なるピアに属している。各ブロックチェーンノード104は、1つ以上のプロセッサを含む処理装置を含む。例えば、1つ以上の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサ、および/またはフィールドプログラマブルゲートアレイ(FPGA)、および、特定用途向け集積(ASIC)である。各ノードは、また、メモリ、すなわち、非一時的なコンピュータで読取り可能な媒体またはメディアの形態でのコンピュータで読取り可能な記憶装置を備える。メモリは、1つ以上のメモリ媒体を使用する1つ以上のメモリユニットを含み得る。例えば、ハードディスクといった磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリ、またはEEPROMといった電子媒体、および/または、光ディスクドライブといった光媒体である。
【0019】
ブロックチェーン150は、データ151のブロックのチェーンを含み、ブロックチェーン150のそれぞれのコピーは、分散またはブロックチェーンネットワーク106内の複数のブロックチェーンノード104それぞれで維持されている。上述のように、ブロックチェーン150のコピーを維持することは、必ずしもブロックチェーン150を完全に保管することを意味しない。代わりに、ブロックチェーン150は、各ブロックチェーンノード150が各ブロック151のブロックヘッダ(以下に説明される)を保管している限り、データをプルーンすること(pruned of data)ができる。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、ここで、このコンテキストにおけるトランザクションは、一種のデータ構造を参照する。データ構造の性質は、トランザクションモデルまたはスキームの一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、全体を通して、1つの特定のトランザクションプロトコルを使用する。トランザクションプロトコルの1つの一般的なタイプにおいて、各トランザクション152のデータ構造は、少なくとも1つの入力および少なくとも1つの出力を含む。各出力は、一例として出力が暗号的にロックされているユーザ103のものである、デジタル資産の総計を表す総計(amount)を特性として指定する(ロックを解除し、かつ、それによって償還または消費するために、そのユーザの署名または他のソリューションを必要とする)。各入力は、先行トランザクション152の出力に戻って指し示し、それによって、トランザクションをリンクしている。
【0020】
各ブロック151は、また、ブロック151へのシーケンス的順序(sequential order)を定義するように、チェーン内で以前に生成されたブロック151への戻りを指し示すブロックポインタ155を含む。各トランザクション152(コインベーストランザクション以外)は、トランザクションのシーケンスに対する順序を定義するように、以前のトランザクションへのポインタを含む(トランザクション152のN.B.シーケンスは分岐可能である)。ブロック151のチェーンは、チェーン内の第1ブロックであった生成ブロック(genesis block、Gb)153に戻る。チェーン150内で初期の1つ以上のオリジナルトランザクション152は、先行トランザクションではなく生成ブロック153を指し示していた。
【0021】
ブロックチェーンノード104それぞれは、トランザクション152を他のブロックチェーンノード104に転送するように構成されており、そして、それによって、トランザクション152は、ネットワーク106を通して伝搬される。各ブロックチェーンノード104は、ブロック151を生成し、そして、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに保管するように構成されている。各ブロックチェーンノード104は、また、ブロック151に組み込まれるのを待つトランザクション152の順序付セット(または「プール(“pool”)」)154も維持する。順序付プール154は、しばしば、「メンプール(“mempool”)」と呼ばれる。本明細書におけるこの用語は、特定のブロックチェーン、プロトコル、またはモデルに限定するように意図されていない。これは、ノード104が有効として受け入れ、ノード104が同じ出力を消費しようとする他のトランザクションを受け入れないように義務付けられたトランザクションの順序付セットを参照する。
【0022】
所与の現在のトランザクション152jにおいて、入力(または、各入力)は、トランザクションのシーケンスにおいて先行トランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還(redeemed)されること、または「支払われる(“spent”)」ことを指定する。一般的に、先行トランザクションは、順序付セット154または任意のブロック151内の任意のトランザクションであり得る。先行トランザクション152iは、必ずしも現在のトランザクション152jが作成されるとき、またはネットワーク106に送信されるときでさえ存在する必要はないが、現在のトランザクションが有効であるために、先行トランザクション152iが、存在し、検証される必要がある。従って、ここにおいては、「先行(“preceding”)」とは、ポインタによってリンクされた論理的な順序での先行を指し、必ずしも時間的な順序で作成または送信する時刻を指すのではない。そして、従って、トランザクション152i、152jがアウトオブオーダー(out-of-order)に作成または送信されることを必ずしも排除しない(孤立(orphan)トランザクションに関する後の説明を参照のこと)。先行トランザクション152iは、同様に、先行トランザクションまたは先行トランザクションと呼ばれ得る。
【0023】
現在のトランザクション152jの入力は、また、入力認証(input authorisation)を含む。例えば、先行トランザクション152iの出力がロックされているユーザ103aの署名である。次に、現在のトランザクション152jの出力は、新しいユーザまたはエンティティ103bに暗号的(cryptographically)にロックすることができる。従って、現在のトランザクション152jは、先行トランザクション152iの入力に定義された総計を、現在のトランザクション152jの出力に定義された新しいユーザまたはエンティティ103bに移転することができる。ある場合に、トランザクション152は、複数のユーザまたはエンティティ間で入力総計を分割するために複数の出力を有してもよい(そのうちの一人は、変更を与えるために元のユーザまたはエンティティ103aであり得る)。場合によって、トランザクションは、また、複数の入力を有し、1つ以上の先行トランザクションの複数の出力から総計を集め、現在のトランザクションの1つ以上の出力に再配分することもできる。
【0024】
ビットコインといった出力ベースのトランザクションプロトコルに従って、個人ユーザまたは組織といった、当事者103が新しいトランザクション152jを実行することを望む場合、実行する当事者は、(手動で、または、当事者が利用する自動化プロセスによって)そのコンピュータ機器102から受信者に新しいトランザクションを送信する。実行する当事者または受信者は、最終的に、このトランザクションをネットワーク106のブロックチェーンノード104の1つ以上に送信する(今日では、典型的に、サーバまたはデータセンタであるが、原則として、他のユーザ端末であってよい)。また、新規トランザクション152jを実行する当事者103は、トランザクションを1つ以上のブロックチェーンノード104に対して、いくつかの例では、受信者に対して、直接的に送信することができることも除外されない。トランザクションを受信するブロックチェーンノード104は、各ブロックチェーンノード104に適用されるブロックチェーンノードプロトコルに従って、トランザクションが有効であるか否かをチェックする。ブロックチェーンノードプロトコルは、典型的に、新規トランザクション152jにおける暗号署名が、トランザクション152の順序付けされたシーケンスにおける先行トランザクション152iに依存する期待される署名と一致することをチェックするために、ブロックチェーンノード104を必要とする。そうした出力ベースのトランザクションプロトコルにおいて、これは、新しいトランザクション152jの入力に含まれる当事者103の暗号署名または他の承認(authorisation)が、新しいトランザクションが割り当てる先行トランザクション152iの出力に定義された条件と一致することをチェックすることを含み得る。ここで、この条件は、典型的に、新しいトランザクション152jの入力における暗号署名または他の承認が、新しいトランザクションの入力がリンクされる先行トランザクション152iの出力をアンロックすることを少なくともチェックすることを含む。条件は、少なくとも部分的に、先行トランザクション152iの出力に含まれるスクリプトによって定義されてよい。代替的に、単純にブロックチェーンノードプロトコルだけでフィックス(fix)することができ、または、これらの組み合わせによることもある。いずれにせよ、新しいトランザクション152jが有効であれば、ブロックチェーンノード104は、ブロックチェーンネットワーク106内の1つ以上の他のブロックチェーンノード104に対してそれを転送する。これらの他のブロックチェーンノード104は、同じブロックチェーンノードプロトコルに従って同じテストを適用し、かくして、新しいトランザクション152jを1つ以上のさらなるノード104に転送する。このようにして、新しいトランザクションは、ブロックチェーンノード104のネットワーク全体に伝搬される。
【0025】
出力ベースのモデルにおいて、所与の出力(例えば、UTXO)が割り当てられるか(assigned)(例えば、支払われる(spent))否かの定義は、別の、ブロックチェーンノードプロトコルに従った前向き(onward)トランザクション152jの入力によって、いまだ有効に償還されているか否かである。トランザクションが有効であるための別の条件は、それが償還を試みる先行トランザクション152iの出力が別のトランザクションによって既に償還されていないことである。再度、有効でない場合、トランザクション152jは、伝搬されず(有効でないとしてフラグ付けされ、または、アラートのため伝播されていない場合)、または、ブロックチェーン150に記録されない。このことは、同じトランザクションのアウトプットを一度ならず支払おうと試みる二重の割り当てを防ぐ。一方で、アカウントベースのモデルは、アカウントバランスを維持することによって、二重支払を防ぐ。再び、トランザクションの定義された順序が存在するので、アカウントバランスは、いつでも単一の定義された状態を有している。
【0026】
トランザクションの検証に加えて、ブロックチェーンノード104の少なくとも一部は、また、「プルーフオブワーク(“proof-of-work”)」によってサポートされている、マイニングとして一般的に呼ばれるプロセスにおけるトランザクションのブロックを最初に作成するように競合している。マイニングノード104では、ブロックチェーン150に記録されているブロック151にまだ現れていない有効なトランザクションの順序付プール154に対して新しいトランザクションが追加される。次いで、ブロックチェーンノードは、暗号パズルを解決しようと試みることによって、トランザクションの順序付セット154からトランザクション152の新しい有効なブロック151を組み立てようと競合する。典型的には、これは、ナンス(“nonce”)が保留中のトランザクションの順序付プール154の表現と連結され、ハッシュ化されると、ハッシュの出力が所定の条件を満たすように、「ナンス」値を検索することを含む。例えば、所定の条件は、ハッシュの出力が、所定の数の先頭ゼロを有することであってよい。これは、プルーフオブワークパズルの1つにすぎず、他のタイプは除外されないことに注意すること。ハッシュ関数の特性は、入力に関して予測不可能な出力を持つことである。従って、この探索は、ブルートフォース(brute force)によってのみ実行することができ、従って、パズルを解決しようとしている各ブロックチェーンノード104において、相当量の処理リソースを消費している。
【0027】
パズルを解決するための第1ブロックチェーンノード104は、これをネットワーク106に通知し、その解をプルーフとして提供し、これは、次いで、ネットワーク内の他のブロックチェーンノード104によって容易にチェックすることができる(一旦、ハッシュに対する解が与えられると、それがハッシュの出力を条件に合致させることをチェックすることは簡単である)。第1ブロックチェーンノード104は、ブロックを受け入れる他のノードの閾値コンセンサスにブロックを伝搬し、従って、プロトコルルールを実施する。トランザクションの順序付セット154は、ブロックチェーンノード104それぞれによってブロックチェーン150内の新しいブロック151として記録される。ブロックポインタ155は、また、チェーン内で以前に生成されたブロック151n-1に戻って指し示す新しいブロック151nにも割り当てられる。プルーフオブワークソリューションを作成するために必要とされる、例えば、ハッシュの形式での、かなりの労力は、ブロックチェーンプロトコルのルールに従うように第1ド104の意図を信号化する。そうしたルールには、以前に検証されたトランザクションと同じ出力を割り当てる場合に、トランザクションを有効として受け容れないことを含む。一旦生成されると、ブロック151は、ブロックチェーンネットワーク106内のブロックチェーンノード104それぞれで認識され、そして、維持されるので、修正することができない。ブロックポインタ155は、また、ブロック151に対して逐次的(sequential)な順序を課す。トランザクション152は、ネットワーク106内の各ブロックチェーンノード104において順序付ブロックに記録されるので、これは、従って、トランザクションの不変の公開台帳を提供する。
【0028】
パズルを解決するために、いつでも異なるブロックチェーンノード104が、いつソリューションの探索を開始したか、または、トランザクションが受信された順序に依存して、いつでも、まだ公表されていないトランザクション154のプールの異なるスナップショットに基づいて、そうすることができることに注意すること。誰がそれぞれのパズルを解くかは、最初に、どのトランザクション152が次の新しいブロック151nに含まれ、どの順序で含まれるかを定義し、そして、未公表のトランザクションの現在のプール154が更新される。次に、ブロックチェーンノード104は、新たに定義された未公表のトランザクションの順序付プール154からブロックを生成するために、レースを継続する。また、生じ得る任意の「フォーク(“fork”)」を解決するためのプロトコルも存在する。それは、2個のブロックチェーンノード104が互いの非常に短い時間内にそれらのパズルを解決し、ブロックチェーンの相反する見方(conflicting view)がノード104間で伝播されるようにするものである。要するに、フォークのどちらの突起(prong)が伸びても、最も長い方が最終的なブロックチェーン150になる。このことは、同じトランザクションが両方のフォークに現れるので、ネットワークのユーザまたはエージェントには影響を与えないことに注意すること。
【0029】
ビットコインブロックチェーン(および、他の大部分のブロックチェーン)に従って、新しいブロック104を成功裡に構築するノードは、デジタル資産の追加の定義された量(quantity)を配布する新しい特別な種類のトランザクションにおいて、デジタル資産の追加の、受け入れられた総計(amount)を新たに割り当てる能力を与えられる(エージェント間、または、あるエージェントまたはユーザから別のユーザへデジタル資産の総計を移転するユーザ間のトランザクションとは対照的に)。この特別なタイプのトランザクションは、たいてい、「コインベーストランザクション(“coinbase transaction”)」と呼ばれるが、「生成トランザクション(“generation transaction”)」とも呼ばれる。それは、典型的に、新しいブロック151nの第1トランザクションを形成する。プルーフオブワークは、新しいブロックを構成するノードの意図を、プロトコルルールに従い、この特別なトランザクションが後に償還される(redeemed)ことを可能にするように信号化する。ブロックチェーンプロトコルルールは、この特別なトランザクションが償還される前に、例えば、100ブロックの成熟期間(maturity period)を必要とし得る。しばしば、通常の(非生成)トランザクション152は、そのトランザクションが発行されたブロック151nを生成したブロックチェーンノード104にさらに報酬を与えるために、その出力の1つにおいて追加のトランザクション報酬(fee)を指定する。この報酬は、通常、「トランザクション料(“transaction fee”)」と呼ばれ、そして、以下で説明される。
【0030】
トランザクションの検証(validation)および公表に含まれるリソースのせいで、典型的に、少なくともブロックチェーンノード104それぞれは、1つ以上の物理的サーバユニット、またはデータセンタ全体を含むサーバの形態をとる。しかしながら、原則として、任意の所与のブロックチェーンノード104は、ユーザ端末、または、一緒にネットワーク化されたユーザ端末のグループの形態をとることができる。
【0031】
各ブロックチェーンノード104のメモリは、それぞれの役割を実行し、そして、ブロックチェーンノードプロトコルに従ってトランザクション152を処理するために、ブロックチェーンノード104の処理装置上で動作するように構成されたソフトウェアを記憶している。ここにおいてブロックチェーンノード104に帰属される任意の動作は、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されるだろう。ノードソフトウェアは、アプリケーション層、または、オペレーティングシステム層またはプロトコル層といった下位レイヤ、もしくは、これらの任意の組み合わせで、1つ以上のアプリケーションにおいて実装することができる。
【0032】
また、ネットワーク101に接続されているのは、ユーザを消費する(consuming)役割の複数の当事者103それぞれのコンピュータ機器102である。これらのユーザは、ブロックチェーンネットワーク106と対話(interact)することができるが、トランザクションの検証またはブロックの構築には参加しない。これらのユーザまたはエージェント103のいくつかは、トランザクションの送信者および受信者として動作することができる。他のユーザは、必ずしも送信者または受信者として動作することなく、ブロックチェーン150と対話することができる。例えば、いくつかの当事者は、ブロックチェーン150のコピーを保管するストレージエンティティとして機能することができる(例えば、ブロックチェーンノード104からブロックチェーンのコピーを獲得している)。
【0033】
当事者103の一部または全部は、例えばブロックチェーンネットワーク106の上にオーバーレイされたネットワークなど、異なるネットワークの一部として接続されてよい。ブロックチェーンネットワークのユーザ(しばしば、「クライアント(“clients”)」と称される)は、ブロックチェーンネットワーク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当事者」とそれぞれに置き換えることができることが理解されるだろう。
【0034】
各当事者103のコンピュータ機器102は、1つ以上のプロセッサを含むそれぞれの処理装置を備えている。例えば、1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/または、FPGAである。各当事者103のコンピュータ機器102は、さらに、メモリ、すなわち、非一時的なコンピュータで読取り可能な媒体またはメディアの形態のコンピュータで読取り可能なストレージ装置を備える。このメモリは、1つ以上のメモリ媒体を使用する1つ以上のメモリユニットを含み得る。例えば、ハードディスクといった磁気媒体、SSD、フラッシュメモリ、またはEEPROMといった電子媒体、および/または、光ディスクドライブといった光媒体である。各当事者103のコンピュータ機器102上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーション105それぞれのインスタンスを含むソフトウェアを保管する。ここにおいて所与の当事者103に帰属された任意の動作は、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されるだろう。各当事者103のコンピュータ機器102は、少なくとも1つのユーザ端末を備えている。例えば、デスクトップまたはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチといったウェアラブルデバイスである。所与の当事者103のコンピュータ機器102は、また、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースといった、1つ以上の他のネットワーク化されたリソースを含んでもよい。
【0035】
クライアントアプリケーション105は、最初に、適切なコンピュータで読取り可能な記憶媒体またはメディアにおいて、任意の所与の当事者103のコンピュータ機器102に提供され得る。例えば、サーバからダウンロードされたもの、または、リムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピー(登録商標)ディスクまたはテープ、CDまたはDVD ROMといった光ディスク、もしくは、リムーバブル光学ドライブ、等である。
【0036】
クライアントアプリケーション105は、少なくとも「ウォレット(“wallet”)」機能を備える。このことは、2つの主な機能を有している。これらの1つは、それぞれの当事者103が、1つ以上のビットコインノード104にトランザクション152を作成し、許可し(例えば、署名)、そして、送信し、次いで、ブロックチェーンノード104のネットワーク全体に伝搬され、それによってブロックチェーン150に含まれることを可能にすることである。他方は、現在所有しているデジタル資産の総計をそれぞれの当事者に戻って報告することである。出力ベースのシステムにおいて、この第2機能は、問題の当事者に属するブロックチェーン150全体にわたり散在する様々なトランザクション152の出力に定義される総計を照合することを含む。
【0037】
注記:様々なクライアント機能は、所与のクライアントアプリケーション105に統合されているものとして説明することができるが、これは、必ずしも限定的なものではなく、代わりに、ここにおいて説明されている任意のクライアント機能は、例えば、APIを介したインターフェース、または、一方が他方へのプラグインであるような、2つ以上の別個のアプリケーションのスイート(suite)で実装することができる。より一般的に、クライアント機能は、アプリケーション層、または、オペレーティングシステムといった下位層、もしくは、これらの任意の組み合わせで実装することができる。以下に、クライアントアプリケーション105に関して説明されるが、これは限定的ではないことが理解されるだろう。
【0038】
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、ネットワーク106のブロックチェーンノード104の少なくとも1つに動作可能に結合されている。これにより、クライアント105のウォレット機能は、トランザクション152をネットワーク106に送信することができる。クライアント105は、また、ブロックチェーンノード104にコンタクトして、それぞれの当事者103が受領者である任意のトランザクションについてブロックチェーン150にクエリ(query)することができる(もしくは、実際には、ブロックチェーン150内の他の当事者のトランザクションを検査する。実施形態でブロックチェーン150は、部分的にその公衆の目に触れてトランザクションの信頼を提供する公共施設(public facility)だからである)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルに従って、トランザクション152を形成し、かつ、送信するように構成されている。上記のように、各ブロックチェーンノード104は、ブロックチェーンノードプロトコルに従って、トランザクション152を検証するように構成されたソフトウェアを実行し、ブロックチェーンネットワーク106全体にトランザクション152を伝播させるためにトランザクション152を移転する。トランザクションプロトコルおよびノードプロトコルは、相互に対応しており、そして、所与のトランザクションプロトコルは、所与のノードプロトコルと共に、所与のトランザクションモデルを一緒に実装する。同じトランザクションプロトコルが、ブロックチェーン150内の全てのトランザクション152について使用される。同じノードプロトコルは、ネットワーク106内の全てのノード104によって使用される。
【0039】
所与の当事者103、例えばアリス、が、ブロックチェーン150に含まれるように新しいトランザクション152jを送信することを望む場合、彼女は、関連するトランザクションプロトコルに従って(彼女のクライアントアプリケーション105においてウォレット機能を使用して)、新しいトランザクションを策定する。彼女は、次に、クライアントアプリケーション105からトランザクション152を、彼女が接続されている1つ以上のブロックチェーンノード104の1つに送信する。例えば、これは、アリスのコンピュータ102に最も近いか、または、最も良好に接続されているブロックチェーンノード104であってよい。任意の所与のブロックチェーンノード104が新しいトランザクション152jを受信すると、それは、ブロックチェーンノードプロトコルおよびそれぞれの役割に従って処理する。このことは、新たに受信されたトランザクション152jが「有効(“valid”)」であるための特定の条件を満たすか否かを、最初にチェックすることを含み、その例について、手短に、より詳細が説明される。いくつかのトランザクションプロトコルにおいて、検証のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに設定可能である。代替的に、条件は、単にノードプロトコルの組み込み機能であってよく、または、スクリプトとノードプロトコルの組み合わせによって定義されてもよい。
【0040】
新たに受信されたトランザクション152jが、有効であるとみなされるテストを通過(pass)するという条件(すなわち、「検証済み(validated)」である条件)で、トランザクション152jを受信する任意のブロックチェーンノード104は、そのブロックチェーンノード104に維持されているトランザクション154の順序付セットに、新たに有効とされたトランザクション152を追加する。さらに、トランザクション152jを受信する任意のブロックチェーンノード104は、検証済みトランザクション152をネットワーク106内の1つ以上の他のブロックチェーンノード104へ伝搬する。各ブロックチェーンノード104は同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、このことは、ネットワーク106全体に間もなく伝搬されることを意味する。
【0041】
一旦、所与のブロックチェーンノード104で維持される保留中のトランザクション154の順序付プールに入ると、そのブロックチェーンノード104は、新しいトランザクション152を含むプール154のそれぞれのプールの最新バージョンのプルーフオブワークのパズルを解くための競合を開始する(他のブロックチェーンノード104は、トランザクション154の異なるプールに基づいてパズルを解こうとしているが、最初にそこに到達した者は誰でも、最新のブロック151内に含まれるトランザクションのセットを定義することを思い出すこと。最終的に、ブロックチェーンノード104は、アリスのトランザクション152jを含む順序付プール154の一部のパズルを解く)。一旦、新しいトランザクション152jを含むプール154についてプルーフオブワークが行われると、それはブロックチェーン150内のブロック151のうち1つの不変の一部となる。各トランザクション152は、以前のトランザクションへ戻るポインタを含むので、トランザクションの順序も、また、不変的に記録される。
【0042】
異なるブロックチェーンノード104は、最初に所与のトランザクションの異なるインスタンスを受信することができ、そして、従って、1つのインスタンスが新しいブロック151において公開される前に、どのインスタンスが「有効(“valid”)」であるかについて相反する見方を有し、その時点で、全てのブロックチェーンノード104は、公表されたインスタンスが唯一の有効なインスタンスであることに同意する。ブロックチェーンノード104が1個のインスタンスを有効として受け入れ、次いで、2個のインスタンスがブロックチェーン150に記録されていることを発見した場合に、そのブロックチェーンノード104は、これを受け入れなければならず、そして、最初に受け入れたインスタンス(すなわち、ブロック151において公開されていないインスタンス)を破棄する(すなわち、無効として扱う)。
【0043】
いくつかのブロックチェーンネットワークによって運用される別のタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース(“account-based”)」プロトコルと称され得る。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスにおいて先行トランザクションのUTXOに戻って参照することによって、むしろ、アカウントの絶対的な残高(balance)を参照することによって、移転される総計を定義しない。全てのアカウントの現在の状態は、そのネットワークのノードによって、ブロックチェーンに分離して保管され、そして、常に更新される。そうしたシステムにおいて、トランザクションは、アカウントの実行中のトランザクションタリー(transaction tally)(「ポジション(“position”)」としても呼ばれるもの)を使用して順序付けされる(ordered)。この値は、送信者が暗号署名の一部として署名し、そして、トランザクション参照計算の一部としてハッシュされる。加えて、任意的なデータフィールドも、また、トランザクションに署名することができる。このデータフィールドは、例えば、以前のトランザクションIDがデータフィールドに含まれている場合、以前のトランザクションに戻って指し示すことができる。
【0044】
UTXOベースのモデル
図2は、トランザクションプロトコルの例を示している。このことは、UTXOベースのプロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つ以上のトランザクション152を含んでいる)。以下は、出力ベースのプロトコルまたは「UTXO」ベースのプロトコルを参照して説明されている。しかしながら、このことは、全ての可能な実施形態に限定されるものではない。例示的なUTXOベースのプロトコルがビットコインを参照して説明されているが、他の例示的なブロックチェーンネットワークにおいても同様に実装され得ることに注意すること。
【0045】
UTXOベースのモデルにおいて、各トランザクション(「Tx」)152は、1つ以上の入力202および1つ以上の出力203を含むデータ構造を備える。各出力203は、未支払(unspent)のトランザクション出力(UTXO)を含んでよく、それは、別の新しいトランザクションの入力202のソースとして使用することができる(UTXOが既に償還されてはいない場合)。UTXOは、デジタル資産の総計を指定する値を含んでいる。これは、分散台帳(distributed ledger)におけるトークンのセット数を表している。UTXOは、また、他の情報の中でも、それが来たトランザクションのトランザクションIDを含んでもよい。トランザクションデータ構造は、また、ヘッダ201を含んでもよく、入力フィールド202および出力フィールド203のサイズの指示(indicator)を含み得る。ヘッダ201は、また、トランザクションのIDを含み得る。実施形態において、トランザクションIDは、トランザクションデータ(トランザクションID自体を除く)のハッシュであり、ノード104に提出された生の(raw)トランザクション152のヘッダ201に保管される。
【0046】
アリス103aは、問題のデジタル資産の総計をボブ103bに移転するトランザクション152jを作成したいと考えていると仮定する。
図2では、アリスの新しいトランザクション152jが「Tx
1」とラベル付けされている。このことは、先行トランザクション152iの出力203においてアリスにロックされているデジタル資産の総計を順番にとり、そして、これの少なくとも一部をボブに移転する。先行トランザクション152iは、
図2では「Tx
0」とラベル付けされており、Tx
0およびTx
1は、単なる任意のラベルである。これらは、必ずしも、Tx
0がブロックチェーン151の第1トランザクションであること、または、Tx
1がプール154内で直近の次のトランザクションであることを意味するものではない。Tx
1は、アリスにロックされた未支払の出力203を依然として有する、任意の先行する(つまり、先立つ(antecedent))トランザクションに戻って指し示すことができる。
【0047】
先行トランザクションTx0は、アリスがその新しいトランザクションTx1を作成する時点、または、少なくとも彼女がそれをネットワーク106に送信する時点で、既に検証され、ブロックチェーン150のブロック151に含まれていてよい。それは、その時点で既にブロック151のうち1つに含まれていてよい。または、順序セット(order set)154内でまだ待機していてもよく、その場合には、そのうちに新しいブロック151に含まれることになる。代替的に、Tx0およびTx1が作成されて、一緒にネットワーク106に送信され得るし、または、ノードプロトコルが「孤立(“orphan”)」トランザクションのバッファリングを許可する場合、Tx0はTx1の後でさえ送信され得る。用語「先行(“preceding”)」および「後続(“subsequent”)」は、ここにおいてトランザクションのシーケンスのコンテキストにおいて使用されるように、トランザクションで指定されたトランザクションポインタによって定義されるシーケンスにおけるトランザクションの順序を指す(どのトランザクションポインタが他のトランザクションに戻って指し示すか、など)。それらは、「前任者(“predecessor”)」と「後任者(“successor”)」、「前者(“antecedent”)」「後者(“descendant”)」、「親(“parent”)」と「子(“child”)」、等と均等に置き換えることができる。このことは、必ずしもそれらが生成され、ネットワーク106に送信され、または、任意の所与のブロックチェーンノード104に到着する順序を意味するものではない。それにもかかわらず、先行トランザクション(前任者トランザクションまたは「親」)を指し示す後続トランザクション(後任者トランザクションまたは「子」)は、親トランザクションが検証されるまで、および、検証されなければ、検証されない。親の前にブロックチェーンノード104に到着した子は、孤立(orphan)とみなされる。それは、ノードプロトコルおよび/またはノードの行動に応じて、破棄され、または、親を待つために一定時間、破棄またはバッファリングされ得る。
【0048】
先行トランザクションTx0の1つ以上の出力203のうち1つは、ここにおいてUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の総計を指定する値、および、後続トランザクションが検証されるため、そして、従って、UTXOが成功裡に償還されるために、後続トランザクションの入力202においてアンロッキングスクリプトによって満足されねばならない条件を定義するロッキングスクリプトを含む。典型的に、ロッキングスクリプトは、特定の当事者(それが含まれているトランザクションの受益者(beneficiary))に対して総計をロックする。すなわち、ロッキングスクリプトは、アンロッキング条件を定義し、典型的に、後続トランザクションの入力におけるアンロッキングスクリプトは、先行トランザクションがロックされる当事者の暗号署名を含む、という条件を含む。
【0049】
ロッキングスクリプト(別名、scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そうした言語の特定の例は、ブロックチェーンネットワークによって使用される、「スクリプト(“Script”)」(キャピタルS)と呼ばれる。ロッキングスクリプトは、トランザクション出力203を支払うために必要な情報、例えば、アリスの署名の必要条件、を指定する。アンロッキングスクリプトがトランザクションの出力に現れる。アンロッキングスクリプト(別名、scriptSig)は、ロッキングスクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えば、それは、ボブの署名を含んでよい。アンロッキングスクリプトは、トランザクションの入力202に現れる。
【0050】
図示の例において、Tx0の出力203のUTXO0は、ロッキングスクリプト[Checksig PA]を含み、このことは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続トランザクションが有効であるために)、アリスの署名Sig PAを必要とする。[Checksig PA]は、アリスの公開鍵と秘密鍵のペアからの公開鍵PAの表現(つまり、ハッシュ)を含む。Tx1の入力202は、Tx1に戻って指し示すポインタを含む(例えば、そのトランザクションIDである、TxID0を用い、それは実施形態においてトランザクションTx0全体のハッシュである)。Tx1の入力202は、Tx0の任意の他の可能な出力の中でそれを特定するために、Tx0内のUTXO0を特定するインデックス(index)を含む。Tx1の入力202は、さらに、鍵ペアからのアリスの秘密鍵をデータの既定の部分に適用することによって作成された、アリスの暗号署名を含むアンロッキングスクリプト<Sig PA>を含む(ときどき、暗号では「メッセージ(“message”)」と呼ばれる)。有効な署名を提供するためにアリスが署名する必要があるデータ(または「メッセージ」)は、ロッキングスクリプト、ノードプロトコル、またはこれらの組み合わせによって定義される。
【0051】
新しいトランザクションTx1がブロックチェーンノード104に到着すると、ノードは、ノードプロトコルを適用する。このことは、ロッキングスクリプトとアンロッキングスクリプトを一緒に実行して、アンロッキングスクリプトがロッキングスクリプト内で定義されている条件を満たしているか否かをチェックすることを含む(ここで、この条件は1つ以上の基準を含み得る)。実施形態において、このことは、2つのスクリプトを連結することを含む。
<Sig PA><PA>||[Checksig PA]
ここで、「||」は連結を表し、そして、「<...>」はデータをスタック上に置くことを意味し、そして、「[...]」はロッキングスクリプト(この例においてスタックベースの言語)で構成される関数である。同様に、スクリプトは、スクリプトを連結するのではなく、共通のスタックで、次々と実行されてよい。いずれにせよ、一緒に実行する場合、スクリプトは、Tx0の出力のロッキングスクリプトに含まれるように、アリスの公開鍵PAを使用して、Tx1の入力のアンロッキングスクリプトが、データの期待される部分に署名するアリスの署名を含むことを認証する。この認証を実行するためには、データ自体の期待される部分(「メッセージ(“message”)」)も、また、順序に含める必要がある。実施形態において、署名されたデータは、Tx1の全体を含む(よって、別個の要素は、クリアであるデータ(data in the clear)の署名された部分を指定することに含める必要がある。それが、既に本質的に存在するからである)。
【0052】
公開-秘密(public-private)暗号による認証の詳細は、当業者にとって周知であろう。基本的に、アリスが秘密鍵を使用してメッセージに署名した場合、アリスの公開鍵およびクリアであるメッセージが与えられ、ノード104といった別のエンティティは、そのメッセージがアリスによって署名されていなければならないことを認証することができる。署名することは、典型的に、メッセージをハッシュすること、ハッシュに署名すること、および、署名としてメッセージ上にこれをタグ付けすることを含み、従って、公開鍵の任意の所有者が署名を認証することを可能にしている。従って、ここにおける、データの特定の部分またはトランザクションの一部、などに署名することに対する言及は、実施形態において、そのデータの部分またはトランザクションの一部のハッシュに署名することを意味することができることに注意すること。
【0053】
Tx1のアンロッキングスクリプトが、Tx0のロッキングスクリプトで指定された1つ以上の条件を満たす場合(例で示されるように、アリスの署名がTx1で提供され、かつ、認証されている場合)、ブロックチェーンノード104は、Tx1が有効であるとみなす。このことは、ブロックチェーンノード104が保留中(pending)トランザクションの順序付プール(ordered pool)154にTx1を追加することを意味する。ブロックチェーンノード104は、また、トランザクションTx1をネットワーク106内の1つ以上の他のブロックチェーンノード104に移転し、その結果、ネットワーク106全体に伝搬されることになる。一旦、Tx1が検証され、かつ、ブロックチェーン150に含まれると、このことは、支払としてTx0からUTXO0を定義する。Tx1は、未払いのトランザクション出力203を支払う場合にだけ有効であることに留意すること。別のトランザクション152によって既に支払われた出力を支払おうとする場合、Tx1は、たとえ他の全ての条件が満たされていても無効となる。従って、ブロックチェーンノード104は、また、先行トランザクションTx0において参照されたUTXOが既に使用されているか否か(既に別の有効なトランザクションへの有効な入力を形成しているか否か)もチェックする必要がある。これが、ブロックチェーン150にとってトランザクション152に定義された順序を課すことが重要である理由の1つである。実際に、所与のブロックチェーンノード104は、トランザクション152が支払われたUTXO 203をマーキングしている別個のデータベースを維持することができるが、最終的には、UTXOが支払われたか否かを定義するものは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力が既に形成されているか否かである。
【0054】
所与のトランザクション152の全ての出力203で指定された総量が、その全ての入力202によって指摘された総量よりも大きい場合、これは、大部分のトランザクションモデルにおける無効性の別の根拠である。従って、そうしたトランザクションは、ブロック151に伝搬されず、含まれない。
【0055】
UTXOベースのトランザクションモデルでは、所与のUTXOを全体として使用する必要があることに注意すること。UTXOで定義されている総計のうち、別の小部分(fraction)が支払われている一方で、小部分を「残しておく(“leave behind”)」ことはできない。しかしながら、UTXOの総計は、次のトランザクションの複数の出力に分割できる。例えば、Tx0内のUTXO0で定義された総計は、Tx1内の複数のUTXOに分割できる。従って、アリスがボブにUTXO0で定義されている総計の全てを与えることを望まない場合、彼女は、残りの量を使って、Tx1の第2出力で自分自身にお釣り(change)を与え、または、別の当事者に支払うことができる。
【0056】
実際には、アリスは、また、たいてい、彼女のトランザクション104をブロック151に成功裡に組み込むビットコインノード104に対する報酬(fee)を含める必要がある。アリスがそうした報酬を含めない場合、Tx0は、ブロックチェーンノード104によって拒否されることがあり、従って、技術的には有効であるが、伝播されず、そして、ブロックチェーン150に含まれないことがある(ノードプロトコルは、ブロックチェーンノード104が望まない場合に、トランザクション152を受け入れるよう強制しない)。いくつかのプロトコルにおいて、トランザクション報酬は、独自の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、入力202によって示される全ての総計と、所与のトランザクション152の出力203で指定される全ての総計との間の差が、トランザクションを発行するブロックチェーンノード104に自動的に与えられる。例えば、UTXO0に対するポインタがTx1への唯一の入力であり、かつ、Tx1は1つの出力UTXO1しか持っていないとする。UTXO0で指定されたデジタル資産の総計がUTXO1で指定された総計より多い場合、その差は、プルーフオブワークレースに勝ったノード104によって割り当てられて、UTXO1を含むブロックを作成することができる。しかしながら、代替的または追加的に、トランザクション報酬が、トランザクション152のUTXO 203のうちの独自のものにおいて明示的に指定され得ることは、必ずしも除外されない。
【0057】
アリスとボブのデジタル資産は、ブロックチェーン150内の任意の場所の任意のトランザクション152において、彼らに対してロックされているUTXOで構成されている。従って、典型的に、所与の当事者103の資産は、ブロックチェーン150の全体を通して、様々なトランザクション152のUTXO全体に分散されている。ブロックチェーン150内のどこにも、所与の当事者103の全ての残高(balance)を定義する1つの数字は保管されていない。各当事者に対してロックされており、かつ、別の前向き(onward)トランザクションでまだ支払われていない全ての様々なUTXOの値を一緒に照合することは、クライアントアプリケーション105におけるウォレット機能の役割である。このことは、任意のビットコインノード104に保管されたブロックチェーン150のコピーをクエリすることによって行うことができる。
【0058】
スクリプトコードは、しばしば、概略的に表現されることに注意すること(すなわち、正確な言語を使用しない)。例えば、特定の機能を表すためにオペレーションコード(オペコード)を使用することができる。「OP_...」は、スクリプト言語の特定のオペコードを指している。一例として、OP_RETURNは、スクリプト言語のオペコードであり、ロックスクリプトの先頭でOP_FALSEが先行すると、トランザクション内にデータを保管することができ、それによってデータをブロックチェーン150に不変に記録することができるトランザクションの不要な出力を生成する。例えば、データは、ブロックチェーンに保管することが望ましい文書を含み得る。
【0059】
典型的には、トランザクションの入力は、公開鍵PAに対応するデジタル署名を含んでいる。実施形態において、このことは、楕円曲線secp256K1を使用するECDSAに基づくものである。デジタル署名は、データの特定なピース(piece)に署名する。いくつかの実施形態において、所与のトランザクションについて、署名は、トランザクション入力の一部、および、トランザクション出力の一部または全部に署名する。署名する出力のうち特定の部分は、SIGHASHフラグに依存している。SIGHASHフラグは、たいてい、署名の最後に含まれる4バイトのコードであり、どの出力が署名されるか(従って、署名の時点で固定されること)を選択する。
【0060】
ロッキングスクリプトは、それぞれのトランザクションがロックされている当事者の公開鍵を典型的に含んでいるという事実を参照して、ときどき、「scriptPubKey」と呼ばれる。アンロッキングスクリプトは、対応する署名を典型的に提供するという事実を参照して、ときどき、「scriptSig」と呼ばれる。しかしながら、より一般的には、UTXOが償還される条件が署名を認証することを含むことは、ブロックチェーン150の全てのアプリケーションにおいて必須ではない。より一般的に、スクリプト言語は、任意の1つ以上の条件を定義するために使用され得る。従って、より一般的な用語として「ロッキングスクリプト」および「アンロッキングスクリプト」が望ましい。
【0061】
サイドチャネル
図1に示されるように、アリスおよびボブのコンピュータ機器102a、120bそれぞれのクライアントアプリケーションは、それぞれに、追加的な通信機能を備えることができる。この追加機能により、アリス103aは、(いずれかの当事者または第三者の勧誘により)ボブ103bと別個のサイドチャネル107を確立することができる。サイドチャネル107は、ブロックチェーンネットワークとは別にデータの交換を可能にする。そうした通信は、ときどき、「オフチェーン(“off-chain”)」通信と呼ばれる。例えば、これは、当事者の一方がネットワーク106にブロードキャストすることを選択するまで、ブロックチェーンネットワーク106にトランザクションが登録されることなく、または、チェーン150にそのように進むことなく、アリスとボブとの間でトランザクション152を交換するために使用することができる。このようにトランザクションを共有することは、ときどき、「トランザクションテンプレート(”transaction template“)」の共有と呼ばれる。トランザクションテンプレートは、完全なトランザクションを形成するために必要な1つ以上のインプットおよび/またはアウトプットを欠くことがある。代替的または追加的に、サイドチャネル107は、キー、交渉された総量または条件、データコンテンツ、等といった、他のトランザクション関連データを交換するために使用することができる。
【0062】
サイドチャネル107は、ブロックチェーンネットワーク106と同じパケット交換ネットワーク101を介して確立され得る。代替的または追加的に、サイドチャネル301は、移動セルラネットワークといった異なるネットワーク、または、ローカル無線ネットワークといったローカルエリアネットワーク、もしくは、アリスの装置102aとボブの装置102bとの間の直接的な有線または無線リンクを介して確立され得る。一般的に、ここにおけるどこの場所でも参照されるサイドチャネル107は、データ「オフチェーン(“off-chain”)」、すなわち、ブロックチェーンネットワーク106とは別に、交換するための1つ以上のネットワーク技術または通信媒体を介する任意の1つ以上のリンクを含んでよい。2つ以上のリンクが使用される場合には、全体としてのオフチェーンリンクのバンドルまたはコレクションは、サイドチャネル107と称され得る。従って、アリスおよびボブが、サイドチャネル107にわたり、情報またはデータの所定のピース、または、そうしたものを交換すると言われる場合、これは、データのこれらのピース全てが、正確に同じリンクまたは同じタイプのネットワークを介して送信されなければならないことを、必ずしも意味しないことに注意すること。
【0063】
擬似ランダム選択
図3は、本発明のいくつかの実施形態を実施するための例示的なシステム300を示す。示されるように、システム300は、オラクル301および1人以上のユーザ302を含む。この例において、システムは、3人のユーザ302a、302b、302cを含むが、一般的に、システム300は、任意の数のユーザ302を含み得る。システム300がユーザ302を含まないことも除外されない。すなわち、本発明のいくつかの実施形態は、オラクル301のみによって実行され得る。また、用語「オラクル(“oracle”)」は、システム300のエンティティ(「第1当事者」)のためのラベルとして使用されているにすぎず、オラクルが以下で説明される動作以外の任意の動作を実行するように構成されなければならないことを必ずしも意味するものではないが、それも除外されないことに注意すること。システム300は、また、
図3においてブロックチェーン150自体によって表される1つ以上のブロックチェーンノード104を含む。
【0064】
オラクル301および各ユーザ302は、それぞれのコンピュータ機器(図示せず)を操作する。それぞれのコンピュータ機器は、1つ以上のプロセッサ、例えば、1つ以上のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを含むそれぞれの処理装置を備えている。それぞれのコンピュータ機器は、さらに、メモリ、すなわち、非一時的なコンピュータで読取り可能な媒体またはメディアの形態のコンピュータで読取り可能なストレージ装置を備える。このメモリは、1つ以上のメモリ媒体を使用する1つ以上のメモリユニットを含み得る。例えば、ハードディスクといった磁気媒体、SSD、フラッシュメモリ、またはEEPROMといった電子媒体、および/または、光ディスクドライブといった光媒体である。それぞれのコンピュータ機器上のメモリは、処理装置上で動作するように配置された少なくとも1つのクライアントアプリケーションのそれぞれのインスタンスを含むソフトウェアを保管する。ここにおいて、オラクル301または所与のユーザ302に帰属された任意の動作は、オラクルまたはユーザのそれぞれのコンピュータ機器の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されるだろう。それぞれのコンピュータ機器は、少なくとも1つのユーザ端末を備えている。例えば、デスクトップまたはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチといったウェアラブルデバイスである。それぞれのコンピュータ機器は、また、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースといった、1つ以上の他のネットワーク化されたリソースを含んでもよい。
【0065】
オラクル301は、
図1および
図2を参照して上述したように、アリス103aまたはボブ103bによって実行されるものとして説明された動作のいずれかを実行するように構成され得る。同様に、任意の所与のユーザ302は、
図1および
図2を参照して上述したように、アリス103aまたはボブ103bによって実行されるものとして説明された動作のいずれかを実行するように構成され得る。
【0066】
一般的に、オラクル301は、データ要素の順序付リストおよび複数のシード入力を取得するように構成される。シード入力は擬似乱数を生成するために使用され、擬似乱数はデータ要素を選択するために使用される。オラクル301が1つ以上のシード入力を提供してもよく、かつ/あるいは、各ユーザ302がそれぞれのシード入力を提供してもよい。データ要素の一部または全部は、オラクル301によって提供されてもよい。同様に、データ要素の一部または全部が単一のユーザ302によって提供されてもよく、または、各ユーザ302がデータ要素のうちの1つを提供してもよい。
【0067】
データ要素は、順序付リストに配置される。データ要素は、1つ以上の所定の条件に基づいて順序に配置され得る。例えば、データ要素は、アルファベット順(データ要素が文字列である場合)に、または、サイズの昇順もしくは降順(データ要素が数字である場合)に配置され得る。代替的に、データ要素は、どのユーザ302がデータ要素を提供したかに応じた順序で配置されてもよい。例えば、各ユーザは、インデックスと関連付けられ得る。そして、所与のユーザ302によって提供されるデータ要素は、リスト内のインデックスに対応する位置に配置される。別の例として、ユーザ302は、自身のデータ要素を異なる時間に提供してもよく、データ要素は、順序付リストに次々と配置されてもよい。
【0068】
オラクル301は、第1トランザクション(以下、オラクルトランザクションと呼ばれる)を生成する。オラクルトランザクションは、出力スクリプト、すなわちロッキングスクリプトを含む。ロッキングスクリプトは、データ要素の順序付リストを再順序付けし、擬似ランダムに生成された数に基づいて、データ要素の再順序付リストからデータ要素を選択するように構成される。すなわち、ロッキングスクリプトは、データ要素の順序付リストに作動して、データ要素の再順序付リストを生成するように構成される。擬似乱数は、(以下に説明するように)ロッキングスクリプトの実行中に生成され得るか、または、擬似乱数は、事前に計算され、ロッキングスクリプトに含まれ得る。
【0069】
データ要素のリストを再順序付けすることは、リスト内のデータ要素の順序を変更することの1回以上の連続する反復を含み得る。すなわち、第1反復は、順序付リスト内の少なくとも2つのデータ要素の位置を変更して(すなわち、最小で2つのデータ要素がリスト内の位置を変更して)、更新された順序付リストを生成し得る。次いで、第2反復は、更新された順序付リスト内の少なくとも2つのデータ要素の位置を変更して、一般的に、新たに更新された順序付リストにし得る。このプロセスは、任意の回数繰り返され得る。例えば、反復の回数は、リスト内の要素の総数に等しくてもよい。いくつかの例では、少なくとも3つの要素が、各反復中にリスト内の位置を変更する。再順序付け動作に応じて、1つ以上の要素は、再順序付リスト内で順序付リスト内と同じ位置を有し得ることに注意すること。
【0070】
データ要素のリストは、1つ以上のシフト入力に基づいて再順序付けられ得る。シフト入力の一部または全部は、ユーザ302によって提供され得る。または、シフト入力の一部または全部は、オラクル302によって提供され得る。最初に単一のシフト入力(「全体的なシフト(“overall shift”)」と呼ぶ)の例から始めると、オラクルトランザクションのロッキングスクリプトは、全体的なシフトに基づいて、データ要素の順序を変更するように構成され得る。全体的なシフトは、ロッキングスクリプトに含まれるか、または、ロッキングスクリプトの実行中に計算され得る。ロッキングスクリプトは、順序付リスト内の要素のうちの1つ、いくつか、または全ての位置を、例えば、1回の動作で、または、連続する再順序付け反復で変更するように構成され得る。例えば、2つ以上の要素が第1反復中に全体的なシフトに基づいて位置を変更し、次いで、2つ以上の要素が第2反復中に全体的なシフトに基づいて位置を変更し、以下同様である。全体的なシフト(整数である)の値に応じて、同じデータ要素のうちの1つ以上は、連続する反復中に位置を変更し得る。
【0071】
いくつかの例では、全体的なシフトは、個々のシフト入力を組み合わせ(例えば、加算または連結し)、その組み合わされた結果をリスト内の要素の総数以下の整数に変換することによって生成され得る。または、全体的なシフトは、オラクル301によって(ランダムに)選択され得る。
【0072】
他の例では、個々のシフト入力は、連続する再順序付け反復中に使用され得る。すなわち、第1シフト入力が第1反復中に使用され、第2シフト入力が第2反復中に使用され、以下同様である。この場合、シフト入力の数は、リスト内の要素の総数に一致する。
【0073】
上述のように、擬似乱数は、複数のシード入力に基づいて生成され、シード入力の一部または全部は、ユーザ302によって提供され得る(ユーザ302ごとに1つ)。擬似乱数は、複数のシード入力に関数を適用することによって生成される。例えば、関数は、例えば、加算または連結によって、複数のシード入力を組み合わせ得る。この関数は、組み合わせの結果に、複合ハッシュ関数を適用することもできる。複合ハッシュ関数の例は、モジュロ関数が続く暗号ハッシュ関数である。別の言葉で言えば、シード入力の組み合わせは、最初に、暗号ハッシュ関数(例えば、SHA-256)に入力され、次いで、結果として得られたハッシュダイジェストをモジュロ関数に入力して、リスト内の要素の総数以下の数を生成する。一般的に、シード入力は、任意の形態をとり得る。例えば、シード入力は、任意のデータ項目であり得るか、またはシード入力は、それぞれのユーザによって生成される署名の構成要素であり得る(以下に詳細に説明される)。ロッキングスクリプトは、スクリプト実行中に擬似乱数を生成し得る。その場合、ロッキングスクリプトは、複数のシード入力を含む。
【0074】
シフト入力のうちの1つ以上がそれぞれのユーザ302から(すなわち、ユーザ302ごとに1つ)取得される場合、シフト入力は、順序付リストに配置され得る。順序は、ユーザ302、例えば、ユーザのそれぞれのインデックスに基づく。例えば、第1ユーザ302aによってオラクル301に送信されたシフト入力は、リストの1番目に配置され得る。第2ユーザ302bによってオラクル301に送信されたシフト入力は、リストの2番目に配置され得る。以下同様である。追加的または代替的に、シフト入力の順序は、データ要素および/またはシード入力の順序に基づいて決定され得る。例えば、各ユーザは、それぞれのデータ要素(例えば、公開鍵)および/またはそれぞれのシード入力を提供し得る。これらのデータ要素および/またはシード入力は、それぞれの順序付リストに配置される。ユーザのデータ要素および/またはシード入力が、それぞれの順序付リストの1番目に配置される場合、同じユーザのシフト入力が、シフト入力の順序付リストの1番目に配置され得る。
【0075】
選択されたデータ要素は、支出トランザクション、すなわち、オラクルトランザクションの出力を参照する入力を含むトランザクションによって使用され得る。例えば、選択されたデータ要素は、支出トランザクションの入力スクリプト、すなわちアンロッキングスクリプトが満たさなければならないロッキング条件の一部として使用され得る。特定の例として、データ要素は公開鍵であり得る。オラクルトランザクションのロッキングスクリプトは、選択された公開鍵に対応する署名を含むことを支出トランザクションのアンロッキングスクリプトに要求し得る。
【0076】
追加的または代替的に、選択されたデータ要素は、オフチェーンで、すなわちブロックチェーンコンテキスト以外で、使用されてもよい。例えば、選択されたデータ要素は、例えば、コンピュータシミュレーションへの入力として、オフチェーン機能に供給されてもよい。
【0077】
図2を参照して上述したように、ロッキングスクリプトの実行中に、データがスタックに出力される。スタックは、メモリの形態である。オラクルトランザクションのロッキングスクリプトの実行中、要素の再順序付リスト、擬似乱数、および選択されたデータ要素が、スタックに出力され得る。同様に、要素の初期順序付リストが、スタックに出力され得る。ロッキングスクリプトの例示的な実行フローを、以下で、さらに提供する。
【0078】
オラクルトランザクションは、1つ以上の入力を含む。いくつかの例では、オラクルトランザクションは、開始トランザクションの出力を参照する入力を含み得る。各ユーザ302は、それぞれのシフト入力のそれぞれのシフトコミットメント(shift commitment)を開始トランザクションに含める。例えば、シフトコミットメントは、それぞれのシフト入力のハッシュであり得る。シフトコミットメントは、他の形態をとり得、例えば、シフト入力は、楕円曲線生成点で難読化され得る。開始トランザクションは、また、ユーザのシード入力に対するシードコミットメント(seed commitment)を含み得る。ここでも、このシードコミットメントは、それぞれのシード入力のハッシュであり得る。他の例では、シード入力は、デジタル署名(例えば、ECDSA署名)の第1構成要素であり得る。シードコミットメントは、同じ署名の第2構成要素であり得る。特定の例として、各ユーザ302は、[r,s]という形式のそれぞれの署名を生成し得る。sはシード入力であり、rはシードコミットメントである。いくつかの例では、各ユーザは、シフト入力とシード入力の両方にコミットする単一のコミットメントを提供し得る。例えば、シフト入力およびシード入力を連結し、次いでハッシュ化して、単一のコミットメントを形成し得る。
【0079】
シフトコミットメントおよび/またはシードコミットメントは、開始トランザクションのそれぞれの支出不可能な出力、例えば、OP_FALSE OP_RETURN出力に含まれ得る。コミットメントがそれぞれの支出可能な出力に含まれ得ることも除外されない。使用事例に応じて、各ユーザ302が、(例えば、開始トランザクションのそれぞれの入力に署名することによって)それらのコミットメントを開始トランザクションに別々に寄与し得るか、または、単一のユーザ302aが各ユーザのコミットメントを開始トランザクションに追加し得る。
【0080】
単一の開始トランザクションを参照する代わりに、オラクルトランザクションは、複数の開始トランザクションを参照し得る。各ユーザ302は、それぞれの開始トランザクションを生成する。単一の開始トランザクションと同様に、ユーザ302によって生成される各個々の開始トランザクションは、そのユーザ302によって提供されるシフト入力および/またはシード入力のコミットメントを含み得る。
【0081】
以下は、ブロックチェーン150上での擬似乱数の生成に関するさらなる詳細を提供する。以下の特徴の一部または全部は、システム300のオラクル301またはユーザ302によって実施され得る。以下のセクションは、説明のためにのみ提供され、本発明の全ての実施形態に対して限定的であると意図されることに注意すること。例えば、本発明は、ビットコインブロックチェーンのみにも、ゲームアプリケーションのコンテキストにも限定されない。
【0082】
例示的なブロックチェーンベースのPRNG
ランダムプロセスをブロックチェーン150に組み込むための新しい方法の概念は、主に、運に基づくゲームアルゴリズムをビットコインスクリプトに入れる必要性によって動機付けられた。このことは、この方法が、生成されスクリプトで使用される乱数の以下の特性を保証しなければならないことを意味する。
(1)予測不可能:結果を決定する際に使用される乱数は、資金が運ベースのイベントにコミットされる前に予測可能であってはならない。
(2)決定論的:生成された乱数は、最初の生成後、常に同じ入力から再現可能でなくてはならない。
(3)検証可能:全ての当事者(例えば、ユーザ302)は、生成された乱数について全ての当事者が同意するように、選択された乱数を再現し、検証することができなければならない。
【0083】
以下の方法は、ブロックチェーン150上での乱数の生成において上記の特性の全てが維持されることを保証する。
【0084】
擬似乱数発生器
一般的に、乱数は、真の乱数および擬似乱数という2つのカテゴリに分類される。行われるべき区別は、真のランダム性は、達成するのが非常に困難であり、通常は、自然なプロセスまたは電気的ノイズに依存するということである。
【0085】
代替的に、擬似ランダム性は、単一の高エントロピーシード値Vseed(真にランダムである)を使用して、擬似乱数Nkのシーケンスを生成するためのアルゴリズムを初期化することで達成され、ここで、kは、乱数発生器の周期である:
VSeed→(N1,N2,…,Nk)
【0086】
ほとんどの実用的なアプリケーションでは、擬似乱数発生器は、その特性が適切である場合に使用される。ブロックチェーン150上にランダム性を組み込む場合、擬似乱数生成のためのメカニズムは、好ましくは、暗号的にセキュアであるべきである。
【0087】
一般的に、暗号的にセキュアな擬似乱数発生器(cryptographically-secure pseudo-random number generator:CSPRNG)は、決定論的であり、したがって、VSeedを知っている人なら誰でも検証可能な数値のシーケンスを生成する。このような発生器は、本目的に適しているが、2つの核心的な問題がある。
【0088】
第1に、既知のCSPRNGからの長いアルゴリズムをスクリプト言語に組み込む必要があり、これにより、計算オーバーヘッドが追加され、アルゴリズムによって生成される乱数の関数の機会が制限される。
【0089】
加えて、真にランダムとして分類されるのに十分なエントロピーを有するシード値VSeedを提供することができるという問題が依然として存在するであろう。現在、そのようなシードをスクリプト内で生成するメカニズムも、生成される乱数が予測不可能であるという要件(1)を満たす方法で、外部のシードを償還スクリプトへの入力として使用するためのメカニズムも存在しない。本発明は、乱数を生成する代替手段としてハッシュ関数を使用することを提案する。
【0090】
ハッシュ関数
ブロックチェーン150の構築は、ハッシュ関数の使用およびそれらの固有の特性に依存する。ここで、ハッシュ関数Hは、任意のデータ構造Xをとり、かつ、256ビットの数値を出力する一方向決定論的関数
【数1】
として定義される:
【数2】
【0091】
ここで、SHA-256といったハッシュ関数が一方向ランダムオラクルとして挙動するという事実を理解されたい。すなわち、ハッシュYが、ユーザに知られていないプレイメージ(pre-image)Xから計算される場合、ユーザがXを見つけるのは計算上困難である。
【0092】
ハッシュ関数の特性は、単一のビットの値のみが異なる2つの256ビットデータ構造のハッシュを、完全に無関係なものとして扱うことができることである。別の言葉で言えば、ハッシュ値は、ユーザがプレイメージ全体を知らない限り、ユーザに対して真の乱数として挙動する。
【0093】
このことは、入力プレイメージX全体を制御する単一の当事者が存在しないという仮定の下で、単に、ハッシュ値Y(または、その何らかの関数)をとり、それを、生成しようとする単一の乱数Rとして扱うことができることを意味する。
【数3】
【0094】
さらに、同じ引数を使用して初期乱数R
0を繰り返しハッシュ化することにより、(k+1)個の乱数値の乱数シーケンスS
Rが生成され得る。
【数4】
【0095】
ハッシュ関数は決定論的であるので、使用される特定のハッシュ関数と、ここではシードとして機能する初期プレイメージの知識のみで、どの当事者もシーケンスSR全体を再現し得る。
【0096】
ランダムシーケンスが生成されたときに、この初期プレイメージが公開される場合、どの当事者も、シーケンスがこのプレイメージに対応することを独立して検証することができる。乱数の生成に関与する単一の当事者が初期プレイメージX0全体を操作することができないことのみを条件として、基準(1)および(2)を満たすスクリプト内で使用される乱数シーケンスを生成するためにハッシュ関数が使用され得ることは明らかである。
【0097】
代替の一方向関数
一般的に、ハッシュ関数は、ブロックチェーンスクリプト言語において既存のオペコードを有するので、用語「ハッシュ関数」は、ここにおいて、より広範なクラスの関数である特定のタイプの一方向関数を指すために使用され得る。しかしながら、ここにおけるハッシュ関数の任意のインスタンスの代わりに代替の一方向関数を使用することができることが考えられる。2つの例には、以下が含まれる。
1.楕円曲線(EC)点乗算-秘密鍵からEC公開鍵を生成するために使用される関数E(x)=x・Gであり、Gは、楕円曲線ベースポイントであり、「・」は、EC点乗算演算子である。これは、x,Gを与えてE(x)を計算するのは容易であるが、E(x),Gを与えてxを決定するのは計算上困難であるので、一方向関数である。
2.Rabin関数-関数R(x)=x2 mod N、ここで、N=pqであり、p,qは両方とも素数である。Nを法として正方形R(x)を求めるのは容易であるが、R(x),Nを与えて平方根±xを求めるのはNを因数分解してp,qを求めるのと同じくらい困難であり、これは、計算上困難である。
【0098】
デジタル署名
以下は、デジタル署名がどのように形成されるか、および、ECDSA標準の下でそれらの基本構造が何を含むかの両方の要約を提供する。ここにおいて使用されるデジタル署名への言及は、必ずしもECDSA署名に限定されないことに注意すること。
【0099】
秘密鍵SAを使用してメッセージハッシュH(m)のためのデジタル署名を作成することを望むユーザであるアリスを考える。アリスは、ECCに従って、通常の方法で彼女の秘密鍵に関連付けられた公開鍵PAを有する。ここで、Gは次数nの楕円曲線ベースポイントである。
PA=SA・G
【0100】
作成される必要があるデジタル署名の構成要素は、rおよびsの2つである。アリスは、乱数
【数5】
としてエフェメラル鍵(ephemeral key)を生成し、これを使用して、署名のr部分を以下のように導出する。
【数6】
次いで、アリスの秘密鍵、彼女のハッシュ化されたメッセージ、およびエフェメラル鍵と組み合わせて、これから署名のs部分を以下のように導出する。
【数7】
【0101】
rとsとを連結することで、メッセージハッシュのECDSAデジタル署名として知られるデータ構造が作成される。
Sig PA=(r,s)
【0102】
値rおよびsを別々に与えると、完全な署名は、演算子OP_CATを用いてブロックチェーンスクリプト言語で構築され得る。署名が再構築されるとき、それはスクリプトで使用される標準DERフォーマットである必要がある。この点は、後述する署名方式を乱数生成に使用する際に重要となる。
【0103】
方法
ブロックチェーン150を使用して乱数(すなわち、オラクル301によって生成されるオラクルトランザクションで使用される擬似乱数)を生成するための一般的な方法には、3つのバリエーションがある。各方法は、乱数の作成に参加する複数のユーザ302を含む。
【0104】
第1方法は、ハッシュプレイメージの組み合わせを使用してセキュアな乱数を生成し、第2方法は、いくつかの署名からのs構成要素の組み合わせを使用する。最後に、第3方法は、最初の2つの方法のハイブリッドである。それぞれの場合において、目的は、セキュアなランダム整数RN∈{0,N-1}を生成することである。
【0105】
ハッシュ方法
各々が自身のハッシュ値Yi=H(Xi)を公開するN人のユーザ302を考える。ここで、各ユーザ302は、自身の秘密のプレイメージXiを選択すると規定する。ハッシュ関数の特性により、公開ハッシュ値の知識が与えられても、ユーザ302は別のユーザのプレイメージを推測することができないと仮定することができる。
【0106】
次いで、ユーザ302は、自身の秘密のプレイメージXiをオラクル301に送信する。プレイメージは、例えば、国際公開WO2017145016A1に記載されているような、秘密値分布技術を用いて送信され得るが、プレイメージをオラクル301に通信するための他のセキュアなチャネルまたはメカニズムが使用されてもよい。次いで、オラクル301は、以下の方法により、乱数RNを生成する。
【0107】
1.オラクルは、各ユーザ302によって提供されるプレイメージについてYi=H(Xi)であることを検証する。
【0108】
ここで、プレイメージXiは、上述したシード入力と同等であり、Yiはシードコミットメントと同等である。
【0109】
ハッシュ値は、プレイメージがオラクル301に送信される前に既に公開されていることを思い出すこと。これは、オラクル301が、各ユーザ302によって最初に供給された正しいプレイメージを供給されることを保証する。ブロックチェーン150上では、これらの公開値は不変であり、したがって、プレイメージを送信した後にユーザ302によって変更することはできない。
【0110】
この検証ステップは、全てのユーザが選択された秘密プレイメージを供給するまで、オラクル301が乱数の生成に進まないことを保証する。
【0111】
2.オラクルは、以下のようにR
Nを計算する。
【数8】
【0112】
RNは、どのユーザ302もN個全ての元のプレイメージ値Xiを知らないことのみを条件として、ありとあらゆるユーザ302に関する乱数である。
【0113】
全てのプレイメージは、ユーザ302によって秘密に保たれ、オラクル301にセキュアに通信される。このことは、関与する全てのユーザ302を制御しない限り、悪意のある当事者が、これらの全ての入力を知ることはあり得ないことを意味する。この場合、敵対者は、自明に、それ自体のみによって使用される乱数を操作していることになる。
【0114】
最小で1人の真正ユーザ302が存在する他の全てのシナリオでは、ハッシュ関数の説明された特性は、それらがRNを有利な方法で操作できないことを意味する。これは、敵対者が全てのN-1人の他のユーザを制御する場合であっても当てはまる。
【0115】
簡単に言えば、どの当事者も、この方法によって生成された乱数に、別の当事者に悪影響を与える可能性がある影響を与える方法はない。ここでは、スクリプトでの実装が簡単なのでプレイメージXiの加法的な「+」加算が使用されるが、上記の加算と同様に直列で、連結といった異なる演算子を使用することも可能であることに注意すること。
【0116】
ΣXi「加算」の連結バージョンは、第2プレイメージ攻撃に対してセキュアなので有利である。すなわち、ハッシュへの入力がx1+x2+x3+…である場合、順序は問題ではないので、同じ結果を与えるxiの異なる組み合わせを見つけるのは些細なことである。一方、連結シナリオでは、順序が重要であり、順序正しく、同じ連結を与える値xiの異なるセットを見つけることはできない。
【0117】
乱数RNは、(1)プロセスに関与する任意の当事者にとって予測不可能であり、かつ(2)決定論的プロセスを介して再現可能であるように生成されている。乱数が(3)検証可能であるという上記の最後の要件は、以下で満たされることが示される。
【0118】
説明したように、拡張は、乱数シーケンスが、RNのハッシュ化を繰り返すことによって、オラクルによって生成され得ることである。
【0119】
署名方法
各々が署名Sig P
iと、s
'構成要素が秘密に保たれる第2署名Sig P
i
'の一部を形成するランダム値r
i
'とを公開するN人のユーザを考える。
【数9】
【0120】
署名は、両方の署名が公開鍵Piの同じ所有者に対応することが検証可能となるように、同じ秘密鍵Siを使用して署名されるべきである。
Pi=Si・G
【0121】
次いで、ユーザ302は、例えば、秘密共有方法を介してまたは他の方法でセキュアに、自身の秘密si
'値(すなわちシード入力)をオラクル301に送信する。次いで、オラクル301は、以下の方法を介して乱数RNを生成する。
【0122】
1.オラクルは、Sig Pi
'を構築し、各ユーザ302についてSig Piと同じエンティティに対応することを検証する。
【0123】
この第2署名は、公開ri
'値(すなわち、シードコミットメント)と秘密si
'値(すなわち、シード入力)とを連結することによって構築される。
【0124】
オラクルは、標準的なECDSA署名検証アルゴリズムを両方の署名に適用し、それらが公開鍵Piの所有者によって共通に署名されたことを確認する。これは、別のユーザ302が、所与のri
'値に自身の署名を提供することによって乱数に影響を与えることができないことを保証する。
【0125】
2.オラクルは、以下のようにR
Nを計算する。
【数10】
【0126】
これは、一方向ハッシュ関数とECCにおける秘密鍵から公開鍵を生成する一方向プロセスとの類似性により、ハッシュ方法において概説された同じ特性を継承する。Yi→PiおよびXi→si
'と置き換えることで、この類似性は明らかになり、ハッシュ方法のステップ2で提示された議論がここでも成り立つ。厳密に言えば、直接的な類推のためには、Xi→Siと置き換えるが、si
'は、単にSiの関数である。
【0127】
乱数RNは、ハッシュ方法と同様に、両方とも、関与する任意の当事者にとって予測不可能かつ検証可能であるように生成され、上記で概説した基準(1)および(2)を満たす。
【0128】
署名方法およびハッシュ方法は、互いに直接的に類似しており、乱数生成のためのそれぞれの方法の中核的特性を共有することが明らかにされるべきである。特に、両方の方法は、ハッシュ方法および署名方法のそれぞれについて、各ユーザが秘密値Xiおよびsi
'の生成を担うことを必要とする。ここで署名方法を使用することの重要な利点は、秘密を選択する動作がECDSA手順の下で既に標準化されているが、任意のハッシュプレイメージを選択することは標準化されていないことである。
【0129】
署名方法は、また、オラクル301に送信された秘密値si
'が、対応する公開値ri
'の元の提案者によって提供されたものであることを、それに付随する一次署名Sig Pi=(ri,si)との比較によって直接検証する方法を提供する。この検証は、ハッシュ方法における暗黙的なものにすぎない。
【0130】
スクリプト内でのR
N
の計算
両方のレジームにおいて、乱数RNは、(1)予測不可能であることと、(2)決定論的であることの両方の要件を満たすことが示されている。以下は、それが、どのように(3)検証可能でもあるかを示す。
【0131】
このことは、全てのネットワークピアが、RNが正しい方法で生成されていることを独立して検証する方法が必要であることを意味する。これは、RN自体を計算し、トランザクションのロッキングスクリプトで使用することを要求することによって達成される。
【0132】
このようにして、全ての以前の秘密si
'値は、このスクリプトの一部としてブロックチェーン上に公開され、これは、ハッシュ関数Σisi
'の入力プレイメージを構築することによって誰でも乱数を検証することができることを意味する。
【0133】
所望のランダム整数R
N∈{0,N-1}を生成するために、以下の形式の例示的なスクリプトが使用され得る。
【数11】
【0134】
以下に示すアプリケーションでは、<RN>は、このスクリプトを参照するために使用される。このスクリプトは、ハッシュプレイメージ、部分的署名、および、これらの組み合わせを含む一般化された秘密値に使用することができることに注意すること。
【0135】
図4は、乱数を生成するためにこのスクリプトがどのように使用されるかを示す。
【0136】
トランザクション(すなわち、オラクルトランザクション)のための完全なロッキングスクリプトは、各プレイメージが正しいコミットされたハッシュに対応すること、各秘密署名構成要素が公開構成要素と組み合わさって期待される署名を形成すること、および、各供給された値が正しいユーザ302からのものであることの検証を含むことができる。
【0137】
プレイメージ検証
以下のスクリプトを使用して、スクリプト内プロセスとして、供給されたプレイメージX
iのそれぞれが正しいコミット前ハッシュ値Y
iに対応することを検証することができる。
【数12】
【0138】
署名検証
以下のスクリプトを使用して、この場合もスクリプト内プロセスとして、供給された二次署名Sig P
i
'および初期署名Sig P
iが両方とも公開鍵P
iに対応することを検証することができる。
【数13】
ここで、[Verify ECDSA]は、スクリプト内でECDSA署名検証を実施するように構成されたサブスクリプトであり、パラメータとして提供される任意のメッセージ<m>に対して署名を検証する。
【0139】
複合的な方法
これまでに提示した方法は、生成される乱数の結果に影響を与えようとする悪意のある当事者に対してロバストである。しかしながら、生成される乱数の安全性および予測不可能性を改善するために、ハッシュ方法および署名法が拡張および組み合わされ得る方法は多く存在する。
【0140】
2つの方法の最も単純な組み合わせは、各ユーザが、ハッシュ値Y
iを、署名Sig P
i、ランダム値r
i
'それらの公開鍵P
iと共に公開することである。次いで、オラクルが、次のようにランダム値を生成し得る。
【数14】
ここで、各ユーザ302は、二次署名Sig P
i
'=(r
i
',s
i
')も非公開で計算している。ここで、加算演算子「+」は、別の実装形態では、連結またはXORといった別の演算子によって置き換えられ得ることに注意すること。
【0141】
2つの方法のいずれかは、また、複数のオラクルが呼び出され、ユーザ302がそれぞれ複数のシード入力、例えば、複数のハッシュ値Yiまたは複数の二次ri
'値を提供することを課すことによって、個々に拡張され得る。
【0142】
例えば、ハッシュ方法を使用して2つのオラクルが呼び出された場合、乱数R
Nは、次のように計算され得る。
【数15】
ここで、第1オラクルは、プレイメージX
i,1の1つのセットの和を第2オラクルに送信し、第2オラクルは、これを、プレイメージX
i,2の第2セットの和に加算して、乱数を計算する。
【0143】
いくつかのオラクルを呼び出すことによって、悪意のあるユーザによってオラクルが何らかの形で破損されるリスクが排除される。これを多数のオラクルに拡張することで、より大きな計算上および時間上のオーバーヘッドを犠牲にして全てのオラクルが共謀するリスクを低減する。
【0144】
これらの方法は、乱数がセキュアかつ予測不可能に生成されるためには、単一のオラクルのみが真正である必要があることを保証することに注意すること。
【0145】
例示的なアプリケーション
以下は、本発明のいくつかの例示的な使用事例を示す。
【0146】
第1アプリケーションは、N人のユーザ302が関与するブロックチェーン抽選のコンテキストであり、「ハウス」として機能する当事者(すなわち、オラクル)を有するシナリオおよび有さないシナリオの両方が考慮される。第2アプリケーションは、サトシダイスのN面ゲームについてのものであり、ユーザ302は、ハウス(オラクル301)を有する簡単な運のゲームに参加する。
【0147】
最後に、ブロックチェーン150を使用して乱数を生成するためのより一般的な使用が考慮される。
【0148】
抽選(Lotteries)
関連する公開鍵Pi(∀i∈{1,N})を有するN人のユーザ302のグループを考える。これらのユーザ302が関与する抽選を構築し、当選資金(winning funds)は、ランダムに選択された公開鍵PWの所有者にロックされる。
【0149】
抽選の構造は、以下の3つのトランザクションを含む。
(i)開始トランザクション、
(ii)オラクルトランザクション、
(iii)獲得-償還トランザクション、
そして、当選資金をPWにロックするために使用される乱数のセキュアな生成のために1つのオラクル301を呼び出す。
【0150】
そのような抽選では、各ユーザ302が、確率1/NでN×xを獲得するが等しい機会を有することを保証し、ここで、xは、抽選チケットの初期のバイイン価格(buy-in value)である。
【0151】
また、当選者が、彼らの賞金を請求しない場合に、抽選資金を回収し得る「ハウス」を抽選の一部として含む場合を別個に考える。
【0152】
この場合、各ユーザ302は、1/(N+1)の確率でr+(N×x)を獲得する機会があり、ここで、rは、ハウスのバイイン寄与(buy-in contribution)である。
【0153】
開始トランザクション
1.各ユーザは、ブロックチェーン抽選チケットのためのそれらのバイインとして共通値xを開始トランザクションに与える。このトランザクションは、N個の入力と1つの出力とを含み、全ての参加者のブロックチェーン抽選チケットのデジタル販売時点を表す。
【0154】
2.バイインに加えて、各ユーザは、また、出力(例えば、OP RETURN出力)に存在する公開値も入力として含める。この値は、使用される乱数生成方法に依存する。
【0155】
この実装形態では、署名方法を使用するので、供給される値はランダム値ri
'であり、これは、si
'構成要素が秘密に保たれる署名Sig Pi
'=(ri
',si
')を形成する。
【0156】
3.最後に、各ユーザ302は、自身の公開鍵Piと、それに対応する署名Sig Pi=(ri,si)とを提供する。これは、トランザクションが単一のN×x出力を生成するのに十分な入力を含むまで、全てのユーザに対して行われる。この出力は、オラクルPOに対応する公開鍵に支払われる。
【0157】
【0158】
オラクルトランザクション
1.各ユーザは、自身の秘密si
'をオラクルに送信する。
【0159】
オラクル301は、開始トランザクションが発生する前に決定される。それは、信頼できる第三者、専用のTEE、または何らかの他の形態のオラクルであり得る。
【0160】
2.オラクル301は、各二次署名Sig Pi
'=(ri
',si
')および各一次署名Sig Pi=(ri,si)が公開鍵Piに関連付けられた同じ鍵ペアに対応することをチェックする。
【0161】
3.オラクル301は、オラクルトランザクションを構築する。このトランザクションは、開始トランザクションのUTXOをその唯一の入力として使用し、N×x資金全体を単一の当選公開鍵(winning public key)にロックする。
【0162】
当選鍵PWは、このオラクルトランザクションのロッキングスクリプト内で生成される乱数RNを使用してランダムに選択される。
【0163】
以下のスクリプトは、<P
W>と表記され、N個の参加する鍵P
iのセットから、当選公開鍵をランダムに選択するために使用される。これは、以前のスクリプトR
Nによってシードされ、当選鍵を選ぶ乱数をその場で計算する。
【数16】
ここで、演算子「OP_DROP」の使用回数はN-1であり、公開鍵の使用回数はNである。
【0164】
例示的なオラクルトランザクションの構造を
図6に示す。
【0165】
ロッキングスクリプトの最初の2行では、参加する公開鍵のセットが、サブスクリプト<RN>によって生成された値に従って操作される。次いで、スクリプトは、単に署名Sig PWを要求する。
【0166】
オラクルトランザクションのロッキングスクリプトによって、当選公開鍵PWの所有者によって署名される当選資金が担保される。
【0167】
公開鍵がこのロッキングスクリプトに現れる順序は、それらが開始トランザクションに現れる順序と一致し、そうでない場合、オラクルは、公開鍵を並べ替えることによって結果を操作することができることに注意すること。
【0168】
ハウスを有する抽選
本出願では、「ハウス」として機能する当事者が存在しないN人ユーザ抽選を構築してきた。この概念を、かかる抽選に拡張して、資金が単に失われたり浪費されたりしないことを保証することが望ましいであろう。
【0169】
例えば、一方の当事者が抽選を構築することを望み、ユーザインターフェースのセットアップ、オラクルのインスタンス化、または参加者の調達といった、関与するオーバーヘッドを引き受けることによってハウスの役割を提供する場合、そうすることに対してインセンティブを与えられることを望み得る。
【0170】
このインセンティブは、抽選の当選資金をハウスに送信するタイムアウトメカニズムの形態であり得る。この抽選を実施することは、N人のユーザがxを寄与することおよびハウスがrを寄与すること(
図7参照)を伴う。
【0171】
ハウスは、抽選資金全体を回収し、オラクルトランザクションが以下の形態をとるように修正された場合には、ある合意されたタイムアウト期間ΔTEが経過した後にそれらの公開鍵PHに支払うことができる。
【0172】
図7のオラクルトランザクションでは、ロッキングスクリプトは、タイムアウトフェイルセーフを含むように修正されており、これは、合意された時間の前に当選者が賞金を請求しない場合には、ハウスとして機能する当事者が抽選資金を使用することを可能にする。
【0173】
ハウスを含むこのタイプのブロックチェーン抽選では、各ユーザは、確率1/(N+1)でr+(N×x)を獲得する機会を有し、ここで、rは、ハウスのバイイン寄与である。抽選にハウスを追加するというこの概念は、ハウスに対応する公開鍵のセットを含めることによって、必ずしも勝者が存在しない抽選、例えば、The National Lotteryに拡張することができる。これらの鍵のうちの1つが選択された場合、抽選はロールオーバーする。
【0174】
獲得-償還(winnings-redemption)
オラクルトランザクションがブロックチェーン150に記録されると、当選公開鍵P
Wの所有者は、当選資金を使用することができる。このタイプの有効なトランザクションを
図8に示す。このトランザクションのアンロッキングスクリプトは、当選公開鍵に対応する署名Sig P
Wを含む。
【0175】
オラクルトランザクションによって担保されている資金をアンロックするとき、償還トランザクションへのこの入力(scriptSig)は、以前のオラクル構築トランザクションのロッキングスクリプト(scriptPubKey)と並行して実行される。
【0176】
これらの2つのスクリプトの組み合わせが
図9に示されており、当選ユーザは、当選公開鍵P
Wに対応する署名を提供するだけでN×x当選資金を使用することができることを実証している。
【0177】
他の生成器のシード
上記の例は、ブロックチェーンプロトコルを使用して、どのように乱数をスクリプト内でセキュアに生成することができるかを示している。
【0178】
提示された抽選アプリケーションにおいて、これらの乱数を他の場所使用するのではなく、トランザクションにおいて直ちに、機能に、すなわち何らかのオフチェーン目的で使用することが提案されている。
【0179】
本発明の実施形態は、セキュアでコンセンサスベースの透明なプロトコルを通じて乱数の生成を可能にする。例えば、単一の当事者または組織が、乱数を生成してオフチェーンプロセスをシードすることを望む場合、本発明を使用して、そのように行い得る。当事者は、単に、抽選アプリケーションに使用されるものと同様のトランザクションフローを構築することによって進めるが、有意な資金をプロセスのグローバル入力および出力に関連付けることはない。
【0180】
このようにして、当事者は、メカニズム、シード、および結果が、全て、ブロックチェーン150上に透過的に記録されるように、ブロックチェーン150を使用して、乱数RNまたはシーケンスSRを生成し得る。
【0181】
非優先順序付け
上で概説したブロックチェーンベースのPRNG方法は、N人のユーザ302によって独立して選択されたN個の入力X
1,X
2,…,X
Nをとって、擬似乱数のシーケンスを生成する。シーケンスにシードする乱数R
Nは、複合シードのハッシュから生成され、複合シードは、例えば、以下のように、全てのユーザシード入力(および任意的にオラクルシードX
0)の組み合わせから導出される。
【数17】
ここで、Hは、暗号ハッシュ関数である。R
Nを決定するこの方法は、実際には、複数のハッシュ関数からなるハッシュ関数である複合ハッシュ関数を採用し、ここで、暗号ハッシュ関数g(x)=H(x)は、例えば、長さが256ビットの出力文字列を生成し、一方、関数f(x)=x mod Nは、範囲[0,N-1]内の数の空間において出力を生成する。R
Nを定義する複合ハッシュ関数は、以下のよく知られている数学的表記を使用して書くことができる。
【数18】
【0182】
図10は、2つの異なるハッシュ関数H
1、H
2を含む複合ハッシュ関数の概略図を示す。
【0183】
生成された乱数は、(例えば、ブロックチェーントランザクションにおいて公開鍵によって表される)データ要素のリストに作動するために使用される。データ要素は、ゲーム内のプレーヤおよび/またはシンボルに対応し得る。第1事例では、アルゴリズムからの出力を使用して、単にプレーヤ鍵のリストからの第RNのプレーヤを選ぶ。より高度な実装形態は、生成された擬似乱数のシーケンスを使用してゲームシンボルのリストを数回シャッフルすることを含む。
【0184】
要素のリストの初期順序付けは、ゲームに依存し、以下のいずれかによって設定される。
1.各プレーヤがゲームに参加した順序、または
2.ディーラー、例えば、カードゲームのディーラーのみが、デッキにおけるカードの初期順序付けを知っている。
【0185】
上記のPRNG方法のアプリケーションでは、擬似ランダムシードRNは、順序が固定されている要素の順序付セットに作動するために使用される。要素の順序、この場合はプレーヤの公開鍵の順序を固定する必要があると、先に詳述した複合ハッシュ関数RN=f(g(x))を使用して当選要素を選択する場合に、問題が起こり得る。複合ハッシュ関数の出力が均一に分布されていない場合、これは、要素のリスト内の特定の位置に向かって結果のバイアスを生む。プレーヤがこのバイアスを前もって知ることができると仮定すると、プレーヤは、自身の当選に対応するリスト内の要素が、バイアスされた位置にあることを確信している場合にのみ、参加しようとし得るシナリオが作成されることになる。
【0186】
ゲームコンテキスト以外において、選択されたデータ要素のバイアスは、例えば、データのセットからのランダムな選択に依存するコンピュータシミュレーションに悪影響を与える可能性がある。
【0187】
複合ハッシュ関数の場合、g(x)は、暗号ハッシュ関数、例えば、SHA-256であり、これは、均一に分布されることが広く知られている。しかしながら、f(x)=x mod Nは、パラメータNの全ての選択およびxの全てのドメインについて均一に分布していると考えることはできず、そうであるためには満たされなければならない既知の条件がある。
【0188】
形式f(x)=x mod Nの関数を考える。ここで、ドメイン{0,1,…,k-1}およびその範囲は必然的に、{0,1,…,N-1}で与えられる。
【0189】
パラメータN=10、k=16の選択について、ドメイン{0,1,…,15}および範囲{0,1,…,9}を有する関数f(x)=x mod 10が存在する。ランダム入力が与えられると、出力f(x)=0の確率は、次式で与えられる。
【数19】
同様に、出力f(x)=0,1,2,3,4,5の確率は、全て2/16に等しいことを示すことができる。
【0190】
ランダム入力が与えられると、出力f(x)=6の確率は、次式で与えられる。
【数20】
そして、出力f(x)=6,7,8,9の確率は、全て1/16に等しいことを示すことができる。
【表1】
【0191】
上記の表は、そのドメインにおけるランダム入力で評価されたときの、f(x)の各出力の確率をリストしたものである。関数の出力の分布は、実際には全体的に不均一であるが、興味深いことに、fの範囲は、それぞれサブ範囲{0,1,…,5}および{6,7,8,9}内で、それらの間にステップ変化を伴う2つの均一分布を含む分布に従うことが分かる。この分布を
図11に視覚化する。
【0192】
形式f(x)=x mod Nのこの例示的な関数は、この形式の関数に一般的に適用される重要な結果、すなわち、出力の分布がステップ関数によって与えられ、ステップ変化は(k-1) mod Nで起こること、を実証している。上記の例では、
【数21】
で、ステップ変化が実際に起こることが分かる。
【0193】
この一般的な結果を使用して、{0,1,…,k-1}のドメインを有する形式f(x)=x mod Nの汎用関数の確率分布を検査することができる。
【0194】
f(x)が入力のランダムな選択で評価されるときの所与の出力σ≦(k-1) mod Nの確率は、次式によって与えられる。
【数22】
【0195】
同様に、f(x)が入力のランダムな選択で評価されるときの所与の出力σ>(k-1) mod Nの確率は、次式によって与えられる。
【数23】
【0196】
これらの値は、
図12に示すように、f(x)の出力の確率分布における2つのレベルを定義する。任意の2つの出力間の確率の最大差は、単に、出力空間のサイズkによって定義され、1/kによって与えられることに留意されたい。
【0197】
上記の一般的な結果および分布は、上述した例示的なPRNG方法で使用される複合ハッシュ関数のタイプに適用され、複合形式f(x)=H(x) mod Nをとることを思い出す。Hが、非制限ドメインを有するH(x)=SHA256(x)といった暗号ハッシュ関数である場合、f(x)は、上記の例と全く同じように挙動し、ここで、f(x)のドメインは、Hの出力範囲であるので、{0,1,…,2256-1}によって与えられる。
【0198】
この場合、それぞれ出力範囲{0,1,…,(2
256-1)mod N}および{(2
256-1 mod N)+1,(2
256-1mod N)+2, …,N-1}についての対応する確率P
α、P
βは、次式で与えられる。
【数24】
これはまた、確率の最大差が1/2
256.であることを意味する。
【0199】
この分析は、複合ハッシュ関数の異なる出力をもたらす確率に差があることを示している。ここで、WP0563に規定された複合ハッシュ関数の場合、差の絶対値は非常に小さく、その差は、Nが2のべき乗であること、または、Nがkの因数であることを保証することによって、簡単に軽減することができることが留意されるべきである。
【0200】
しかしながら、これは、全てのシナリオにおいて可能ではなく(例えば、Nは、ゲームによって固定されるゲーム要素の数として定義される場合)、他の場合では、複合ハッシュ関数が暗号ハッシュ関数を含まない場合、確率の差は、はるかに有意であり得る。さらに、非ゼロの差がある(すなわち、f(x)の出力空間が不均一に分布している)場合、これが存在することを知っているプレーヤ/参加者の心理的影響は、彼らが参加しようとする意思がある可能性に影響を与え得る。
【0201】
つまり、f(x)が普遍的に均一に分布していないという事実は、RNを定義する複合ハッシュ関数が、特定のシナリオに対して、上述した問題を生じさせ得ることを意味する。次に、これは、プレーヤのセットが一緒になってRNの生成に協力することを不可能にし、この場合、PRNGメカニズムは崩壊している。
【0202】
本発明の実施形態によれば、プレーヤに知られている要素のリストの初期順序付けのために、ゲーム要素(または、一般的に、データ要素)の任意のそのような優先順序付けの存在を軽減するPRNGアルゴリズムへの拡張が導入される。
【0203】
ゲームに参加するN人のプレーヤの各々に対して、「プレーヤナッジ(player-nudge)」(すなわち、シフト入力)と呼ぶプレーヤの選択λiを導入する。これは、PRNGメカニズムへの入力として使用される個々のプレーヤシード入力に追加されるものである。次いで、プレーヤナッジのセットを使用して、ゲーム要素の初期順序付けに基づいて、決定論的かつ予測不可能な方法で、ゲーム要素のリストの順序を修正することができる。これは、個々の要素の位置(例えば、抽選におけるPi)を、対応するプレーヤのナッジλiを使用して変換すること、または、全てのプレーヤナッジを組み合わせて、ゲーム要素の完全なリストを変換することができるλと表記する「ゲームナッジ」を生成することによって、変換することを含み得る。
【0204】
ナッジλは、以下の方法のうちの1つで生成され得る。
1.各プレーヤは、次のように、第2乱数λ
iをオラクルに提供する。
【数25】
【0205】
各プレーヤナッジを独立してまたは集合的に使用して、以下のいずれかによって、元の順序付けおよびプレーヤナッジに基づいてゲーム要素のセットの新しい順序を生成することができる。
1.初期順序付リスト内の各ゲーム要素(例えば、公開鍵)の位置を、次のように、対応するプレーヤの選択したナッジだけシフトする。
【数26】
2.複合プレーヤナッジλだけゲーム要素の初期順序付リスト全体の位置をシフトする。
次いで、乱数R
Nを使用して、再順序付リストから要素を選択する。
【0206】
プレーヤは、以下の方法のうちの1つで個々の選択をコミットすることができる。
1.プレーヤナッジのハッシュダイジェストを、次のように、開始トランザクションに含める。
【数27】
ここで、X
iは、シード入力を示す。
2.プレーヤナッジと入力シードとを連結したものを、次のように、ハッシュダイジェストとして含める。
【数28】
ここで、X
iは、左端の32バイトであり得る。λ
iは、ハッシュプレイメージの残りのバイト(例えば、4バイト)であり得る。これらは、例示的な例にすぎないことに注意すること。
3.プレーヤナッジと入力シードを連結したもののみを、以下のように、ハッシュダイジェストとして含める。
【数29】
この任意選択は、少なくともX
i(および任意的にλ
i)があらかじめ決定されると仮定することに注意すること。
【0207】
オラクルがナッジ(すなわち、全体的なシフト)を生成してサブミットする場合、上記の2つの方法のいずれかを使用して、ゲームの開始時にこの選択された値にコミットする必要があるだけである。
【0208】
λが任意の参加者によって予測不可能であるという事実は、ナッジを含めることで任意の優先順序付けが軽減されることを保証する。λの値は、ΣiXiの値が予測不可能な擬似ランダムと考えられるのと同じ意味で予測不可能なランダム性のセキュアなソースとして扱うことができる。
【0209】
乱数R
Nを生成するために上記の例示的なPRNG方法で使用されるスクリプトが次によって与えられることを思い出すこと。
【数30】
そして、Nプレーヤ抽選の例におけるゲーム要素(すなわち、公開鍵)の順序付セットから当選要素P
wを選択するために使用されるスクリプトは、次式によって与えられる。
【数31】
【0210】
ここで、プレーヤのシフト/ナッジを使用してスクリプト内の公開鍵P
1,…P
Nの順序付けを変更するために<P
W>に追加される、[λ]と表記されるスクリプトの新しい部分を紹介する。スクリプト[λ]は、鍵のセットを変更する際にプレーヤナッジλ
1,…,λ
Nがどのように使用されるかに応じて、異なる形態をとり得る。オラクルトランザクションのロッキングスクリプトは、以下の形式をとり得る。
【数32】
【0211】
図13は、各プレーヤがそれぞれのシード入力r
1
'およびそれらのそれぞれのナッジ入力λ
1を含む修正された開始トランザクションを示す。
【0212】
図14は、要素のリストを再順序付けするように構成された修正されたオラクルトランザクションを示す。
【0213】
以下は、単一の数を使用してリストを変換するために1つの複合ナッジλが使用される例示的なスクリプトを提供する。
【数33】
【0214】
このスクリプトは、要素をスタックの一番上までロールさせ、スタックの一番上の3つのアイテムを合計でN回だけ回転させる効果を有する。この例において、複合ナッジは、プレーヤのナッジに基づいて事前に計算されてもよく、またはオラクル401が複合ナッジを提供してもよい。
【0215】
サブスクリプト「OP_DUP OP_TOALTSTACK <1> OP_ADD OP_ROLL OP_ROT OP_FROMALTSTACK」は、N回繰り返されるが、複合ラムダに加算される値をインクリメントして、全ての位置がある点で一番上にロールされることを保証することに注意すること。複合ナッジλは、ローリングが開始する要素のリスト内の位置を定義し、毎回、λの値をインクリメントして、リスト内のN個の位置全てを循環させる。altstackは、使用と使用の間でλの値を保管するために使用される。
【0216】
以下は、各プレーヤのナッジがリストを別々に変換するために使用される別の例示的なスクリプトを提供する。
【数34】
【0217】
オペコード「OP_TOALTSTACK」がN回繰り返され、サブスクリプトOP_FROMALTSTACK OP_ROLL OP_ROTも同様であることに注意すること。このスクリプトは、各個々のナッジが独立して使用されることを除いて、要素のリストを変更するために、前の例と同じメカニズムを使用する。
【0218】
結論
開示された技術の他の変形または使用事例は、一旦ここにおいて開示されると、当業者にとって明らかになり得る。本開示の範囲は、記載された実施形態によって限定されるものではなく、添付の特許請求の範囲によってのみ限定されるものである。
【0219】
例えば、上記のいくつかの実施形態は、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104に関して説明されている。しかしながら、ビットコインブロックチェーンは、ブロックチェーン150の特定の例であり、上記の説明は、一般的に任意のブロックチェーンに対して適用され得ることが理解されるだろう。すなわち、本発明は、決してビットコインブロックチェーンに限定されるものではない。より一般的に、ビットコインネットワーク106、ビットコインブロックチェーン150、およびビットコインノード104への上述の参照は、それぞれに、ブロックチェーンネットワーク106、ブロックチェーン150、およびブロックチェーンノード104への参照と置き換えることができる。ブロックチェーン、ブロックチェーンネットワーク、および/または、ブロックチェーンノードは、上述のように、ビットコインブロックチェーン150、ビットコインネットワーク106、およびビットコインノード104の説明された特性の一部または全部を共有することができる。
【0220】
本発明の好ましい実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークであり、そして、ビットコインノード104は、ブロックチェーン150のブロック151を生成、公表、伝搬、保管することに係る記載された機能の少なくとも全てを実行する。これらの機能の1つまたは一部だけを実行するが、全ての機能を実行するものではない、他のネットワークエンティティ(または、ネットワーク要素)が存在し得ることは、除外されていない。すなわち、ネットワークエンティティは、ブロックを生成および公表することなく、ブロックを伝搬かつ/あるいは保管する機能を実行することができる(これらのエンティティは、好ましいビットコインネットワーク106のノードと考えられないことを思いすこと)。
【0221】
本発明の好ましくない実施形態において、ブロックチェーンネットワーク106は、ビットコインネットワークでなくてよい。これらの実施形態においては、ノードが、ブロックチェーン150のブロック151を生成、公表、伝搬、および保管する機能の少なくとも1つまたはいくつかを実行することができるが、全てではないことは除外されない。例えば、これらの他のブロックチェーンネットワークにおいて、「ノード(“node”)」は、ブロック151を作成および公表するが、それらのブロック151を他のノードに保管かつ/あるいは伝播しないように構成されている、ネットワークエンティティを参照するために使用され得る。
【0222】
さらにより一般的に、上記の用語「ビットコインノード(“bitcoin node”)」104への参照は、用語「ネットワークエンティティ(“network entity”)」または「ネットワークエレメント(“network element”)」に置き換えることができ、こおで、そうしたエンティティ/エレメントは、ブロックを作成、発行、伝搬、および保管する役割の一部または全てを実行するように構成されている。そうしたネットワークエンティティ/エレメントの機能は、ブロックチェーンノード104を参照して上述したのと同じ方法でハードウェアにおいて実装することができる。
【0223】
上記の実施形態は、単なる例示として説明されたものであることが理解されるだろう。より一般的には、以下の記述のうち任意の1つ以上に従った方法、装置、またはプログラムが提供され得る。
【0224】
ステートメント.1 ブロックチェーントランザクションを使用してデータ要素を疑似乱数的に選択するコンピュータ実装方法である。前記方法は、第1当事者によって実行され、かつ、
データ要素の順序付リストおよび複数のシード入力を獲得するステップと、
第1トランザクションを生成するステップと、
ブロックチェーンに含めるために、前記第1トランザクションを1つ以上のブロックチェーンノードに対して利用可能にさせるステップと、
を含み、
前記第1トランザクションは、第1出力スクリプトを含み、
前記第1トランザクションが第2トランザクションの入力スクリプトと共に実行されると、前記第1出力スクリプトは、
前記データ要素の再順序付リストを出力し、
前記複数のシード入力に基づいて生成された、擬似乱数を出力し、かつ、
選択されたデータ要素として、前記擬似乱数に対応するデータ要素の前記再順序付リスト内の位置に配置されたデータ要素を出力する、
ように構成されている、方法。
【0225】
第1トランザクションを1つ以上のブロックチェーンノードに利用可能にさせることは、第1トランザクションをそれらのノードに直接送信することを含み得る。代替的に、第1当事者は、第1トランザクションをそれらのノードに転送することを担当する仲介者に第1トランザクションを送信することができる。
【0226】
本発明のコンテキストにおいて、データの出力は、スタック、例えば、メインスタックまたは代替スタックにデータを出力する(すなわち、データをプッシュする)ことを含み得る。データは、一時的にスタックにプッシュされ、次いで、除去され、または、別の方法で動作され得る。
【0227】
選択されたデータ要素を出力することは、選択されたデータ要素をメモリに保管すること、例えば、オフチェーンの使用のために保管することを含み得る。
【0228】
ステートメント.2 前記第1出力スクリプトは、
データ要素の前記順序付リストを出力するステップ、および、
1つ以上の再順序付け動作を実行するステップであり、各再順序付け動作は、データ要素の前記リスト内の2個以上のデータ要素の順序を変更することを含む、ステップ、によって、
前記データ要素の前記再順序付リストを出力するように構成されている、ステートメント1に記載の方法。
【0229】
ステートメント.3 前記1つ以上の再順序付け動作を実行するステップは、
前記データ要素の前記順序付リスト内のデータ要素の総数に対応する、再順序付け動作の総数を実行することを含む、ステートメント2に記載の方法。
【0230】
すなわち、再順序付け動作(例えば回転)の数は、要素の数に依存する。
【0231】
ステートメント.4 前記第1出力スクリプトは、全体的なシフトを含み、かつ、
それぞれの動作を実行することは、前記全体的なシフト入力に基づいて、前記2個以上のデータ要素を再順序付けすることを含む、ステートメント2または3に記載の方法。
【0232】
ステートメント.5 前記全体的なシフトは、前記第1当事者によって生成される、ステートメント4に記載の方法。
【0233】
ステートメント.6 前記全体的なシフトは、複数のシフト入力に基づいて生成され、
前記複数のシフト入力のうち1つ以上は、それぞれのユーザから獲得される、ステートメント4または5に記載の方法。
【0234】
例えば、全体のシフトは、複数のシフト入力の合計であってよい。または、全体のシフトは、複数のシフト入力の連結であってよい。複数のシフト入力に代替機能を適用して、全体的なシフトを生成してもよい。
【0235】
複数のシフト入力は、例えば、シフト入力の順序リストの加算または連結のハッシュとして、シフト全体を生成する前に順序リストに配置されてもよい。
【0236】
ステートメント.7 前記第1出力スクリプトは、シフト入力の順序リストを含み、
それぞれの動作を実行するステップは、前記シフト入力の順序付リストのそれぞれ1つに基づいて前記2個以上のデータ要素を再順序付けするステップを含む、ステートメント2または3に記載の方法。
【0237】
ステートメント.8 前記シフト入力の順序付リストのうち1つ以上は、それぞれのユーザから獲得される、ステートメント7に記載の方法。
【0238】
ステートメント.9 前記データ要素の順序付リストのうち1つ以上は、それぞれのユーザから獲得される、ステートメント1乃至8いずれか一項に記載の方法。
【0239】
ステートメント.10 同じそれぞれのユーザから獲得された、それぞれのデータ要素およびそれぞれのシフト入力は、それぞれに、前記データ要素の順序リストおよび前記シフト入力の前記順序リスト内の対応する位置に配置される、ステートメント8または9に記載の方法。
【0240】
ステートメント.11 前記複数のシード入力のうち1つ以上は、それぞれのユーザから獲得される、ステートメント1乃至10いずれか一項に記載の方法。
【0241】
ステートメント.12 前記複数のシード入力は、順序付リストのシード入力において配置され、
前記同じそれぞれのユーザから獲得された、それぞれのデータ要素およびそれぞれのシフト入力は、それぞれに、前記シード入力の順序付リストおよび前記シフト入力の順序付リストにおいて対応する位置に配置されている、ステートメント8または11に記載の方法。
【0242】
ステートメント.13 前記第1出力スクリプトは、前記複数のシード入力を含み、かつ、
前記第1出力スクリプトは、前記擬似乱数を生成するように構成されている、ステートメント1乃至12いずれか一項に記載の方法。
【0243】
ステートメント.14 前記疑似乱数は、前記複数のシード入力に複合ハッシュ関数を適用することによって生成される、ステートメント1乃至13いずれか一項に記載の方法。
【0244】
複合ハッシュ関数は、複数のハッシュ関数で構成されるハッシュ関数である。
【0245】
ステートメント.15 前記複数のシード入力に前記複合ハッシュ関数を適用することは、
前記複数のシード入力に基づいてシード全体の生成すること、
第1ハッシュダイジェストを生成するために、第1ハッシュ関数を前記シード全体に適用すること、および、
第2ハッシュダイジェストを生成するために、第2ハッシュ関数を前記シード全体に適用することを含む、ステートメント14に記載の方法。
【0246】
例えば、全体のシードは、複数のシード入力の合計であってよい。または、全体のシードは、複数のシード入力の連結であってよい。複数のシード入力に代替機能を適用して、全体のシードを生成してもよい。
【0247】
ステートメント.16 前記第2ハッシュ関数は、モジュロ関数である、ステートメント15に記載の方法。
【0248】
第1ハッシュ関数は、暗号ハッシュ関数であり得る。
【0249】
ステートメント.17 前記第1トランザクションは、開始トランザクションの出力を参照する入力を含み、
前記開始トランザクションは、それぞれのユーザからのそれぞれのコミットメントを含み、
前記それぞれのコミットメントは、前記それぞれのユーザから獲得された前記シフト入力にコミットする、ステートメント6または8に記載の方法。
【0250】
ステートメント.18 前記第1トランザクションは、それぞれの開始トランザクションの出力を参照する複数の入力を含み、
各開始トランザクションは、それぞれのユーザからのそれぞれのコミットメントを含み、
前記それぞれのコミットメントは、前記それぞれのユーザから獲得された前記シフト入力にコミットする、ステートメント6または8に記載の方法。
【0251】
ステートメント.19 それぞれのコミットメントは、少なくとも前記それぞれのシフト入力にハッシュ関数を適用することによって生成される、ステートメント17または18に記載の方法。
【0252】
ステートメント.20 それぞれのコミットメントは、少なくとも前記それぞれのシフト入力、および、前記同じそれぞれのユーザからの前記それぞれのシフト入力に、ハッシュ関数を適用することによって生成される、ステートメント19に記載の方法。
【0253】
ステートメント.21 前記方法は、第2複数のシード入力を獲得するステップを含み、前記第2複数のシード入力のうち1つ以上は、それぞれのユーザから獲得され、前記疑似乱数は、前記複数のシード入力および前記第2複数のシード入力に基づいて生成される、ステートメント1乃至20いずれか一項に記載の方法。
【0254】
ステートメント.22 前記データ要素のうち少なくとも1つは、前記第1当事者によって生成される、ステートメント1乃至21いずれか一項に記載の方法。
【0255】
ステートメント.23 前記データ要素は、公開鍵である、ステートメント1乃至22いずれか一項に記載の方法。
【0256】
ステートメント.24 前記第1出力スクリプトは、第1出力を前記選択された公開鍵に対してロックするように構成されている、ステートメント23に記載の方法。
【0257】
ステートメント.25 前記方法は、前記選択されたデータ要素をオフチェーン機能に供給するステップを含む、ステートメント1乃至24いずれか一項に記載の方法。
【0258】
オフチェーン機能とは、ブロックチェーン上で、または、ブロックチェーンのコンテキストにおいては実行されない機能である。例えば、オフチェーン機能は、コンピュータシミュレーションまたは暗号キージェネレータであってよい。
【0259】
ステートメント.26 コンピュータ機器であって、
1つ以上のメモリユニットを含むメモリと、
1つ以上の処理ユニットを含む処理装置と、を含み、
前記メモリは、前記処理装置において動作するように構成されたコードを保管し、
前記コードは、前記処理装置において実行されると、ステートメント1乃至25のいずれか一項に記載の方法を実施するように構成されている、コンピュータ機器。
【0260】
ステートメント.27 有形のコンピュータ可読記憶媒体に保管されたコンピュータプログラムであって、 1つ以上のプロセッサによって実行されると、ステートメント1乃至25いずれか一項に記載の方法を実施させるように構成されている、コンピュータプログラム。
【0261】
ここにおいて開示される別の態様に従って、第1当事者および各ユーザの動作を含む方法が提供され得る。
【0262】
ここにおいて開示された別の態様に従って、第1当事者のコンピュータ機器およびそれぞれのユーザを含むシステムが提供され得る。
【国際調査報告】