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

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

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

<>
  • 特表-スクリプトにおける楕円曲線演算 図1
  • 特表-スクリプトにおける楕円曲線演算 図2
  • 特表-スクリプトにおける楕円曲線演算 図3
  • 特表-スクリプトにおける楕円曲線演算 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2025-01-30
(54)【発明の名称】スクリプトにおける楕円曲線演算
(51)【国際特許分類】
   G09C 1/00 20060101AFI20250123BHJP
   H04L 9/32 20060101ALI20250123BHJP
【FI】
G09C1/00 620A
H04L9/32 200Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024544381
(86)(22)【出願日】2023-01-03
(85)【翻訳文提出日】2024-07-25
(86)【国際出願番号】 EP2023050089
(87)【国際公開番号】W WO2023143882
(87)【国際公開日】2023-08-03
(31)【優先権主張番号】2200993.0
(32)【優先日】2022-01-26
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】110004381
【氏名又は名称】弁理士法人ITOH
(72)【発明者】
【氏名】ラライア,エンリケ
(57)【要約】
ブロックチェーン・トランザクションを用いて実行される楕円曲線演算を行うためのコンピュータ実行方法はスクリプト・ジェネレータにより実行される。第1のブロックチェーン・トランザクションの第1のスクリプトが生成され、第1のスクリプトは、ターゲット整数とモジュラス値を取得し、ターゲット整数のモジュラー・インバースを出力するように構成されたモジュラー・インバージョン・スクリプトを含む。ターゲット整数とモジュラス値は互いに素である。モジュラー・インバースは、ターゲット整数とモジュラス値を入力として、拡張ユークリッド・アルゴリズムの第1のシーケンスを反復的に計算し、第1のシーケンスを用いて、ターゲット整数のベズー係数を計算することにより生成され、ターゲット整数のベズー係数はモジュラー・インバースとして出力される。第1のスクリプトは第1のブロックチェーン・トランザクションに含めるために出力される。
【特許請求の範囲】
【請求項1】
ブロックチェーン・トランザクションを用いて実行される楕円曲線演算を行うための、スクリプト・ジェネレータが実行するコンピュータ実行方法であって:
第1のブロックチェーン・トランザクションの第1のスクリプトを生成するステップ;及び
前記第1のブロックチェーン・トランザクションに含めるために前記第1のスクリプトを出力するステップ;
を含み、前記第1のスクリプトはモジュラー・インバージョン・スクリプトを含み、前記モジュラー・インバージョン・スクリプトは、スクリプト・エンジンにより実行されると:
ターゲット整数とモジュラス値を取得し、前記ターゲット整数のモジュラー・インバースを出力するように構成されており、前記ターゲット整数と前記モジュラス値は互いに素であり、前記モジュラー・インバースは、前記ターゲット整数とモジュラス値を入力として、拡張ユークリッド・アルゴリズムの第1のシーケンスを反復的に計算し、前記第1のシーケンスを用いて、前記ターゲット整数のベズー係数を計算することにより生成され、前記ターゲット整数のベズー係数は前記モジュラー・インバースとして出力される、方法。
【請求項2】
請求項1に記載の方法において、前記モジュラー・インバージョン・スクリプトは、前記拡張ユークリッド・アルゴリズムの第2のシーケンスを反復的に計算し、前記第2のシーケンスを用いて、前記ターゲット整数と前記モジュラス値の最大公約数(GCD)を計算するように構成されており、前記モジュラー・インバージョン・スクリプトは、順に実行されるサブ・スクリプトの系列を含み、各々のサブ・スクリプトは、第2のシーケンスにおけるそれぞれの値と、前記第1のシーケンスにおける対応するそれぞれの値とを計算するように構成されており、前記モジュラー・インバージョン・スクリプトは、前記第2のシーケンスのそれぞれの値が前記GCDに等しくなるまで、前記系列におけるサブ・スクリプトを実行するように構成されており、前記GCDに等しい前記第2のシーケンスのそれぞれの値に対応する前記第1のシーケンスのそれぞれの値は、前記ターゲット整数のベズー係数として出力される、方法。
【請求項3】
請求項2に記載の方法において、前記モジュラー・インバージョン・スクリプトは、アンラップされたループを実行するように構成されており、各々のサブ・スクリプトは、前記アンラップされたループのそれぞれのステップを実行し、それぞれの第1のブランチとそれぞれの第2のブランチとを含み、前記それぞれの第1のブランチは、前記第1のシーケンスの次のそれぞれの値と、前記第2のシーケンスの次のそれぞれの値とを計算するように構成されており、それぞれのサブ・スクリプトが前記GCDを前記シーケンスの次のそれぞれの値として算出するまで、第1数のサブ・スクリプトのそれぞれの第1のブランチが実行され、各々の残りのサブ・スクリプトのそれぞれの第2のブランチが実行され、各々の残りのサブ・スクリプトのそれぞれの第2のブランチの実行は、ベズー係数の演算には寄与しない、方法。
【請求項4】
請求項2に記載の方法において、前記サブ・スクリプトの数は、予め定められており、且つκ/log2Φ-1に等しい上限に対応しており、κは前記モジュラス値のビット数であり、Φは黄金比である、方法。
【請求項5】
請求項1に記載の方法において:
前記第1のスクリプトを前記第1のブロックチェーン・トランザクションに含めるステップ;及び
前記第1のブロックチェーン・トランザクションを、1つ以上のブロックチェーン・ノード及び/又は1つ以上のブロックチェーン・ユーザーへサブミットするステップ;
を含む方法。
【請求項6】
請求項1に記載の方法において、前記第1のスクリプトを出力するステップは、前記第1のスクリプトを1つ以上のブロックチェーン・ユーザーへ送信するステップを含む、方法。
【請求項7】
請求項1に記載の方法において、前記第1のスクリプトは点加算スクリプトを含み、前記点加算スクリプトは:
第1の楕円曲線点、第2の楕円曲線点、及び前記モジュラス値を取得するステップ;及び
前記第1及び第2の楕円曲線点の楕円曲線加算を実行することによって第1のターゲット楕円曲線点を出力するステップ;
を行うように構成されており、前記点加算スクリプトは前記モジュラー・インバージョン・スクリプトを含み、前記楕円曲線加算を実行することは、前記第1のターゲット楕円曲線点のそれぞれのx座標とそれぞれのy座標を計算するために使用される第1のラムダ値を計算することを含み、前記第1のラムダ値を計算することは、第1の分子値と第1の分母値を計算することを含み、前記点加算スクリプトは、前記モジュラー・インバージョン・スクリプトが、前記ターゲット整数として設定された第1の分母値を用いて実行され、前記第1の分母値のモジュラー・インバースを生成することを引き起こすように構成されており、前記第1のラムダ値は、前記第1の分子値に、前記第1の分母値のモジュラー・インバースを乗算することにより計算される、方法。
【請求項8】
請求項7に記載の方法において、前記点加算スクリプトは、前記第1及び第2の楕円曲線点が等しい場合に前記第1の分子値と第2の分子値を生成するように構成された第1のブランチと、前記第1及び第2の楕円曲線点が等しくない場合に前記第1の分子値と前記第2の分子値を生成するように構成された第2のブランチとを含み、前記モジュラー・インバージョン・スクリプトは、前記第1のブランチ又は前記第2のブランチの何れかが実行された後に実行され、前記モジュラー・インバージョン・スクリプトは、前記点加算スクリプトの一部分として1回包含される、方法。
【請求項9】
請求項7に記載の方法において、前記第1のスクリプトは点減算スクリプトを含み、前記点減算スクリプトは:
第3の楕円曲線点、及び前記モジュラス値を取得するステップ;及び
前記第2の楕円曲線点を前記点加算スクリプトへ出力するステップ;
を行うように構成されており、前記第2の楕円曲線点は、前記モジュラス値を用いて前記楕円曲線点の剰余を計算し、その結果をネゲートすることにより生成される、方法。
【請求項10】
請求項1に記載の方法において、前記第1のスクリプトは点倍化スクリプトを含み、前記点倍化スクリプトは:
第4の楕円曲線点、及び前記モジュラス値を取得するステップ;及び
前記第4の楕円曲線点を倍化することによって第2のターゲット楕円曲線点を出力するステップ;
を行うように構成されており、前記点倍化スクリプトは前記モジュラー・インバージョン・スクリプトを含み、前記第4の楕円曲線点を倍化することは、前記第2のターゲット楕円曲線点のそれぞれのx座標とそれぞれのy座標を計算するために使用される第2のラムダ値を計算することを含み、前記第2のラムダ値を計算することは、第2の分子値と第2の分母値を計算することを含み、前記点倍化スクリプトは、前記モジュラー・インバージョン・スクリプトが、前記ターゲット整数として設定された第2の分母値を用いて実行され、前記第2の分母値のモジュラー・インバースを生成することを引き起こすように構成されており、前記ラムダ値は、前記第2の分子値に、前記第2の分母値のモジュラー・インバースを乗算することにより計算される、方法。
【請求項11】
請求項10に記載の方法において、前記第1のスクリプトは、第1のスカラー乗算(MBS)スクリプトを含み、前記第1のMBSスクリプトは:
第5の楕円曲線点、モジュラス値、及び第1のスカラー値を取得するステップであって、前記第1のスカラー値はバイナリで表現されており、バイナリ表現のそれぞれのビットはそれぞれのインデックスに関連付けられている、ステップ;及び
倍化加算アルゴリズムを使用して前記第5の楕円曲線点に前記スカラー値を乗算することにより、第3のターゲット楕円曲線点を出力するステップ;
を行うように構成されており、前記第1のMBSスクリプトは、順に実行されるサブ・スクリプトの系列を含み、各々のサブ・スクリプトは、それぞれのインデックスに関連付けられ、前記点倍化スクリプトのインスタンスを含み、前記サブ・スクリプトのうちの第1のものは、前記点倍化スクリプトを用いて前記第5の楕円曲線点を倍化し、それぞれの中間結果を出力するように構成されており、前記系列における一連のサブ・スクリプトの各々は、前記系列における先行するサブ・スクリプトにより出力された前記それぞれの中間結果を倍化するために、前記点倍化スクリプトを使用するように構成されており、前記第1のMBSスクリプトは、前記第1のスカラー値のバイナリ表現のそれぞれのビットであって1に設定されているものと同じそれぞれのインデックスに対応するそれぞれのインデックスを有する、それぞれのサブ・スクリプトにより生成されたそれぞれの中間結果を共に加算することによって、前記第3のターゲット楕円曲線点を生成するように構成されている、方法。
【請求項12】
請求項7に記載の方法において、前記第1のスクリプトは、第2のスカラー乗算(MBS)スクリプトを含み、前記第2のMBSスクリプトは:
第2のスカラー値を取得するステップであって、前記第2のスカラー値はバイナリで表現されており、バイナリ表現のそれぞれのビットはそれぞれのインデックスiに関連付けられている、ステップ;及び
それぞれの第5の楕円曲線点に前記第2のスカラー値を乗算することにより、第4のターゲット楕円曲線点を出力するステップ;
を行うように構成されており、前記第2のMBSスクリプトは、順に実行されるサブ・スクリプトの系列を含み、各々のサブ・スクリプトは、それぞれのインデックスiに関連付けられ、点倍化スクリプトのインスタンスを含み、各々のサブ・スクリプトは、2iまで上昇する前記それぞれの第5の楕円曲線点に対応するそれぞれの楕円曲線点を含み、前記第2のMBSスクリプトは、前記第2のスカラー値のバイナリ表現のそれぞれのビットであって1に設定されているものと同じそれぞれのインデックスに対応するそれぞれのインデックスを有する、それぞれのサブ・スクリプトに属するそれぞれの楕円曲線点を共に加算することによって、前記第4のターゲット楕円曲線点を生成するように構成されている、方法。
【請求項13】
請求項1に記載の方法において、前記第1のスクリプトは、所与のスカラーのバイナリ表現のそれぞれのビットの各々が、1に設定されているかどうかを、それぞれのビットの各々について:
l(エル)は前記スカラーのバイト長である場合に、ビッグ・エンディアンでl(エル)バイト配列として1を出力し;
前記l(エル)バイト配列のそれぞれのビットを1に設定し;及び
前記スカラーのそれぞれのビットと前記l(エル)バイト配列のそれぞれのビットとを比較すること;
により決定するように構成された設定ビット決定スクリプトを含み、前記それぞれのビットは、前記スカラーのそれぞれのビットが前記l(エル)バイト配列のそれぞれのビットに合致する場合に、1に設定されるように決定されている、方法。
【請求項14】
請求項1に記載の方法において、前記第1のスクリプトはモジュラー縮減スクリプトを含み、前記モジュラー縮減スクリプトは:
それぞれの整数xと、それぞれのモジュラス値pとを取得するステップ;及び
(x%p+p)%p を計算することによって前記それぞれの整数のモジュラー縮減を出力するステップ;
を行うように構成されており、%は剰余演算子である、方法。
【請求項15】
請求項12に記載の方法において、前記第1のスクリプトは、コミットメント点と、第2のMBSスクリプトの2つのそれぞれのインスタンスと、前記点加算スクリプトのそれぞれのインスタンスとを含み、前記第1のスクリプトは:
第1の候補スカラーと第2の候補スカラーを取得するステップであって、前記第1及び第2の候補スカラーは、第2のブロックチェーン・トランザクションのロック解除スクリプトに含まれている、ステップ;
前記第1の候補スカラーを、前記第2のMBSスクリプトの第1のそれぞれのインスタンスに入力して、第1の楕円曲線候補点を生成するステップ;
前記第2の候補スカラーを、前記第2のMBSスクリプトの第2のそれぞれのインスタンスに入力して、第2の楕円曲線候補点を生成するステップ;
前記第1の楕円曲線候補点と前記第2の楕円曲線候補点とを前記点加算スクリプトのそれぞれのインスタンスに入力して、コミットメント候補点を生成するステップ;及び
前記コミットメント候補点は、前記コミットメント点に等しいことを検証するステップ;
を行うように構成されている、方法。
【請求項16】
請求項12に記載の方法において、第1のスクリプトは、所定の公開鍵と所定のアドレスとを含み、前記第1のスクリプトは:
秘密鍵と候補アドレスを取得するステップであって、前記秘密鍵と前記候補アドレスは、第2のブロックチェーン・トランザクションのロック解除スクリプトに含まれている、ステップ;
前記秘密鍵を前記第2のMBSに入力して候補公開鍵を生成するステップであって、前記第2のMBSのそれぞれの第5の楕円曲線点は、公開鍵生成点である、ステップ;
前記候補公開鍵は前記所定の公開鍵に等しいことを検証するステップ;
前記候補公開鍵と前記所定の公開鍵とを前記点加算スクリプトのインスタンスに入力して、楕円曲線候補点を生成するステップ;
1つ以上のハッシュ関数を用いて前記楕円曲線候補点にハッシュ演算を施し、候補アドレスを生成するステップ;及び
前記候補アドレスは前記所定のアドレスに合致していること、又は前記候補アドレスの一部が前記所定のアドレスの一部に合致していることを検証するステップ;
を行うように構成されている、方法。
【請求項17】
ブロックチェーン・トランザクションを用いて楕円曲線演算を行うための、スクリプト・エンジンが実行するコンピュータ実行方法であって:
第1のブロックチェーン・トランザクションを取得するステップ;
第2のブロックチェーン・トランザクションを取得するステップ;及び
第1のスクリプトを第2のスクリプトと一緒に実行してターゲット整数のモジュラー・インバースを生成するステップ;
を含み、前記第1のブロックチェーン・トランザクションは前記第1のスクリプトを含み、前記第1のスクリプトはモジュラー・インバージョン・スクリプトを含み、前記モジュラー・インバージョン・スクリプトは、スクリプト・エンジンにより実行されると:
ターゲット整数とモジュラス値を取得し、前記ターゲット整数のモジュラー・インバースを出力するように構成されており、前記ターゲット整数と前記モジュラス値は互いに素であり、前記モジュラー・インバースは、前記ターゲット整数とモジュラス値を入力として、拡張ユークリッド・アルゴリズムの第1のシーケンスを反復的に計算し、前記第1のシーケンスを用いて、前記ターゲット整数のベズー係数を計算することにより生成され、前記ターゲット整数のベズー係数は前記モジュラー・インバースとして出力され;
前記第2のブロックチェーン・トランザクションは前記第2のスクリプトを含み、前記第2のスクリプトは前記ターゲット整数と前記モジュラス値を含む、方法。
【請求項18】
請求項1に記載の方法において、前記モジュラス値は素数である、方法。
【請求項19】
1つ以上のメモリ・ユニットを含むメモリ;及び
1つ以上の処理ユニットを含む処理装置;
を含むコンピュータ装置であって、前記メモリは前記処理装置において動作するように構成されたコードを 格納しており、前記コードは、請求項1ないし18のうちの何れか一項に記載の方法を前記処理装置に実行させるように構成されている、コンピュータ装置。
【請求項20】
コンピュータ読み取り可能なストレージに組み込まれたコンピュータ・プログラムであって、請求項1ないし18のうちの何れか一項に記載の方法を1つ以上のプロセッサに実行させるように構成されている、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ブロックチェーン・トランザクションを使用してスクリプト内で楕円曲線演算を実行できるようにするコンピュータ実行方法に関連する。
【背景技術】
【0002】
ブロックチェーンとは、分散されたデータ構造の形態を指し、ブロックチェーンの重複したコピーは、分散されたピア・ツー・ピア(peer-to-peer,P2P)ネットワーク(以下、「ブロックチェーン・ネットワーク」と言及される)内の複数のノードの各々において維持され且つ広く公表されている。ブロックチェーンは、データのブロックのチェーンを含み、各ブロックは、1つ以上のトランザクションを含む。いわゆる「コインベースのトランザクション」(coinbase transactions)以外の各トランザクションは、シーケンス内の先行するトランザクションを後方から指し示し、そのシーケンスは、1つ以上のコインベースのトランザクションに戻る1つ以上のブロックにわたる可能性がある。コインベース・トランザクションについては以下で更に説明される。ブロックチェーン・ネットワークにサブミットされたトランザクションは、新しいブロックに含められる。新しいブロックは、しばしば「マイニング(mining)」と呼ばれるプロセスによって生成され、これは、「プルーフ・オブ・ワーク(proof-of-work)」を実行する、即ちブロックチェーンの新しいブロックに含められることを待機している順序付けられ且つ検証されたペンディング・トランザクションの所定のセットの表現に基づいて暗号パズルを解決する、競合する複数のノードの各々に関わる。ブロックチェーンは一部のノードで刈り取られる(pruned)可能性があり、ブロックの公表は単なるブロック・ヘッダの公表によって達成できる、ということに留意すべきである。
【0003】
ブロックチェーン内のトランザクションは、以下の目的のうちの1つ以上のために使用される可能性がある:デジタル資産(即ち、いくらかのデジタル・トークン)を運ぶこと、仮想化された台帳又はレジストリ内のエントリのセットを注文すること、タイムスタンプ・エントリを受信及び処理すること、及び/又は、インデックスポインタの時間順処理。ブロックチェーンは、ブロックチェーンのトップに追加の機能を階層化するために利用されることも可能である。例えば、ブロックチェーン・プロトコルは、トランザクションにおいて、データに対するインデックス又は追加的なユーザー・データを格納することを許容することが可能である。単一トランザクション内に格納することが可能な最大データ容量には事前に指定された制限はなく、従って、より複雑なデータをますます多く組み込むことが可能である。例えば、これは、電子文書をブロックチェーンに、又はオーディオ又はビデオ・データを格納するために使用される可能性がある。
【0004】
ブロックチェーン・ネットワークのノード(しばしば「マイナー(miners)」と呼ばれる)は、分散されたトランザクションの登録と検証のプロセスを実行し、これらについては更に後述される。要するに、このプロセスの間に、ノードはトランザクションを検証し、それらをブロック・テンプレートに挿入し、それについて彼らは有効なプルーフ・オブ・ワークの解を特定することを試みる。いったん有効な解が発見されると、新たなブロックがネットワークの他のノードに伝搬され、各ノードは、新たなブロックをブロックチェーンに記録できるようになる。トランザクションをブロックチェーンに記録させるために、ユーザー(例えば、ブロックチェーン・クライアント・アプリケーション)は、伝搬されるべきネットワークのノードのうちの1つへトランザクションを送信する。トランザクションを受信したノードは、検証されたトランザクションを新たなブロックに組み込むプルーフ・オブ・ワークの解を発見するために競うことが可能である。各ノードは、同じノード・プロトコルを強制するように設定されており、このプロトコルは、トランザクションが有効であるための1つ以上の条件を含むであろう。無効なトランザクションは、ブロックに伝搬されず、組み込まれることもない。トランザクションが検証され、それによってブロックチェーンに受け入れられたと仮定すると、トランザクション(何らかのユーザー・データを含む)は、ブロックチェーン・ネットワークにおける各ノードで、変更不可能な公的なレコードとして登録され且つインデックス付けされたまま残るであろう。
【0005】
プルーフ・オブ・ワーク・パズルを解くことに成功して最新のブロックを作成したノードは、典型的には、ある数量のデジタル資産、即ち、幾らかのトークンを分配する「コインベース・トランザクション」と呼ばれる新たなトランザクションによって報酬を受ける。無効なトランザクションの検出と拒否は、ネットワークのエージェントとして動作し、不正行為を報告及びブロックするインセンティブを得ている競合するノードの動作によって規制される。情報の幅広い公表は、ユーザーが、ノードのパフォーマンスを継続的に監査することを可能にする。単なるブロック・ヘッダの公表は、参加者が、ブロックチェーンの継続的な完全性を保証することを許容する。
【0006】
「アウトプット・ベース」モデル(しばしば、UTXOベース・モデルとも呼ばれる)では、所与のトランザクションのデータ構造は、1つ以上のインプットと1つ以上のアウトプットとを含む。何らかの使用可能なアウトプットは、トランザクションの処理シーケンスから導出可能なデジタル資産の数量を指定する要素を含む。使用可能なアウトプットは、時折、UTXO(“unspent transaction output”)と言及される。アウトプットは、アウトプットの将来の償還(redemption)のための条件を指定するロッキング・スクリプトを更に含むことが可能である。ロッキング・スクリプトは、デジタル・トークン又は資産を検証及び転送するために必要な条件を定義するプレディケート(predicate)である。(コインベース・トランザクション以外の)トランザクションの各インプットは、先行するトランザクションにおけるそのようなアウトプットを指すポインタ(即ち、リファレンス)を含み、更に、指し示されたアウトプットのロッキング・スクリプトをロック解除するためのアンロッキング・スクリプトを含む可能性がある。そこで、トランザクションのペアを考え、それらを第1及び第2のトランザクション(又は「ターゲット」トランザクション)と呼ぶことにする。第1のトランザクションは、デジタル資産の数量を指定する少なくとも1つのアウトプットを含み、アウトプットをロック解除する1つ以上の条件を定義するロッキング・スクリプトを含む。第2のターゲット・トランザクションは、第1のトランザクションのアウトプットに対するポインタと、第1のトランザクションのアウトプットをロック解除するためのアンロッキング・スクリプトとを含む、少なくとも1つのインプットを含む。
【0007】
このようなモデルにおいて、第2のターゲット・トランザクションがブロックチェーン・ネットワークへ送信され、ブロックチェーン内で伝搬され記録される場合に、各ノードで適用される有効性に関する条件のうちの1つは、アンロッキング・スクリプトが、第1のトランザクションのロッキング・スクリプトで定義された1つ以上の条件の全てを充足することであろう。別のものは、第1のトランザクションのアウトプットが、別の先行する有効なトランザクションによって既に償還されてはいない、ということであろう。これらのうちの何れかの条件によってターゲット・トランザクションが無効であることを発見した如何なるノードも、それを伝搬せず(有効なトランザクションとして伝搬せず、おそらくは無効なトランザクションを登録する)、ブロックチェーンに記録される新たなブロックに含められることもない。
【0008】
別のタイプのトランザクション・モデルは、アカウント・ベース・モデルである。この場合、各トランザクションは、移転されるべき分量を、過去のトランザクションのシーケンスの中で先行するトランザクションのUTXOを参照することによるのではなく、むしろ絶対的なアカウント残高を参照することによって定める。全てのアカウントの現在の状態は、ブロックチェーンに対してノードによって個々に保存され、絶えず更新される。
【発明の概要】
【0009】
ブロックチェーン・トランザクションは、ロック解除スクリプト及びロッキング・スクリプトというスクリプトを含む。これらのスクリプトは、データ(例えば、公開鍵)及び関数(例えば、オペコード)がチェーンに記録されることを可能にし、関数は、スクリプトが実行される際に、例えばトランザクション検証中に、データに作用する。例えば、関数は、公開鍵にハッシュ演算を施して、公開鍵ハッシュを生成するために使用されることが可能である。
【0010】
楕円曲線は、例えば、楕円曲線暗号(elliptic curve cryptography,ECC)、楕円曲線デジタル署名アルゴリズム(elliptic curve digital signature algorithms,ECDSA)、楕円曲線ディフィー・ヘルマン鍵交換(elliptic curve Diffie-Hellman key exchanges)などの多くのアプリケーションで使用されている。ECDSAのようなこれらのうちの一部のアプリケーションは、基本的には何らかのブロックチェーン・プロトコルにリンクされている。例えば、ほとんどのブロックチェーン・プロトコルは、ECDSA署名を使用してトランザクションに署名しており、これは、楕円曲線点を用いて生成された秘密鍵と公開鍵のペアを当てにしている。
【0011】
楕円曲線演算とは、楕円曲線点に対して或る数学的演算を行うことであり、例えば、2つの楕円曲線点を加算したり、或いは楕円曲線点にスカラーを乗算したりすることである。楕円曲線演算の基本的な要件は、楕円曲線点のモジュラー・インバース又はモジュラー逆元(modular inverse)、或いはより一般的に言えば、楕円曲線点のx座標のような整数のモジュラー・インバースを計算する能力である。スクリプト内で楕円曲線演算を実行できることは有利であろう、ということが本件で認められる。従って、スクリプト内で整数のモジュラー・インバースを計算できる必要がある。
【0012】
本件で開示される一態様によれば、ブロックチェーン・トランザクションを用いて実行される楕円曲線演算を行うためのコンピュータ実行方法が提供され、本方法はスクリプト・ジェネレータにより実行され、本方法は:
第1のブロックチェーン・トランザクションの第1のスクリプトを生成するステップ;及び
第1のブロックチェーン・トランザクションに含めるために第1のスクリプトを出力するステップ;
を含み、第1のスクリプトはモジュラー・インバージョン・スクリプトを含み、モジュラー・インバージョン・スクリプトは、スクリプト・エンジンにより実行されると:
ターゲット整数とモジュラス値を取得し、ターゲット整数のモジュラー・インバースを出力するように構成されており、ターゲット整数とモジュラス値は互いに素であり、モジュラー・インバースは、ターゲット整数とモジュラス値を入力として、拡張ユークリッド・アルゴリズム(extended Euclidean algorithm)の第1のシーケンスを反復的に計算し、第1のシーケンスを用いて、ターゲット整数のベズー係数(Bezout co-efficient)を計算することにより生成され、ターゲット整数のベズー係数はモジュラー・インバースとして出力される。
【0013】
スクリプト・ジェネレータは、第2のトランザクションの第1のスクリプト(例えば、ロッキング・スクリプト)を生成する。スクリプトは、少なくともモジュラー・インバージョン・スクリプトを含み、これは、モジュラス値(n)を用いてターゲット整数(x)のモジュラー・インバース、即ち、x-1 mod nを取得するように構成されている。モジュラー・インバースは、拡張ユークリッド・アルゴリズムの少なくとも一部を実行することによって生成されるターゲット整数のベズー係数として計算される。第1のスクリプトは、ターゲット整数のベズー係数を計算する拡張ユークリッド・アルゴリズムのシーケンスを計算するように構成される。ターゲット整数及びモジュラス値は、第1のスクリプト(例えば、ロッキング・スクリプト)の一部として含まれてもよいし、或いは、異なるスクリプト(例えば、第2のトランザクションのロック解除スクリプト)による入力として提供されてもよい。第1のトランザクションはブロックチェーンに記録される。第1のスクリプトが実行される場合に(例えば、トランザクションの検証中に)、ターゲット整数のモジュラー・インバースが計算され、(例えば、スタックのようなメモリに)出力される。本開示は、整数のモジュラー・インバースが、スクリプトで実行されることを可能にするすることによって、ブロックチェーンの機能性を改善する。
【0014】
整数のモジュラー・インバースは、1つ以上の加法算術演算の一部として使用されてもよい。例えば、モジュラー・インバージョン・スクリプトは、2つの楕円曲線点を加算するように構成された点加算スクリプトの一部(又は出力データ)として含まれてもよい。他の例として、モジュラー・インバージョン・スクリプトは、楕円曲線点にスカラーを乗算するように構成されたスカラー乗算スクリプトの一部として使用されてもよい。
【0015】
スクリプト内で楕円曲線演算を実行する利点の1つは、計算が変更不可能にオン・チェーンに保存されることであり、これは、計算と結果が変更不可能であること、及び、将来それらを検証できることを意味する。別の利点は、処理能力の点で高くつく演算が、スクリプト・ジェネレータではなく、スクリプトを実行するスクリプト・エンジンによって実行されることである。スクリプト・エンジンは、典型的には、スクリプト・エンジン(例えば、ユーザー)よりも多くの演算リソースを有するエンティティ(例えば、ブロックチェーン・ノード)によって実装されている。
【0016】
第1のスクリプトはスクリプト言語で記述されている。例えば、ある特定のブロックチェーン・プロトコルは、‘Script’(大文字のS)と呼ばれる特定の言語を使用し、これは、オペコードと呼ばれる事前に定義された機能で構築されるスタック・ベースのスクリプト言語である。このような言語では、所与のオペコードが、以下の演算:(a)スタックに要素を置くこと、(b)スタックから要素を取得すること、(c)スタック上の要素を操作すること、(d)スタックから要素を削除すること、のうちの1つ以上にマッピングされる。一部のスタック・ベースの言語は、例えばメイン・スタックと代替(alt)スタックのような、2つのスタックにデータを格納することが可能である。本開示の実施形態は、ブロックチェーンの既存のScript言語を用いて楕円曲線演算を実行することを可能にし、従って、攻撃者にとっての攻撃対象領域を増大させる可能性のある新しいオペコードの導入を回避することによって、ブロックチェーンのセキュリティを維持する。
【図面の簡単な説明】
【0017】
本開示の実施形態の理解を支援し、そのような実施形態がどのように実施される可能性があるかを示すために、単なる例として、添付の図面を参照する。
図1図1は、ブロックチェーンを実装するためのシステムの概略ブロック図である。
図2図2は、ブロックチェーンに記録される可能性のあるトランザクションの一部の例を概略的に示す。
図3図3は、トランザクションを処理するための或るノード・ソフトウェアの概略ブロック図である。
図4図4は、スクリプトを生成して実行するための例示的なシステムの概略ブロック図である。
【0018】
1.例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットのような広域インターネットワークであるパケット交換ネットワーク101を含む可能性がある。パケット交換ネットワーク101は、パケット交換ネットワーク101内でピア・ツー・ピア(P2P)ネットワーク106を形成するように構成される可能性のある複数のブロックチェーン・ノード104を含む。図示されていないが、ブロックチェーン・ノード104は、ほぼ完全なグラフとして配置されてもよい。従って、各ブロックチェーン・ノード104は、他のブロックチェーン・ノード104に高度に接続されている。
【0019】
各ブロックチェーン・ノード104はピアのコンピュータ装置を含み、ノード104のうちの異なるものは異なるピアに属する。各ブロックチェーン・ノード104は、1つ以上のプロセッサ、例えば1つ以上の中央処理ユニット(CPU)、アクセラレータ・プロセッサ、アプリケーション特有のプロセッサ及び/又はフィールド・プログラマブル・ゲート・アレイ(FPGA)、及び、特定用途向け集積回路(ASIC)のような他の装置を含む処理装置を含む。各ノードはまた、メモリ、即ち、非一時的なコンピュータ読み取り可能な媒体又はメディアの形態でコンピュータ読み取り可能なストレージを含む。メモリは、1つ以上のメモリ媒体、例えば、ハード・ディスクのような磁気媒体;ソリッド・ステート・ドライブ(SSD)、フラッシュ・メモリ又はEEPROMのような電子媒体;及び/又は光ディスク・ドライブのような光媒体、を使用する1つ以上のメモリ・ユニットを含んでもよい。
【0020】
ブロックチェーン150は、データ151のブロックのチェーンを含み、ブロックチェーン150のそれぞれのコピーは、分散型の又はブロックチェーン・ネットワーク106内の複数のブロックチェーン・ノード104のそれぞれで維持されている。上述のように、ブロックチェーン150のコピーを維持することは、必ずしもブロックチェーン150を完全に記憶することを意味しない。むしろ、ブロックチェーン150は、各ブロックチェーン・ノード150が各ブロック151のブロック・ヘッダ(以下で説明される)を格納している限り、データのプルーニング(pruned)を行ってもよい。チェーン内の各ブロック151は、1つ以上のトランザクション152を含み、ここで、この文脈におけるトランザクションは、一種のデータ構造を指す。データ構造の性質は、トランザクション・モデル又は方式の一部として使用されるトランザクション・プロトコルのタイプに依存するであろう。所与のブロックチェーンは、全体を通じて1つの特定のトランザクション・プロトコルを使用するであろう。1つの一般的なタイプのトランザクション・プロトコルでは、各トランザクション152のデータ構造は、少なくとも1つのインプットと少なくとも1つのアウトプットとを含む。各々のアウトプットは、ある量のデジタル資産をプロパティ(property)として表す数量を指定し、その具体例は、ユーザー103であり、そのユーザー宛てにアウトプットが暗号的にロックされているものである(ロック解除され、それにより償還又は消費されるためにはそのユーザーの署名又はその他の解を必要とする)。各インプットは、先行するトランザクション152のアウトプットを後方から指し示し、それによって、トランザクションを結び付ける。
【0021】
各ブロック151は、また、ブロック151に至るシーケンシャルな順序を規定するように、チェーン内で先に生成されたブロック151へ戻るように指定するブロック・ポインタ155を含む。各トランザクション152(コインベース・トランザクション以外)は、トランザクションのシーケンスに対する順序を定義するために、前のトランザクションへ戻るポインタを含む(N.B.トランザクション152のシーケンスは分岐することが許容されている)。ブロック151のチェーンは、全て、チェーンの最初のブロックであったジェネシス・ブロック(genesis block,Gb)153に戻る。チェーン150にある早期の1つ以上のオリジナル・トランザクション152は、先行するトランザクションではなく、ジェネシス・ブロック153を指し示していた。
【0022】
ブロックチェーン・ノード104の各々は、トランザクション152を他のブロックチェーン・ノード104へ転送するように構成されており、それによって、トランザクション152を、ネットワーク106全体に伝搬させる。各ブロックチェーン・ノード104は、ブロック151を生成し、同じブロックチェーン150のそれぞれのコピーを、それぞれのメモリに格納するように構成される。また、各ブロックチェーン・ノード104は、ブロック151に組み込まれることを待機しているトランザクション152の順序付けられたセット(又は「プール」)154も維持している。順序付けられたプール154は、しばしば「メンプール(mempool)」と呼ばれる。本件におけるこの用語は、何らかの特定のブロックチェーン、プロトコル又はモデルに限定するようには意図されていない。これは、ノード104が有効として受け入れたトランザクションであって、ノード104が同じアウトプットを消費しようとする他の如何なるトランザクションも受け入れないように義務付けられたトランザクション、の順序付けられたセットを指す。
【0023】
所与の現在のトランザクション152jにおいて、その(又は各々の)インプットは、トランザクションのシーケンスにおいて先行するトランザクション152iのアウトプットを参照するポインタを含み、それは、このアウトプットが現在のトランザクション152jにおいて償還されるか、又は「消費される」予定であることを指定する。消費又は償還は、必ずしも金融資産の移転を意味しないが、それは確かに1つの一般的なアプリケーションである。より一般的には、消費は、アウトプットを消費すること、又はそれを別の後続トランザクションの1つ以上のアウトプットに割り当てることとして説明することができる。一般に、先行するトランザクションは、順序付けられたセット154又は任意のブロック151内の任意のトランザクションであるとすることが可能である。先行するトランザクション152iは、現在のトランザクション152jが作成される時点、又はネットワーク106へ送信される時点においてさえ必ずしも存在することを必要としないが、先行するトランザクション152iは、現在のトランザクションが有効であるとされるためには、存在して検証されることを必要とする。従って、本件において「先行する(preceding)」とは、ポインタによってリンクされた論理的な順序における先行を指し、必ずしも時間的な順序における作成又は送信の時間を指すとは限らず、従って、トランザクション152i、152jが順番通りではく作成又は送信されることを必ずしも排除していない(孤立トランザクションに関する以下の説明を参照されたい)。先行するトランザクション152iは、同様に、先立つトランザクション又は先行トランザクションと呼ぶことができる。
【0024】
現在のトランザクション152jのインプットは、インプット認可(input authorisation)、例えば、先行するトランザクション152iのアウトプットがロックされている対象者であるユーザー103aの署名も含む。次いで、現在のトランザクション152jのアウトプットは、新しいユーザー又はエンティティ103bに暗号的にロックされることが可能である。従って、現在のトランザクション152jは、先行するトランザクション152iのインプットで定められている数量を、現在のトランザクション152jのアウトプットで定められている新しいユーザー又はエンティティ103bへ転送することが可能である。ある場合には、トランザクション152は、複数のユーザー又はエンティティ間で入力量を分割するために、複数のアウトプットを有する可能性がある(それらのうちの1つは、釣り銭(change)をもたらすためにオリジナル・ユーザー又はエンティティ103aであるとすることが可能である)。場合によっては、トランザクションは複数のインプットを有し、1つ以上の先行するトランザクションの複数のアウトプットからの分量を集め、現在のトランザクションの1つ以上のアウトプットへ分配し直すことも可能である。
【0025】
ビットコインのようなアウトプット・ベースのトランザクション・プロトコルによれば、個人的なユーザー又は組織のような者103が、(マニュアルで又はその者によって使用される自動プロセスによって)新たなトランザクション152jを制定することを望む場合、制定する者(enacting party)は、新たなトランザクションをそのコンピュータ端末102から受信側へ送信する。制定する者又は受信側は、最終的には、このトランザクションをネットワーク106の1つ以上のブロックチェーン・ノード104へ送信する(今日では、通常、サーバー又はデータ・センターであるが、原理的には、他のユーザー端末であるとすることが可能である)。また、新たなトランザクション152jを制定する者103は、トランザクションを1つ以上のブロックチェーン・ノード104へ、直接的に送信することが可能であり、一部の例では、受信側に対してではないことも除外されない。トランザクションを受信するブロックチェーン・ノード104は、各ブロックチェーン・ノード104に適用されるブロックチェーン・ノード・プロトコルに従って、トランザクションが有効であるかどうかをチェックする。ブロックチェーン・ノード・プロトコルは、典型的には、新たなトランザクション152jにおける暗号署名が、期待される署名(であって、トランザクション152の順序付けられたシーケンスにおける前のトランザクション152iに依存する署名)と一致することをチェックするように、ブロックチェーン・ノード104に要求する。このようなアウトプット・ベースのトランザクション・プロトコルでは、それは、新たなトランザクション152jのインプットに含まれている者103の暗号署名又はその他の認可が、新たなトランザクションが使用する(又は「指定する」)前のトランザクション152iのアウトプットで定められている条件に合致することをチェックすることを含む可能性があり、この条件は、典型的には、新たなトランザクション152jのインプットにおける暗号署名又はその他の認可が、新たなトランザクションのインプットがリンクされている先行するトランザクション152iのアウトプットをロック解除すること、を少なくともチェックすることを含む。この条件は、先行するトランザクション152iのアウトプットに含まれるスクリプトによって、少なくとも部分的に定義されてもよい。代替的に、単純にブロックチェーン・ノード・プロトコルだけで固定されることが可能であり、あるいは、これらの組み合わせによることも可能である。いずれにせよ、新たなトランザクション152jが有効である場合に、ブロックチェーン・ノード104は、ブロックチェーン・ネットワーク106内の1つ以上の他のブロックチェーン・ノード104にそれを転送する。これらの他のブロックチェーン・ノード104は、同じブロックチェーン・ノード・プロトコルに従って同じテストを適用し、従って、新たなトランザクション152jを1つ以上の更なるノード104等に転送する。このようにして、新たなトランザクションは、ブロックチェーン・ノード104のネットワーク全体に伝搬される。
【0026】
アウトプット・ベース・モデルでは、所与のアウトプット(例えば、UTXO)が指定されるか(例えば、消費されるか)どうかの定義は、ブロックチェーン・ノード・プロトコルに従って、別の前方トランザクション152jのインプットによってこれから有効に償還されるかどうかである。トランザクションが有効であるための別の条件は、償還を試みる先行トランザクション152iのアウトプットが、別のトランザクションによって既に償還されてはいないことである。また、それが有効でない場合、トランザクション152jは、(無効としてフラグが付けられ、警告のために伝搬されるのでない限り)伝搬されず、ブロックチェーン150に記録されないであろう。これは、二重の支出により、取引主体が同じトランザクションのアウトプットを複数回指定しようとすることを防ぐ。一方、アカウント・ベース・モデルは、アカウントの残高を維持することによって、二重の支出を防ぐ。この場合も、トランザクションの定められた順序が存在するので、アカウントの残高は、任意の時点で単一の定められた状態を有する。
【0027】
トランザクションを検証することに加えて、ブロックチェーン・ノード104は、「プルーフ・オブ・ワーク」によってサポートされる、一般にマイニングと呼ばれるプロセスにおいてトランザクションのブロックを最初に作成するために競い合う。ブロックチェーン・ノード104では、ブロックチェーン150に記録されたブロック151にまだ現れていない、有効なトランザクションの順序付けられたプール154に、新たなトランザクションが追加される。次いで、ブロックチェーン・ノードは、暗号パズルを解くことを試みることによって、トランザクションの順序付けられたセット154から、トランザクション152の新しい有効なブロック151を組み立てるために競い合う。典型的には、これは「ナンス(nonce)」値を探すことを含み、そのために、ナンスは保留中のトランザクションの順序付けられたプール154の表現に連結され、ハッシュ演算を施され、かくて、ハッシュの出力が所定の条件を満たすようにする。例えば、所定の条件は、ハッシュの出力が、所定数の先行するゼロを有することであってもよい。これは或る特定のタイプのプルーフ・オブ・ワーク・パズルであるに過ぎず、他のタイプが除外されてはいない、ということに留意されたい。ハッシュ関数の特性は、その入力に対して予測不能な出力を有することである。従って、この探索は、ブルート・フォースによってのみ実行することが可能であり、従って、パズルを解こうとしている各ブロックチェーン・ノード104において、かなりの量の処理リソースを消費する。
【0028】
パズルを解いた最初のブロックチェーン・ノード104は、それをネットワーク106へ通知し、その解を証明(proof)として提供し、従ってその証明はネットワーク内の他のブロックチェーン・ノード104によって容易にチェックすることができる(ハッシュに対する解が与えられると、それが、ハッシュの出力を条件に合致させるものであることをチェックすることは容易である)。最初のブロックチェーン・ノード104は、ブロックを受け入れる他のノードの閾値コンセンサスのためにブロックを伝搬させ、従って、プロトコル規則を実施する。次いで、トランザクションの順序付けられたセット154は、ブロックチェーン・ノード104の各々によって、ブロックチェーン150内の新しいブロック151として記録されるようになる。ブロック・ポインタ155はまた、新たなブロック151nにも割り当てられ、チェーン内の先に生成されたブロック151n-1に戻るように指し示す。プルーフ・オブ・ワークの解を作成するために必要とされる、例えばハッシュの形式でのかなりの労力は、第1のノード104が、ブロックチェーン・プロトコルのルールに従うことを意図する引き金となる。そのようなルールは、以前に検証されたトランザクションと同じアウトプットをそれが使用していたり又は割り当てていたりする場合、あるいは別の方法で二重支払として理解される場合、トランザクションを有効として受け入れないことを含む。いったん生成されると、ブロック151は修正することができず、なぜなら、ブロックチェーン・ネットワーク106内のブロックチェーン・ノード104の各々でそれが認識されて維持されるからである。ブロック・ポインタ155はまた、ブロック151に逐次的な順序も課している。トランザクション152は、ネットワーク106内の各ブロックチェーン・ノード104において順序付けられたブロックに記録されるので、従ってこれはトランザクションの変更不能な公の台帳を提供する。
【0029】
何らかの所与の時間にパズルを解くために競い合う様々なブロックチェーン・ノード104は、それらがいつ解を探索し始めたかに応じて、又はトランザクションが受信された順序に応じて、任意の所与の時間におけるこれから公表されることになるトランザクション154のプールの様々なスナップ・ショットに基づいて、そのようにすることができることに留意されたい。それぞれのパズルを最初に解いた者が誰であれ、どのトランザクション152が次の新しいブロック151nにどの順序で含まれるのかを定め、未公表のトランザクションの現在のプール154が更新される。次いで、ブロックチェーン・ノード104は、未公表のトランザクション154の新たに定められた順序付けられたプールから、ブロックを生成する等のために競い続ける。また、生じる可能性のある何らかの「フォーク」を解決するためのプロトコルも存在し、これは、2つのブロックチェーン・ノード104が相次いで非常に短時間の間に彼らのパズルを解いて、その結果、ブロックチェーンの矛盾した状態(view)がノード104の間で伝播してゆくことである。手短に言えば、フォークのどちらの突起が伸びても、最も長い方が最終的なブロックチェーン150となる。このことは、同じトランザクションが両方のフォークに現れることになるので、ネットワークのユーザー又はエージェントに影響を与えないはずであることに留意されたい。
【0030】
ビットコイン・ブロックチェーン(及び他のほとんどのブロックチェーン)によれば、新たなブロック104を首尾良く構築するノードは、デジタル資産の追加の定義された量を分配する新しい特殊な種類のトランザクションにおいて、デジタル資産の追加の受け入れられた量を新たに割り当てる能力を付与される(エージェント間、又はユーザー間のトランザクションであって、デジタル資産の分量をあるエージェント又はユーザーから他者へ転送するためのものとは対照的である)。この特殊なタイプのトランザクションは、通常、「コインベース・トランザクション」と呼ばれるが、「開始トランザクション」又は「生成トランザクション」とも呼ばれる場合もある。これは、典型的には、新たなブロック151nの最初のトランザクションを形成する。プルーフ・オブ・ワークは、新たなブロックを構築し、プロトコル規則に従って、この特別なトランザクションが後に償還されることをノードが意図する引き金となる。ブロックチェーン・プロトコル規則は、この特別なトランザクションが償還される前に、例えば100ブロックの成熟期間を必要とする可能性がある。しばしば、通常の(ジェネレーションではない)トランザクション152は、そのトランザクションが公表されたブロック151nを生成したブロックチェーン・ノード104に更に報酬を与えるために、そのアウトプットの1つにおいて追加のトランザクション手数料も指定しているであろう。この手数料は、通常「取引手数料」と呼ばれ、以下で説明される。
【0031】
トランザクションの検証及び公表に関わるリソースに起因して、典型的には、ブロックチェーン・ノード104のうちの各々は少なくとも、1つ以上の物理的なサーバー・ユニット、又はデータ・センター全体さえも含むサーバーの形態をとる。しかしながら、原理的には、所与の任意のブロックチェーン・ノード104は、ユーザー端末又は互いにネットワーク接続されたユーザー端末のグループ、の形態をとる可能性がある。
【0032】
各ブロックチェーン・ノード104のメモリは、それぞれの1つの役割又は複数の役割を実行し、ブロックチェーン・ノード・プロトコルに従ってトランザクション152を処理するために、ブロックチェーン・ノード104の処理装置において動作するように構成されたソフトウェアを記憶する。本件において、ブロックチェーン・ノード104に帰属される如何なる動作も、それぞれのコンピュータ装置の処理装置上で実行されるソフトウェアによって実行されてもよい、ということが理解されるであろう。ノード・ソフトウェアは、アプリケーション・レイヤにおいて、オペレーティング・システム・レイヤ、プロトコル・レイヤのような下位レイヤにおいて、又はこれらの任意の組み合わせにおいて、1つ以上のアプリケーションに実装されてもよい。
【0033】
また、ネットワーク101に接続されるものには、消費するユーザーの役割を果たす複数の者103の各々のコンピュータ装置102である。これらのユーザーは、ブロックチェーン・ネットワーク106とやり取りを行うことが可能であるが、トランザクションを検証したり又はブロックを構築したりすることには参加しない。これらのユーザー又はエージェント103のうちの一部は、トランザクションの送信者及び受信者として動作する可能性がある。他のユーザーは、必ずしも送信者又は受信者として動作することなく、ブロックチェーン150とやり取りを行うことが可能である。例えば、一部の者は、ブロックチェーン150のコピーを記憶する記憶エンティティとして機能する可能性がある(例えば、ブロックチェーン・ノード104から、ブロックチェーンのコピーを取得する)。
【0034】
当事者103の一部又は全部は、例えばブロックチェーン・ネットワーク106のトップにオーバーレイされるネットワークのような、異なるネットワークの一部として接続されてもよい。ブロックチェーン・ネットワークのユーザー(しばしば「クライアント」と呼ばれる)は、ブロックチェーン・ネットワーク106を含むシステムの一部と言うことは可能であるが;これらのユーザーは、ブロックチェーン・ノードに要求される役割を実行しないので、ブロックチェーン・ノード104ではない。むしろ、各当事者103は、ブロックチェーン・ネットワーク106とやり取りを行うことが可能であり、それによってブロックチェーン・ノード104に接続する(即ち、通信する)ことによって、ブロックチェーン150を利用することができる。2人の当事者103及びそれぞれの装置102は、説明のために示されており;第1の者103a及び彼/彼女のそれぞれのコンピュータ装置102a、並びに第2の者103b及び彼/彼女のそれぞれのコンピュータ装置102bである。より多くのこのような者103及び各自それぞれのコンピュータ装置102が、システム100に存在し、参加する可能性があるが、便宜上、それらは図示されていないことが理解されるであろう。各当事者103は、個人又は組織である可能性がある。純粋に例示として、第1の者103aは、本件においてアリス(Alice)と称され、第2の者103bは、ボブ(Bob)と称されるが、これは限定ではないこと、及び本件においてアリス又はボブという如何なる言及も、それぞれ「第1の者」及び「第2の者」と置き換えられてよいことが、理解されるであろう。
【0035】
各当事者103のコンピュータ装置102は、1つ以上のプロセッサ、例えば、1つ以上のCPU、GPU、その他のアクセラレータ・プロセッサ、特定用途向けプロセッサ、及び/又はFPGA、を含むそれぞれの処理装置を備える。各当事者103のコンピュータ装置102は、更に、メモリ、即ち、非一時的コンピュータ読み取り可能な媒体又はメディアの形態におけるコンピュータ読み取り可能なストレージを備える。このメモリは、1つ以上のメモリ媒体、例えば、ハード・ディスクのような磁気媒体;SSD、フラッシュ・メモリ又はEEPROMのような電子媒体;及び/又は光ディスク・ドライブのような光学媒体、を使用する1つ以上のメモリ・ユニットを備えることが可能である。各当事者103のコンピュータ装置102におけるメモリは、処理装置で動作するように配置された少なくとも1つのクライアント・アプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶している。本件で所与の当事者103に帰属する如何なる動作も、それぞれのコンピュータ装置102の処理装置において実行されるソフトウェアを使用して実行されてもよい、ということが理解されるであろう。各当事者103のコンピュータ装置102は、少なくとも1つのユーザー端末、例えばデスクトップ又はラップトップ・コンピュータ、タブレット、スマートフォン、又は、スマートウォッチのようなウェアラブル・デバイスを備えている。所与の当事者103のコンピュータ装置102は、ユーザー端末を介してアクセスされるクラウド演算リソースのような、1つ以上の他のネットワーク化されたリソースを含んでもよい。
【0036】
クライアント・アプリケーション105は、最初に、適切なコンピュータ読み取り可能な記憶媒体又はメディアにおいて任意の所与の当事者103のコンピュータ装置102に提供されてもよく、例えば、サーバーからダウンロードされ、又はリムーバブルSSD、フラッシュ・メモリ・キー、リムーバブルEEPROM、リムーバブル磁気ディスク・ドライブ、磁気フロッピー・ディスク又はテープ、CD又はDVD ROMのような光ディスク、又はリムーバブル光学ドライブ等のような、リムーバブル記憶デバイスに提供されてもよい。
【0037】
クライアント・アプリケーション105は、少なくとも「ウォレット(wallet)」機能を含む。これは主に2つの機能を有する。これらのうちの1つは、それぞれの当事者103が、トランザクション152を作成し、認可し(例えば、署名し)、1つ以上のビットコイン・ノード104へ送信して、ブロックチェーン・ノード104のネットワーク全体にわたって伝搬させ、それによってブロックチェーン150に含められることを可能にすることである。もう1つは、彼又は彼女が現在所有しているデジタル資産の分量をそれぞれの当事者に報告することである。アウトプット・ベース・システムでは、この第2の機能は、対象の当事者に属するブロックチェーン150全体に散在する様々なトランザクション152のアウトプットで定められる分量を照合することを含む。
【0038】
注記:様々なクライアント機能は、所与のクライアント・アプリケーション105に統合されているように述べられているかもしれないが、これは必ずしも限定ではなく、むしろ本件で説明される何れのクライアント機能も、例えば、APIを介したインターフェースにより、又は一方が他方に対するプラグ・インであることにより、2つ以上の別個のアプリケーションの一式で実装されてもよい。より一般的には、クライアント機能は、アプリケーション・レイヤ、又はオペレーティング・システムのような下位レイヤ、又はこれらの任意の組み合わせで実装されることが可能である。以下、クライアント・アプリケーション105に関して説明されるが、これは限定的ではないことが理解されるであろう。
【0039】
各コンピュータ装置102におけるクライアント・アプリケーション又はソフトウェア105のインスタンスは、ネットワーク106のブロックチェーン・ノード104の少なくとも1つに動作可能に結合される。これは、クライアント105のウォレット機能が、トランザクション152をネットワーク106に送信することを可能にする。また、クライアント105は、ブロックチェーン・ノード104に連絡をとり、トランザクションの個々の当事者103が受信者である何らかのトランザクションについて、ブロックチェーン150を照会することも可能である(あるいは、実際、ブロックチェーン150内の他の当事者のトランザクションを検査することも可能であり、なぜなら、実施形態において、ブロックチェーン150は、部分的に公衆の可視性によりトランザクションに信頼性を提供する公の施設であるからである)。各コンピュータ装置102におけるウォレット機能は、トランザクション・プロトコルに従ってトランザクション152を形成して送信するように構成される。上述したように、各ブロックチェーン・ノード104はソフトウェアを実行し、そのソフトウェアは、ブロックチェーン・ノード・プロトコルに従ってトランザクション152を検証し、トランザクション152を転送して、それらをブロックチェーン・ネットワーク106全体に伝播させるように構成されている。トランザクション・プロトコルとノード・プロトコルは互いに対応しており、所与のトランザクション・プロトコルは、所与のノード・プロトコルと調和しており、所与のトランザクション・モデルを一緒に実施する。同じトランザクション・プロトコルが、ブロックチェーン150内の全てのトランザクション152に使用される。同じノード・プロトコルが、ネットワーク106内の全てのノード104によって使用される。
【0040】
所与の当事者103、例えばアリスが、ブロックチェーン150に含める予定の新たなトランザクション152jを送信することを望む場合、彼女は、関連するトランザクション・プロトコルに従って(彼女のクライアント・アプリケーション105におけるウォレット機能を使用して)新たなトランザクションを形成する。次いで、彼女は、トランザクション152を、クライアント・アプリケーション105から、彼女がつながっている1つ以上のブロックチェーン・ノード104へ送信する。例えば、これは、アリスのコンピュータ102に最良に接続されているブロックチェーン・ノード104である可能性がある。何らかの所与のブロックチェーン・ノード104が新たなトランザクション152jを受信すると、それはブロックチェーン・ノード・プロトコル及び各自の役割に従ってそれを処理する。これは、先ず、新たに受信したトランザクション152jが「有効」であるための特定の条件を充足するかどうかをチェックすることを含み、その事例は間もなくより詳細に説明される。一部のトランザクション・プロトコルでは、検証のための条件は、トランザクション152に含まれるスクリプトによってピア・トランザクション・ベースで設定可能であってもよい。代替的に、条件は単にノード・プロトコルの組み込み機能であってもよいし、あるいはスクリプトとノード・プロトコルの組み合わせによって定められてもよい。
【0041】
新たに受信されたトランザクション152jが、有効であると認められるためのテストに合格するという条件の下で(即ち、「有効化されている(検証済み)」という条件の下で)、トランザクション152jを受信した何らかのブロックチェーン・ノード104は、新たな検証されたトランザクション152を、そのブロックチェーン・ノード104で維持されているトランザクション154の順序付けられたセットに追加するであろう。更に、トランザクション152jを受信する任意のブロックチェーン・ノード104は、検証済みトランザクション152を、ネットワーク106内の1つ以上の他のブロックチェーン・ノード104へ伝搬させて行くであろう。各ブロックチェーン・ノード104は同じプロトコルを適用するので、トランザクション152jが有効であることを仮定して、これは、ネットワーク106全体に間もなく伝搬されるであろう、ということを意味する。
【0042】
所与のブロックチェーン・ノード104で維持される保留中のトランザクションの順序付けられたプール154に対していったん認められると、そのブロックチェーン・ノード104は、新たなトランザクション152を含むそれぞれのプール154の最新バージョンに関して、プルーフ・オブ・ワーク・パズルを解く競争を開始するであろう(他のブロックチェーン・ノード104は、トランザクション154の異なるプールに基づいてパズルを解くことを試みるかもしれないが、そこに最初に到達した者は誰であれ、最新のブロック151に含まれるトランザクションのセットを定義するであろう、ということを想起されたい)。最終的に、ブロックチェーン・ノード104は、アリスのトランザクション152jを含む順序付けられたプール154の一部に関するパズルを解くであろう。一旦、新たなトランザクション152jを含むプール154について、プルーフ・オブ・ワークが行われると、それは、変更不可能に、ブロックチェーン150内のブロック151のうちの1つの一部になる。各トランザクション152は、以前のトランザクションに戻るポインタを含むので、トランザクションの順序もまた、変更不可能に記録される。
【0043】
様々なブロックチェーン・ノード104は、先ず、所与のトランザクションの様々なインスタンスを受信し、従って、1つのインスタンスが新たなブロック151において公表される前に、どのインスタンスが「有効」であるかについての競合する見解を有する可能性があり、その公表の時点で、全てのブロックチェーン・ノード104は、公表されたインスタンスが唯一の有効なインスタンスであることに同意する。ブロックチェーン・ノード104が1つのインスタンスを有効として受け入れ、次いで、第2のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのブロックチェーン・ノード104はそのことを受け入れなければならず、最初に受け入れていたインスタンス(即ち、ブロック151で公表されていないもの)を破棄することになるであろう(即ち、無効として取り扱う)。
【0044】
一部のブロックチェーン・ネットワークによって運用される別のタイプのトランザクション・プロトコルは、アカウント・ベースのトランザクション・モデルの一部として、「アカウント・ベース」プロトコルと呼ばれることがある。アカウント・ベースの場合、各トランザクションは、過去のトランザクションのシーケンスで先行しているトランザクションのUTXOに戻る方向を参照することによって、移転される量を定めるのではなく、むしろ絶対的なアカウント残高を参照することによる。全てのアカウントの現在の状態は、そのネットワークのノードによって、ブロックチェーンとは別に格納されており、定常的に更新される。このようなシステムでは、トランザクションは、アカウントのランニング・トランザクション・タリー(running transaction tally)(いわゆる「ポジション」)を使用して順序付けられる。この値は、それらの暗号署名の一部として送信者によって署名され、トランザクション参照演算の一部としてハッシュ演算される。更に、オプションのデータ・フィールドがトランザクションにおいて署名されてもよい。このデータ・フィールドは、例えば、前のトランザクションIDがデータ・フィールドに含まれている場合に、前のトランザクションに戻る方向を指していてもよい。
【0045】
2. UTXOベース・モデル
図2は、例示的なトランザクション・プロトコルを示す。これはUTXOベース・プロトコルの例である。トランザクション152(「Tx」と略す)は、ブロックチェーン150(各ブロック151は、1つ以上のトランザクション152を含む)の基本的なデータ構造である。以下、アウトプット・ベース・プロトコル又は「UTXO」ベース・プロトコルを参照することによって説明する。しかしながら、これは、全ての可能な実施形態に対する限定ではない。例示的なUTXOベースのプロトコルは、ビットコインを参照しながら説明されるが、他の例示的なブロックチェーン・ネットワークにおいて同様に実装されてもよいことに留意されたい。
【0046】
UTXOベース・モデルでは、各トランザクション(「Tx」)152は、1つ以上のインプット202と1つ以上のアウトプット203を含むデータ構造を備えている。各々のアウトプット203は、未使用トランザクション・アウトプット(UTXO)を含む可能性があり、(UTXOが既に償還されたものでない場合には)これは別の新たなトランザクションのインプット202のソースとして使用することができる。UTXOは、デジタル資産の分量を指定する値を含む。これは、分散された台帳におけるトークンの設定数を表す。UTXOは、また、他の情報の中でも特に、それが到来してきた元のトランザクションのトランザクションIDを含んでもよい。トランザクション・データ構造はまたヘッダー201を含んでもよく、これはインプット・フィールド202とアウトプット・フィールド203のサイズのインジケータを含む可能性がある。ヘッダー201はまた、トランザクションのIDを含んでもよい。実施形態において、トランザクションIDは、トランザクション・データのハッシュ(トランザクションID自体を除く)であり、ノード104にサブミットされた未加工トランザクション152のヘッダー201に格納される。
【0047】
例えば、アリス103aが、問題としているデジタル資産の分量を、ボブ103bに転送するトランザクション152jを作成することを望んでいるとする。図2では、アリスの新たなトランザクション152jは、「Tx1」とラベル付けされている。これは、シーケンスで先行するトランザクション152iのアウトプット203においてアリスにロックされているデジタル資産の分量を取り出して、その少なくとも一部をボブへ転送する。先行するトランザクション152iは、図2では「Tx0」とラベル付けされている。Tx0及びTx1は、単なる任意的なラベルである。これらは、Tx0がブロックチェーン151における最初のトランザクションであることや、Tx1がプール154内で直近の次のトランザクションであることを必ずしも意味していない。Tx1は、アリスにロックされた未使用アウトプット203を依然として有する、何らかの先行する(即ち、先立つ)トランザクションに戻る方向を指し示すことができる。
【0048】
先行トランザクションTx0は、アリスが彼女の新しいトランザクションTx1を作成する時点で、又は少なくとも彼女がそれをネットワーク106に送信する時点までに、既に検証され且つブロックチェーン150に含まれている可能性がある。それは、その時点で既にブロック151のうちの1つに含まれている可能性があり、或いは順序付けられたセット154内でまだ待機している可能性があり、その場合、新しいブロック151に速やかに含まれることになる。代替的に、Tx0及びTx1は一緒に作成されてネットワーク102へ送信されることが可能であり、或いは、ノード・プロトコルが「オーファン(orphan)」トランザクションをバッファリングすることを許容する場合、Tx0がTx1の後に送信されることさえ可能である。本件でトランザクション・シーケンスの文脈で使用される「先行」及び「後続」という用語は、トランザクションで指定されるトランザクション・ポインタ(どのトランザクションが、他のどのトランザクションに戻る方向を指すか等)によって定められるシーケンスにおけるトランザクションの順序を指す。これらは「先行」と「後行」、「祖先」と「子孫」、「親」と「子」等により同等に置換することが可能である。これは、それらが生成されたり、ネットワーク106に送信されたり、或いは任意の所与のノード104に到達したりする順序を必ずしも意味しない。それにもかかわらず、先行トランザクション(祖先トランザクション又は「親」)を指し示す後続トランザクション(子孫トランザクション又は「子」)は、親トランザクションが検証されるまで、及び親トランザクションが検証されない限り、検証されないであろう。親の前にブロックチェーン・ノード104に到着した子は、孤立(オーファン)と考えられる。ノード・プロトコル及び/又はノードの行動に応じて、それは破棄されるか又は親を待機するための一定時間にわたってバッファリングされる可能性がある。
【0049】
先行するトランザクションTx0の1つ以上のアウトプット203のうちの1つは、ここではUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の分量を指定する値と、後続のトランザクションが検証されるために、従ってUTXOが正常に償還されるために、後続のトランザクションのインプット202においてアンロッキング・スクリプトによって充足されることを必要とする条件を定めるロッキング・スクリプトとを含む。典型的には、ロッキング・スクリプトは、特定の当事者(トランザクションに含まれている受取人)に対してその分量をロックする。即ち、ロッキング・スクリプトは、ロック解除条件を定め、典型的には、後続トランザクションのインプットにおけるアンロッキング・スクリプトが、ある当事者の暗号シグネチャを含み、先行トランザクションはその当事者にロックされている、という条件を含む。
【0050】
ロッキング・スクリプト(scriptPubKeyとしても知られている)は、ノード・プロトコルによって認識されるドメイン固有の言語で書かれたコードの一部である。そのような言語の特定の例は、「Script」(大文字のS)と呼ばれ、これはブロックチェーン・ネットワークによって使用されている。ロッキング・スクリプトは、如何なる情報がトランザクション・アウトプット203を消費するために必要とされるか、例えば、アリスのシグネチャの条件を指定する。アンロッキング・スクリプトはトランザクションのアウトプットに登場する。アンロッキング・スクリプト(scriptSig としても知られている)は、ロッキング・スクリプトの基準を満たすために必要な情報を提供するドメイン固有の言語で書かれたコードの一部である。例えばそれはボブの署名を含む可能性がある。アンロッキング・スクリプトは、トランザクションの入力202に登場する。
【0051】
図示の例では、Tx0のアウトプット203におけるUTXO0は、ロッキング・スクリプト[Checksig PA]を含み、これは、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後続のトランザクションが有効化されるために)、アリスの署名Sig PAを必要とする。[Checksig PA]は、アリスの公開鍵-秘密鍵のペアからの公開鍵PAの表現(即ち、ハッシュ)を含む。Tx1のインプット202は、(例えば、そのトランザクションID、TxID0 であり、実施形態ではトランザクションTx0全体のハッシュであるものを利用することによって)Tx0に戻る方向を指すポインタを含む。Tx1のインプット202は、Tx0の任意の他の可能なアウトプットの中でそれを識別するために、Tx0内のUTXO0を識別するインデックスを含む。Tx1のインプット202は、更に、鍵ペアからのアリスの秘密鍵を、(暗号化においては「メッセージ」と呼ばれることがある)データの所定の部分に適用してアリスによって作成された、アリスの暗号シグネチャを含むアンロッキング・スクリプト<Sig PA>を含む。有効なシグネチャを提供するためにアリスによって署名されることを必要とするデータ(又は「メッセージ」)は、ロッキング・スクリプトによって、ノード・プロトコルによって、又はこれらの組み合わせによって定められることが可能である。
【0052】
新しいトランザクションTx1がブロックチェーン・ノード104に到着すると、ノードはノード・プロトコルを適用する。これは、ロッキング・スクリプトとアンロッキング・スクリプトを一緒に実行して、アンロッキング・スクリプトが、ロッキング・スクリプトで定められている条件(この条件は1つ以上の基準を含む可能性がある)を充足しているかどうかをチェックすることを含む。実施形態において、これは2つのスクリプトを連結することを含む:
<Sig PA><PA>||[Checksig PA]
【0053】
ここで、“||”は連結を表し、“<・・・>”はそのデータをスタックの上に置くことを意味し、“[・・・]”はロッキング・スクリプト(この例では、スタック・ベース言語)によって構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなく、共通のスタックを用いて、次々と(一方を他方の後に)実行してもよい。いずれにせよ、一緒に実行される場合、スクリプトは、Tx0のアウトプットにおけるロッキング・スクリプトに含まれているような、アリスの公開鍵PAを使用して、Tx1のインプットにおけるアンロッキング・スクリプトが、データのうちの期待されている部分を署名しているアリスのシグネチャを含んでいることを認証する。この認証を実行するためには、データ自体の予想される部分(“メッセージ”)も含まれることを必要とする。実施形態において、署名されたデータは、Tx1の全体を含む(従って、データの署名された部分を平文で指定して、個々の要素が包含されることを必要とせず、なぜなら既に本来的に存在するからである)。
【0054】
公開-秘密(鍵)暗号化による認証の詳細は、当業者にはよく知られているであろう。基本的には、アリスが彼女の公開鍵を用いてメッセージに署名した場合、所与のアリスの公開鍵と平文のメッセージの下で、ノード104のような別のエンティティは、そのメッセージがアリスによって署名されているに違いないことを認証することができる。署名することは、典型的には、メッセージをハッシュ演算し、ハッシュに署名し、シグネチャとしてメッセージにこれをタグ付けし、公開鍵の何れかの所有者がそのシグネチャを認証できるようにする。従って、本件において、データの特定の部分又はトランザクションの一部分などに署名するという如何なる言及も、実施形態では、データのその部分又はトランザクションの一部分のハッシュに署名することを意味する可能性がある、ということに留意されたい。
【0055】
Tx1内のアンロッキング・スクリプトがTx0のロッキング・スクリプト内で指定された1つ以上の条件を満たす場合(従って、図示される例では、アリスのシグネチャがTx1で提供され、認証される場合)、ブロックチェーン・ノード104は、Tx1を有効と見なす。これは、ブロックチェーン・ノード104が、待機中のトランザクションの順序付けられたプール154に、Tx1を追加することを意味する。また、ブロックチェーン・ノード104は、トランザクションTx1を、ネットワーク106内の1つ以上の他のブロックチェーン・ノード104にも転送し、その結果、それはネットワーク106全体に伝搬されるであろう。いったんTx1が検証され、ブロックチェーン150に含められると、これはTx0からのUTXO0を支払い済み(spent)として定める。Tx1は、それが未使用トランザクション・アウトプット203を消費する場合にのみ有効であり得ることに留意されたい。別のトランザクション152によって既に消費されているアウトプットを消費しようと試みる場合、Tx1は、たとえ他の全ての条件が充足されていたとしても無効となるであろう。従って、ブロックチェーン・ノード104は、先行トランザクションTx0において参照されるUTXOが既に消費されているかどうか(即ち、別の有効なトランザクションに対する有効なインプットを既に形成しているかどうか)もチェックすることを必要とする。これが、ブロックチェーン150にとってトランザクション152で定義された順序を課すことは重要である、という理由の1つである。実際には、所与のブロックチェーン・ノード104は、どのトランザクション152でどのUTXO203が消費されているかをマーキングする別個のデータベースを維持するかもしれないが、最終的にUTXOが消費されているかどうかを定めるものは、ブロックチェーン150内の別の有効なトランザクションに対する有効なインプットを既に形成しているかどうかである。
【0056】
所与のトランザクション152の全てのアウトプット203で指定される総量が、その全てのインプット202によって指し示される総量よりも大きい場合、これは、ほとんどのトランザクション・モデルにおける無効性に関する別の根拠である。従って、このようなトランザクションは、伝播されたりブロック151に含められたりはしないであろう。
【0057】
UTXOベースのトランザクション・モデルでは、所与のUTXOが全体として消費されることを必要とする、ということに留意されたい。UTXOで定められている分量のうちの一部分を「残しておく」一方、別の部分が消費される、ということはできない。しかしながら、UTXOからの分量は、次のトランザクションの複数のアウトプットの中で分割されることが可能である。例えば、Tx0のUTXO0で定められる分量は、Tx1の複数のUTXOの間で分割されることが可能である。従って、アリスが、UTXO0で定められる分量のうちの全てをボブに与えることを望まない場合、彼女は残りの分量を使って、Tx1の第2のアウトプットで自分自身に釣り銭を与えたり、或いは、別の者へ支払ったりすることができる。
【0058】
実際には、アリスは、通常、彼女のトランザクション104を首尾良くブロック151に含めたビットコイン・ノード104に対する手数料を含めることも必要とする。アリスがそのような手数料を含めていない場合、Tx0はブロックチェーン・ノード104によって拒否される可能性があり、従って技術的には妥当であるが、それは伝播されず、ブロックチェーン150に含まれない可能性がある(ノード・プロトコルは、ブロックチェーン・ノード104に対して、彼らが望まない場合に、トランザクション152を受け入れるようには強制しない)。一部のプロトコルでは、トランザクション手数料は、独自の別個のアウトプット203を必要としない(即ち、別個のUTXOを必要としない)。その代わりに、インプット202によって示される総量と所与のトランザクション152のアウトプット203で指定される総量との間の如何なる差分も、トランザクションを公表するブロックチェーン・ノード104に自動的に与えられる。例えば、UTXO0に対するポインタがTx1に対するインプットのみであり、Tx1が唯1つのアウトプットUTXO1を有するとする。UTXO0で指定されたデジタル資産の分量がUTXO1で指定された分量より多い場合、その差分は、プルーフ・オブ・ワーク大会に勝利してUTXO1を含むブロックを作成したノード104に割り当てられる可能性がある。しかしながら、代替的又は追加的に、必ずしも、トランザクション手数料が、トランザクション152のUTXO203のうちの自身の1つにおいて明示的に指定できることは除外されない。
【0059】
アリスとボブのデジタル資産は、ブロックチェーン150のどこかで何らかのトランザクション152において、彼らにロックされたUTXOから構成される。従って、典型的には、所与の者103の資産は、ブロックチェーン150を通じて、様々なトランザクション152のUTXO全体に分散される。ブロックチェーン150内のどこかに保存された、所与の者103の総残高を定める1つの数字は存在しない。各々の当事者にロックされ、別の前方トランザクションでまだ消費されていない全ての様々なUTXOの値を一緒にまとめることは、クライアント・アプリケーション105におけるウォレット機能の役割である。これは、何らかのビットコイン・ノード104に格納されているようなブロックチェーン150のコピーを照会することによって、それを行うことができる。
【0060】
スクリプト・コードはしばしば概略的に表現される(即ち、厳密な言語を使用していない)ことに留意されたい。例えば、ある者はオペレーション・コード(オペコード)を用いて、特定の機能を表現するかもしれない。“OP_...”はScript言語の特定のオペコードを示す。一例として、OP_RETURNは、Script言語のオペコードであって、ロッキング・スクリプトの先頭でOP_FALSEが先行している場合、トランザクションの使用不能アウトプット(unspendable output)であってトランザクション内にデータを保存することが可能なものを生成し、それによりデータをブロックチェーン150に変更不能に記録することができる。例えば、データは、ブロックチェーンに保存するように望まれる文書を含むことができる。
【0061】
典型的には、トランザクションのインプットは、公開鍵PAに対応するデジタル署名を含む。実施形態において、これは楕円曲線secp256k1を使用するECDSAに基づいている。デジタル署名は、特定のデータに署名している。一部の実施形態では、所与のトランザクションについて、シグネチャはトランザクション・インプットの一部分、及びトランザクション・アウトプットの一部又は全部に署名しているであろう。アウトプットのうち署名している特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、通常、どのアウトプットが署名されているかを選択するためにシグネチャの末尾に含まれる4バイト・コードである(従って、署名時に定まる)。
【0062】
ロッキング・スクリプトは、典型的には当事者の公開鍵を含み、それぞれのトランザクションはその当事者にロックされる、という事実に関連して、しばしば“scriptPubKey”と呼ばれる。アンロッキング・スクリプトは、典型的には対応するシグネチャを提供する、という事実に関連して、しばしば“scriptSig”と呼ばれる。しかしながら、より一般的には、ブロックチェーン150の全てのアプリケーションにおいて、UTXOが償還される条件はシグネチャを認証することを含む、ということは必須でない。より一般的には、スクリプト言語は、任意の1つ以上の条件を定義するために使用されることが可能である。従って、より一般的な用語“ロッキング・スクリプト”及び“アンロッキング・スクリプト”が望ましいかもしれない。
【0063】
3.サイド・チャネル
図1に示されるように、アリスとボブのコンピュータ装置102a,102bの各々におけるクライアント・アプリケーションは、それぞれ、付加的な通信機能を含む可能性がある。この付加的な機能は、アリス103aが、(いずれかの当事者又は第三者の勧誘により)ボブ103bとの別個のサイド・チャネル107を確立することを可能にする。サイド・チャネル107は、ブロックチェーン・ネットワークとは別個にデータの交換を可能にする。このような通信は、しばしば“オフ・チェーン(off-chain)”通信と呼ばれる。例えば、これは、当事者のうちの1人がトランザクションをネットワーク106にブロードキャストすることを選択するまで、トランザクションがブロックチェーン・ネットワーク106に登録されたり又はチェーン150上で処理を進行させたりすることなく、アリスとボブとの間でトランザクション152をやり取りために使用されてもよい。このようにして、トランザクションを共有することは、しばしば“トランザクション・テンプレート”の共有と言及される。トランザクション・テンプレートは、完全なトランザクションを形成するために必要とされる1つ以上のインプット及び/又はアウトプットを欠いている可能性がある。代替的又は追加的に、サイド・チャネル107は、鍵、交渉された額又は期間、データ内容などのような、何らかの他のトランザクション関連データを交換するために使用されてもよい。
【0064】
サイド・チャネル107は、ブロックチェーン・ネットワーク106と同じパケット交換ネットワーク101を介して確立されてもよい。代替的又は追加的に、サイド・チャネル301は、移動体セルラ・ネットワークのような異なるネットワークを介して、又はローカル無線ネットワークのようなローカル・エリア・ネットワークを介して、又は、アリスとボブのデバイス102a、102bの間の直接的な有線又は無線リンクを介してさえ確立することが可能である。一般に、本件のどこかで言及されているようなサイド・チャネル107は、データを交換するための1つ以上のネットワーキング技術又は通信媒体を介する何らかの1つ以上のリンク(オフ・チェーン)、即ち、ブロックチェーン・ネットワーク106から別個のものを含む可能性がある。2つ以上のリンクが使用される場合、全体としてのオフ・チェーン・リンクの束又は集まりが、サイド・チャネル107と言及されてもよい。従って、アリスとボブがサイド・チャネル107を介して特定の情報又はデータ等を交換する、と言及される場合、これは、必ずしもこれらの全てのデータが厳密に同じリンクを介して、又は同じタイプのネットワークを介してでさえ、送信されなければならないことを意味しないことに留意されたい。
【0065】
4.ノード・ソフトウェア
図3は、UTXO又はアウトプット・ベースのモデルの例において、ネットワーク106の各ブロックチェーン・ノード104上で実行されるノード・ソフトウェア450の例を示す。別のエンティティは、ネットワーク106におけるノード104として分類されることなく、即ち、ノード104に必要な動作を実行することなく、ノード・ソフトウェア450を動作させることが可能であることに留意されたい。ノード・ソフトウェア450は、プロトコル・エンジン451、スクリプト・エンジン452、スタック453、アプリケーション・レベル決定エンジン454、及び1つ以上のブロックチェーン関連機能モジュールのセット455を含む可能性があるが、これらに限定されない。各ノード104は、コンセンサス・モジュール455C(例えば、プルーフ・オブ・ワーク)、伝播モジュール455P、及び記憶モジュール455S(例えば、データベース)の3つ全てを含むが、これに限定されないノード・ソフトウェアを実行することが可能である。プロトコル・エンジン401は、通常、トランザクション152の様々なフィールドを認識し、ノード・プロトコルに従ってそれらを処理するように構成される。
トランザクション152j(Txj)が受信され、別の先行するトランザクション152i(Txm-1)のアウトプット(例えば、UTXO)を指し示すインプットを有している場合、プロトコル・エンジン451は、Txjのアンロッキング・スクリプトを特定し、それをスクリプト・エンジン452に渡す。また、プロトコル・エンジン451は、Txjのインプットにおけるポインタに基づいて、Txiを特定して抽出する。Txiは、ブロックチェーン150上で公開されることが可能であり、その場合、プロトコル・エンジンは、ノード104に格納されたブロックチェーン150のブロック151のコピーから、Txiを抽出することが可能である。代替的に、Txiは、ブロックチェーン150上でまだ公開されていない可能性がある。その場合、プロトコル・エンジン451は、ノード104によって維持される未公開のトランザクションの順序付けられたセット154からTxiを抽出することが可能である。何れにせよ、スクリプト・エンジン451は、Txiの参照されたアウトプット内のロッキング・スクリプトを特定し、それをスクリプト・エンジン452へ渡す。
【0066】
スクリプト・エンジン452は、従って、Txjの対応するインプットからのアンロッキング・スクリプト及びTxiのロッキング・スクリプトを有する。例えば、Tx0及びTx1というラベルが付されたトランザクションが図2に示されているが、同様なことがトランザクションの任意のペアに適用可能である。スクリプト・エンジン452は、前述のように2つのスクリプトを一緒に実行し、これは、使用されているスタック・ベースのスクリプト言語(例えば、Script)に従って、スタック453上にデータを配置すること、及びスタック453からデータを取り出すことを含むであろう。
【0067】
それらのスクリプトを一緒に動作させることによって、スクリプト・エンジン452は、アンロッキング・スクリプトがロッキング・スクリプトで定められている1つ以上の基準を満たすかどうか、即ち、ロッキング・スクリプトが含まれるアウトプットを“ロック解除する(unlock)”かどうか?を判定する。スクリプト・エンジン452は、その判定結果をプロトコル・エンジン451に返す。スクリプト・エンジン452は、アンロッキング・スクリプトが、対応するロッキング・スクリプトにおいて指定されている1つ以上の基準を満たすと判定した場合、“真(true)”という結果を返す。そうでない場合、“偽(false)”という結果を返す。
【0068】
アウトプット・ベースのモデルでは、スクリプト・エンジン452からの結果“真”は、トランザクションの有効性の条件のうちの1つである。典型的には、プロトコル・エンジン451によって評価される、同様に満足しなければならない1つ以上の更なるプロトコル・レベル条件も存在し;例えば、Txjのアウトプット(複数可)で指定されるデジタル資産の総量が、そのインプットによって指定される総量を超えていないこと、及び、Txiの指定されたアウトプットが、別の有効なトランザクションによって既に消費されたものではないことである。プロトコル・エンジン451は、スクリプト・エンジン452からの結果を、1つ以上のプロトコル・レベル条件を用いて一緒に評価し、それらが全て真である場合に限り、トランザクションTxjを正当化する。
プロトコル・エンジン451は、トランザクションが有効であるかどうかの指示を、アプリケーション・レベル決定エンジン454に出力する。Txjが実際に検証されている条件の下でのみ、決定エンジン454は、コンセンサス・モジュール455C及び伝搬モジュール455Pの両方を制御して、Txjに関して各自それぞれのブロックチェーン関連機能を実行することが可能である。これは、コンセンサス・モジュール455CがTxjを、ブロック151に組み込むために、ノードのそれぞれの順序付けられたトランザクションのセット154に追加すること、及び、伝搬モジュール455Pが、Txjを、ネットワーク106内の別のブロックチェーン・ノード104に転送することを含む。オプションとして、実施形態では、アプリケーション・レベル決定エンジン454は、これらの機能の内の何れか又は両方をトリガする前に、1つ以上の追加の条件を適用することが可能である。例えば、決定エンジンは、トランザクションが有効であり、且つトランザクション手数料が十分に残っているという条件の下で、トランザクションを公表することを選択するだけであってもよい。
【0069】
また、本件における“真”及び“偽”という用語は、単一の二進数(ビット)のみの形態で表現される結果を返すことに(それは確かに1つの可能な実装形態ではあるが)必ずしも限定されない、ということに留意されたい。より一般的には、“真”は、成功又は肯定的な結果を示す任意の状態を指すことが可能であり、“偽”は、不成功又は否定的な結果を示す任意の状態を指すことが可能である。例えば、アカウント・ベースのモデルでは、“真”という結果は、シグネチャの暗黙的なプロトコル・レベルの検証と、スマート・コントラクトの追加的な肯定的なアウトプットとの組み合わせによって示されることが可能である(両方の個々の結果が真である場合に、全体的な結果は真を示していると考えられる)。
【0070】
5.スクリプト内での楕円曲線演算
図4は、本開示の実施形態を実施するための例示的なシステム400を示す。システム400は、第1のスクリプト・ジェネレータ(アリス103a)、第2のスクリプト・ジェネレータ(ボブ103b)、及び1つ以上のエンジンをブロックチェーン・ネットワーク106のブロックチェーン・ノード104の形態で含んでいる。これは単なる例示的な例であるに過ぎず、一般に、スクリプト・ジェネレータ及びスクリプト・エンジンは、アリス103a、ボブ103b、及びブロックチェーン・ノード104だけでなく、任意の適切なエンティティによって実装されてもよい、ということが理解されるべきである。一部の例では、第1のスクリプト・ジェネレータは、第1のスクリプトを出力するように構成された関数ライブラリを含む可能性がある。関数ライブラリは、ユーザーが、第1のスクリプトの1つ以上の値(例えば、法の値(modulus value)、スカラー値など)を更新して、特定のユース・ケースに特有の第1のスクリプトを生成することを可能にすることができる。
【0071】
引き続き図4の例に関し、アリス103aは、第1のブロックチェーン・トランザクションのための第1のスクリプトを生成するように構成されている。図示されているように、アリス103aは、第1のトランザクションを生成し、第1のトランザクションをブロックチェーン・ネットワーク106へ送信することも可能である。代替的に、アリス103aは、第1のスクリプトを、異なるエンティティ、例えば異なるユーザーにとって利用可能にし、ブロックチェーン・トランザクションの一部としてブロックチェーン・ネットワーク106にサブミットすることが可能である。図4の例では、第1のスクリプトは、第1のトランザクションのアウトプットをロックするロッキング・スクリプトの一部を形成する。他の例では、第1のスクリプトは、第2のトランザクションのロック解除スクリプト(「第2のスクリプト」)の一部を形成する可能性がある。ブロックチェーン・ネットワーク106のブロックチェーン・ノード104は、第1及び第2のトランザクションを受信し、第2のスクリプトとともに第1のスクリプトを実行するように構成される。
【0072】
5.1. モジュラー・インバージョン(Modular Inversion)
第1のスクリプトは、モジュラー・インバージョン・スクリプト(modular inversion script)を含む。モジュラー・インバージョン・スクリプトは、ターゲット整数と互いに素(co-prime)であるモジュラス値(modulus value)を使用して、ターゲット整数のモジュラー・インバース(逆元)を生成するように構成されている。ターゲット整数とモジュラス値は、モジュラー・インバージョン・スクリプトに入力として供給される。一部の例では、入力は、第1のスクリプト、即ち、モジュラー・インバージョン・スクリプトと同じスクリプトに含まれている。他の例では、入力は、第2のブロックチェーン・トランザクションの第2のスクリプトに含まれる。例えば、第2のスクリプトは、第2のトランザクションのロック解除スクリプトであってもよいし、或いはその一部を形成していてもよい。第2のトランザクションは、図4に示されるように、ボブ103bによって生成され、ブロックチェーン・ネットワーク106にサブミットされる可能性がある。
【0073】
実施形態において、モジュラー・インバージョン・スクリプトは、拡張ユークリッド・アルゴリズム(extended Euclidean algorithm)の少なくとも一部を実行することによって、ターゲット整数のモジュラー・インバースを生成するように構成される。拡張ユークリッド・アルゴリズム(eGCD)は、2つの整数n,xの最大公約数(greatest common divisor,GCD)とベズーの等式(Bezout identity)の係数y,mを算出する:
【0074】
【数1】
【0075】
n及びxが互いに素(coprime)である場合、ベズー係数(Bezout coefficient)yは、nを法とするxのモジュラー・インバースである。アルゴリズムは、
r0:=n,s0:=1,t0:=0,
r1:=x,s1:=0,t1:=1
と設定し、3つのシーケンスri,si,tiを次のようにして反復的に計算する:
【0076】
【数2】
【0077】
反復は、rk+1=0 となる場合に停止する。egcd(x,n):=(rk,sk,tk)を定義することにより、GCDはrkとなり、nとxのベズー係数はそれぞれsk,tkとなる。
【0078】
モジュラー・インバージョン・スクリプトは、ターゲット整数(x)とモジュラス値(n)に基づいて、拡張ユークリッド・アルゴリズムの第1のシーケンス(ti+1)を計算し、計算された第1のシーケンス(ti+1)に基づいて、ターゲット整数(x)のベズー係数(y)を計算する。モジュラー・インバージョン・スクリプトは、更に、ターゲット整数(x)のベズー係数(y)を、ターゲット整数のモジュラー・インバース(x-1)として出力するように構成される。例えば、モジュラー・インバースは、スタック・ベース・メモリ453に出力されてもよい。追加的又は代替的に、モジュラー・インバースは、以下で説明するように、第1のスクリプトのうちの異なるスクリプトによって使用されるように出力されてもよい。
【0079】
モジュラー・インバージョン・スクリプトは、ターゲット整数(x)とモジュラス値(n)に基づいて、拡張ユークリッド・アルゴリズムの第2のシーケンス(ri+1)を計算し、第2のシーケンスを用いて、ターゲット・インデックスとモジュラス値のGCDを計算するように構成されている。第1及び第2のシーケンスにおける初期値から開始して、モジュラー・インバージョン・スクリプトは、第1のシーケンスti+1及び第2のシーケンスri+1における次の値の各々を、第2のシーケンスのそれぞれの値がGCDに等しくなるまで反復的に計算するように構成される。第1のシーケンスにおける対応する値は、ターゲット整数のベズー係数として出力される。
これらの例において、モジュラー・インバージョン・スクリプトは、以下の値を初期設定してもよい(即ち、ハードコードされた値として含んでもよい):
t1:=1,t0:=0,r0:=n,r1:=x
モジュラー・インバージョン・スクリプトは、サブ・スクリプトの系列であって、各サブ・スクリプトは第1及び第2のシーケンスにおいてそれぞれの次の値を生成するように構成されたもの、を含むことが可能である。サブ・スクリプトの系列は、モジュラー・インバージョン・スクリプト内のループとして機能する。系列内のサブ・スクリプトの数の上限は
【0080】
【数3】
として決定されてもよく、ここで、κはモジュラス値のビット数であり、Φは黄金比である。
上限は次のようにして導出される:FN+1を、x≧FN+1であるような(N+1)次のフィボナッチ数(Fibonacci number)であるとする。egcd(a,b)を計算する反復数は高々Nであることが知られている。n>x≧FN+1≧ΦN-1 であり、ここで、Φ:=(1+√5)/2は黄金比であることに留意し、次式を得る:
【0081】
【数4】
換言すれば、κビットのモジュラスnに関し、任意のx
【0082】
【数5】
のモジュラー・インバースを計算するための反復数Nは、
【0083】
【数6】
により定められる上限である。
以下のボックスは、例示的なモジュラー・インバージョン・スクリプト[egcd mod invert]であって、モジュラス値<n>についてターゲット整数<x>のモジュラー・インバースを計算して出力するように構成されたものを示す。本件で示される例示的なスクリプトは、例えばビットコイン・ブロックチェーンで使用されるような、スクリプト(Script)言語で記述される。説明される実施形態は、如何なる特定のスクリプト言語にも限定されず、Scriptは単に例として使用されるに過ぎない、ということが理解されるべきである。他の適切なスクリプト言語が使用されてもよい。[egcd mod invert]は、本件において[modular invert]と言及されてもよい。
【0084】
図示されているように、モジュラー・インバージョン・スクリプトは、アンラップされたループ(unwrapped loop)を実装するように構成されることが可能である(なお、一部のスクリプト言語はループを許容していない)。ループのステップ数は、上記で指定される境界によって与えられる。各ステップは、第1の(IF)ブランチと第2の(ELSE)ブランチを実装している。第1のブランチは、“ワーキング(working)”ブランチである。それは、第1及び第2のシーケンス、即ち、最終的にベズー係数を明らかにするシーケンス、及び最終的にGCDを明らかにするシーケンスにおけるそれぞれの次の値を計算する。GCDが明らかになると、ELSEブランチ(“アイドル(idle)”ブランチ)がアクセスされ、スクリプトは、アンラップされたループの全てのステップが実行されるまで、アイドルのままである。換言すれば、ELSEブランチでは、スクリプトは本質的にアイドルのままであり、モジュラー・インバースの計算に寄与しない。スクリプトの実行終了時に、ベズー係数は例えばスタックに出力されることになる。
【0085】
【数7】
【0086】
重要なシーケンスは、第1の(ti)シーケンスである。siシーケンスを計算することは必須ではない。上記の例示的なスクリプトは、x∈Z* n及びnを引数として受け取り、t2,...tk+1を計算する。シーケンスri(最終的には、GCDを与えるもの)は、モジュラー・インバースが得られた時、及びスクリプト内で分岐する時を決定するために使用される。rk:=gcd(n,x) に到達すると、スクリプトはOP_ELSEブランチ(アイドル・ブランチ)にアクセスする。終了の後、これはスタックのトップに、モジュラー・インバースtk≡x-1 mod n を残す。
【0087】
各反復(即ち、指定されたオペコードの反復)は20バイトを要する。初期化(6)と終了(17)のためのバイトを加えると、次のようなサイズのスクリプトが得られる:
【0088】
【数8】
【0089】
5.2. 点加算
モジュラー・インバージョン・スクリプトは、2つの楕円曲線点の加算を実行する一部として、整数のモジュラー逆元を計算するために使用される可能性がある。
Pを奇数の素数とし、a,b∈Zp, 4a3-27b2≠0 であるとする。ワイエルシュトラトスの楕円曲線(Weierstrass elliptic curve)は次のような集合である:
【0090】
【数9】
任意の2つの点P,Q集合Ea,b,cに関し、(加法)群が次のように定義される:
【0091】
【数10】
【0092】
アフィン点(affine point)P:=(x,y)のインバース(逆元)は、-P:=(x,-y)として定義される。上記の演算は全てZpにおけるものである。
【0093】
点加算における最もコストのかかる演算は、モジュラー逆元を計算することである。サイズの観点から言えば、それはスクリプトでは更にコスト高となり、なぜならループ展開される必要があるからである。
【0094】
第1のスクリプトは、点加算スクリプトであって、第1の楕円曲線点(P)と第2の楕円曲線点(Q)とモジュラス値(p)とを求めるように構成されているものを含む可能性がある。スクリプトにおいて、楕円曲線点P,Qは、それぞれ(x1,y1),(x2,y2)と表現されることが可能である。点加算スクリプトは、第1の点と第2の点の加算(P+Q)を出力するように構成される。加算(P+Q)は本件では第1のターゲット点として言及される。一部の例では、第1及び/又は第2の楕円曲線点は、第2のトランザクションの第2のスクリプトから取得される可能性がある。第1のターゲット点を計算する場合に、点加算スクリプトは、ラムダ値λを計算するように構成される。上記に示されるように、λは分子と分母の値に基づいている。分子と分母はスクリプト内で計算される。即ち、点加算スクリプトは、分母のインバースを計算し、分母のインバースに分子を乗算してλを算出する。換言すれば、モジュラー・インバージョン・スクリプトに入力されるモジュラス値とターゲット整数はそれぞれ計算された分母とpである。次いで、計算されたλは、式4に従って第1のターゲット点を算出するために、点加算スクリプトによって使用される。
【0095】
点加算スクリプトは、第1の点と第2の点が等しいか否かに応じて、上記の式4a及び式4bに従って分子及び分母を計算するように構成される。点加算スクリプトは、スクリプトにおいて、第1の点と第2の点が等しいかどうかを判断するように構成されてもよい。それは、λを計算するためのスクリプトが、点加算スクリプトの一部として1回だけ含まれることを必要とする、ということを意味する。つまり、モジュラー・インバージョン・スクリプトは、点加算スクリプトの一部として1回だけ含まれることを必要とする、ということを意味する。
【0096】
点加算スクリプトは、第1の点と第2の点の何れかが単位元(identity element)(φ)に等しいかどうかを判定し、第1の点と第2の点の何れも単位元(φ)に等しくない場合にλを算出するだけであるようにも構成されている。
【0097】
次のボックスは、例示的な点加算スクリプト[Add points]であって、2つの楕円曲線点の和を計算して出力するように構成されているものを示す。
【0098】
【数11】
【0099】
スクリプト[Add points]は、下から上までの5つのトップ要素y2,x2,y1,x1,pにより初期化されたスタックを想定しており、これらは加算される点P,Qの座標とモジュラスpである。完了後に、スクリプトは、P,Q,pをポップして、P+Qの座標y+,x+を(この順序で)スタックにプッシュする。スクリプトは、λの生成の際に、分岐ステートメント(4a)及び(4b)でそれを(2回)呼び出すのではなく、逆元サブルーチンを一度だけしか呼び出さない。
【0100】
より正確には、λ:=N/D mod p である場合に、サブルーチン・スクリプト[Computeλ](下記参照)は、ブランチ(4a)及び(4b)の中で適切な分子N及び分母Dを(整数上で)計算する。ジョイント・ブランチ(4)において、インバートDのモジュロ演算を行い、λとP+Qの演算を完了する。完了後に、スクリプトはPとQの座標に加えてスカラーλをスタックにプッシュする。
【0101】
スクリプト[事前に計算されたλからの点加算(Add points from precomputedλ)](下記)を用いてP+Qを計算する。スタックは、下から上までの6つのトップ要素y2,x2,y1,x1,λ,pに初期化されているように想定されている。完了後に、P及びQの座標に加えて加算点P+Qの座標y+,x+をスタックにプッシュして、λ,pを消費する。
【0102】
2点の加算は、モジュラー・インバージョンの複雑性によって支配されている。具体的には、スクリプトは、37個のオペコード、プラス、サブルーチンを含む:
【0103】
【数12】
【0104】
以下のボックスは、分子、分母、モジュラス値に基づいてλを計算して出力するように構成された例示的なスクリプト[Computeλ]を示す。この例示的なスクリプトは、モジュラー・インバージョン・スクリプトを使用する。
【0105】
【数13】
【0106】
以下のボックスは、例示的なスクリプト[事前に計算されたλを用いる点加算(Add points with precomputed λ)]であって、第1の点、第2の点、及び事前に計算されたλ値に基づいて、ターゲット点を計算して出力するように構成されたものを示す。
【0107】
【数14】
【0108】
5.3. 点減算
第1のスクリプトは、ある楕円曲線点を、別のものから減算するように構成された点減算スクリプトを含む可能性がある。一部の例では、点減算スクリプトは、点加算スクリプトを含む可能性がある。
【0109】
点減算スクリプトは、第3の楕円曲線点とモジュラス値を求めるように構成される。点減算スクリプトは、モジュラス値を用いて第3の楕円曲線点をネゲート(negate)し、その結果を、第1又は第2の楕円曲線点として点加算スクリプトに出力するように構成される。即ち、点減算スクリプトは、楕円曲線点を否定し、その否定されたものは、点加算スクリプトによって別の楕円曲線点に加算される。
【0110】
以下のボックスは、例示的な点否定スクリプト[Negate point]であって、楕円曲線点を否定するために、点減算スクリプトによって使用される可能性のあるものを示す。
【0111】
【数15】
【0112】
この演算は、点の逆元を見出す。これは、ワイエルシュトラス曲線に対して実装され、点P=(x,y)の否定は、-P:=(x,-y mod p)として定義される。否定点スクリプトは、その点を消費して、その否定をプッシュする。これは、pを法として縮小された点座標を伴うスタック(stack with point coordinates reduced mod p)を想定しており(正の最小残余(least positive residues))、OP_MODを使用することが可能である。点を否定するために7バイトが必要である。
【0113】
2つの点の減算は、[Negate point]スクリプトと[Add points]スクリプトを使用して実行されることが可能であり、これらのスクリプトについては、説明済みである。結果として生じる複雑さは、2つのスクリプトの複雑さの合計になる:
【0114】
【数16】
【0115】
5.4. 点倍化
モジュラー・インバージョン・スクリプトは、楕円曲線点の二倍化を実行する一部として、整数のモジュラー逆元を計算するために使用される可能性がある。点の二倍化は、上記の式4bで定義されている。
【0116】
第1のスクリプトは、第4の楕円曲線点(P)とモジュラス値(p)を得るように構成された点倍化スクリプト(point doubling script)を含む可能性がある。スクリプトにおいて、楕円曲線点Pは、(x1,y1)として表現されることが可能である。点倍化スクリプトは、楕円曲線点の2倍(2P)を出力するように構成されている。2倍(2P)は、本件では第2のターゲット点として言及される。一般に、「第1」、「第2」、「第3」などのラベルは、任意のラベルとして使用され、文脈が別意を要求していない限り、必ずしも順序又は他の何らかの値の存在を意味しない、ということに留意されたい。例えば、第2のターゲット点は、第1のターゲット点を計算することを必要とせずに算出されることが可能である。同様に、「第1」及び「第2」などは、同じ値又は異なる値、あるいは他のタイプのデータのラベルとして使用される可能性がある。例えば、「第1」の楕円曲線点と「第3」の楕円曲線点とは、同じ点であってもよい。
【0117】
一部の例において、2倍にされる楕円曲線点は、第2のトランザクションの第2のスクリプトから取得されてもよい。
【0118】
点倍化スクリプトは、点加算スクリプトについて上述したのと同様な方法で第2のラムダ値を計算するように構成されてもよい。即ち、分子及び分母を計算し(例えば、式4bを用いて)、分母のインバースが、モジュラー・インバージョン・スクリプトを用いて計算され、次いで、分母のインバースに分子を乗算して、λを生成する。次いで、点倍化スクリプトは、第3の楕円曲線点(P)及びλを使用して第2のターゲット点を計算するように構成されている。
【0119】
以下のボックスは、例示的な点倍化スクリプト[Double points]であって、楕円曲線点の2倍を計算して出力するように構成されたものを示す。これは、点とモジュラスを取り、その2倍をプッシュして、引数を消費する。
【0120】
点の倍増はモジュラー逆元によって支配される。しかしながら、定数は[Add points]を用いる2点の加算の場合より若干小さい。具体的には、次のようになる:
【0121】
【数17】
【0122】
5.5. スカラー乗算
第1のスクリプトは、第5の楕円曲線点(P)にスカラー(k)を乗算するように構成された第1のスカラー乗算(multiplication-by-scalar,MBS)スクリプトを含む可能性がある。ここでも、「第5」は単なる便宜的なラベルとして使用されているに過ぎない、ということに留意されたい。第1のMBSスクリプトは、第5の楕円曲線点、スカラー値、及びモジュラス値を取得するように構成される。スカラー値はバイナリで表現されるか、又はスクリプト内でバイナリに変換される。第1のMBSスクリプトは、kPを計算するために、ダブル・アンド・アッド・アルゴリズム(double-and-add algorithm)を使用するように構成されており、kPは本件では第3のターゲット楕円曲線点として言及される。
【0123】
kPを計算するために、ダブル・アンド・アッド・アルゴリズムは反復的に下記のように2倍を計算し:
【0124】
【数18】
【0125】
また、Diを結果の点Rに加算することを、スカラーkのi番目のビットが設定されている場合であってその場合に限り行う。
【0126】
より具体的には、第1のMBSスクリプトは、順番に実行される一連のサブ・スクリプトを含む。各サブ・スクリプトは、それぞれのインデックスに関連付けられ、点倍化スクリプトのインスタンス(e.g.,[Double point])を含む。点倍化スクリプトはモジュラー・インバージョン・スクリプトを利用していることを想起されたい。
【0127】
この系列におけるサブ・スクリプトのうちの最初のものは、第5の楕円曲線点を2倍にする、即ち、D1:=2Pを計算するように構成されている。これは、第1の中間結果と言及される。系列におけるサブ・スクリプトのうちの次のものは、第1の中間結果を2倍にする、即ち、D2:=D1+D1=22Pを計算するように構成されている。これは、第2の中間結果と言及される。プロセスは1回又は複数回繰り返される。一般に、各々のサブ・スクリプトは、先行する値を2倍にすることによって、それぞれの中間結果を生成するように構成されており、ここで、先行する値は、第5の楕円曲線点(P)又は前の中間結果(Di-1)のうちの何れかである。
【0128】
第1のMBSスクリプトは、各インデックスがスカラーkの対応するビット(設定されているもの、即ち1に等しいもの)に関連付けられているサブ・スクリプトによって生成された中間結果を加算することによって、kPを計算するように構成されている。換言すれば、i番目のビットが設定されている場合、i番目のサブ・スクリプトにより生成されたi番目の中間結果が、結果値に加算される。結果値は、空の配列として初期化され、関連する中間結果のそれぞれを追加することによって更新されてもよい。
【0129】
以下のボックスは、例示的な第1のMBSスクリプト[Multiply by scalar via double - and - add]であって、楕円曲線点のスカラー乗算を計算して出力するように構成されているものを示す。これは、点、スカラー、及びモジュラスを取り、結果のスカラー乗算をプッシュする。
【0130】
【数19】
【0131】
[Multiply by scalar via double - and - add]は、以下のボックスに示されるスクリプトをサブルーチンとして使用し、楕円曲線及びスカラーkにおける点R及びD(二倍化)に関し、スカラーkのi番目のビット値に基づいて、R+Dそれ自体又はそれを用いてRを更新する。サブルーチンの実行後に、スタックのトップは、P(ビットが設定されていない場合)又はP+D(ビットが設定されている場合)の何れかである。これは、スタックの第3ないしトップの要素としてスカラーを残す。
【0132】
【数20】
【0133】
ここで、ダブル・アンド・アッド(double-and-add)を使用してスカラー乗算を行うために、バイト数をカウントする。ここでは、2つの因子、ベース・フィールド(基礎体)のモジュラスpのサイズκとスカラーkのサイズnとがある(secp256k1では、両方とも256ビット長である)。スクリプトは9nオペコード・プラス・サブルーチンを有する:
【0134】
【数21】
【0135】
5.6. スカラー乗算-固定点
第1のスクリプトは、第6の楕円曲線点(P)にスカラー(k)を乗算するように構成された第2のスカラー乗算(multiplication-by-scalar,MBS)スクリプトを含む可能性がある。ここでも、「第2」及び「第6」の両方が、単なる便宜上のラベルとして使用されているに過ぎない、ということに留意されたい。第2のMBSスクリプトは、第1のMBSスクリプトと相違する。即ち、第1及び第2のMBSスクリプトは、異なる機能を実行するように構成された異なる種類のスクリプトである。第2のMBSスクリプトは、モジュラス値を使用して、スカラーによって所定の楕円曲線上の点を取得するように構成される。スカラー値はバイナリで表現されるか、又はスクリプト内でバイナリに変換される。第1のMBSスクリプトと同様に、第2のMBSスクリプトも、ダブル・アンド・アッド(double-and-add)アルゴリズムを使用してkPを計算するように構成されており、kPは本件では第4のターゲット楕円曲線点として言及される。しかしながら、この場合、二倍Diは、スクリプト内で計算されるのではなく、事前に計算されている。
【0136】
第2のMBSスクリプトは、順番に実行される一連のサブ・スクリプトを含む。各サブ・スクリプトは、それぞれのインデックスに関連付けられ、点加算スクリプト(e.g.,[Add points])のインスタンスを含む。各サブ・スクリプトは、第6の楕円曲線点のそれぞれの予め計算された倍化を含む。即ち、第1のサブ・スクリプトは、第1の2倍化D1:=2Pを含み、第2のサブ・スクリプトは、第2の2倍化D2:=D1+D1=22Pを含む。各サブ・スクリプトは、スカラーの対応するビットが設定されている場合、即ち1に等しい場合に、点加算スクリプトを使用して、それぞれの倍化を結果に加算するように構成される。換言すれば、i番目のビットがセットされている場合に、i番目のサブ・スクリプトは、i番目の倍化Diを結果値に加えるように構成されている。結果値は、空の配列として初期化され、関連する倍化の各々を加算することによって更新されてもよい。
【0137】
以下のボックスは、例示的な第2のMBSスクリプト[Multiply P by scalar]であって、楕円曲線点のスカラー乗算を計算して出力するように構成されたものを示す。これは、スカラーとモジュラスを取り、結果のスカラー乗算をプッシュする。
【0138】
上記の倍化及び加算スクリプトと比較すると、これは、次のように倍算を節約する:
【0139】
【数22】
【0140】
【数23】
【0141】
6. 更なるスクリプト
このセクションは、第1のスクリプトの一部として含まれる可能性のある複数のスクリプトを示す。これらのスクリプトは単なる例であるに過ぎず、本開示を前提として、同等な機能を実行する同等なスクリプトを開発することは、当業者の技術の範囲内にある、ということが理解されるであろう。同じことが上記のスクリプト例にも当てはまる。
【0142】
6.1. ビットが1であるか又はゼロであるかどうかを判定する。
(bκ-1,...,b0)をκビット整数のビッグ・エンディアン(big-endian)ビット・アレイであるとする:
【0143】
【数24】
【0144】
【数25】
を、ラムダのバイト長であるとする。
【0145】
λのi番目のビットbiが1に設定されているかどうかを、ビット毎の演算を用いて検査することが可能である:
【0146】
1. 整数1の8l(8エル)ビット表現を計算する。ビッグ・エンディアンでは、8l(8エル)-1個のゼロの後に単独の1が続く。
2. 1のビットを、合計でi個の位置だけ左シフトする。これは、2iを計算することと同等である。(位置インデックスが1から始まる場合は、代わりに、i-1個の位置だけシフトする)。
3. 2i及びλの間でブール代数演算を実行する。
【0147】
以下のボックスは、ターゲット・ビットとスカラーを引数として取るように構成された例示的なスクリプト[Is bit set]を示す。第1の行は、整数1を、l(エル)バイト・アレイとしてビッグ・エンディアンでプッシュし(ビット単位のOP_ANDに必要);OP_NUM2BINはリトル・エンディアンの数に変換するので、(l(エル)-1)の長さのゼロ・アレイ((l-1)-long zero-array)の右端にビット1を直接的に付加する。第2の行は、プッシュされた1のi番目のビットのみを設定する。第3の行は、スタックのトップに数resを残し、これは2i(ビットが設定されている,bi=1)又は0(ビットは設定されていない,bi=0)の何れかである。先回りすると、これは、OP_IFステートメントで分岐するブール値として解釈することができる。
【0148】
【数26】
【0149】
実行後の各ラインの後のスタックの状態を示す。標記(n)l(エル)は、長さl(エル)のバイト・アレイであり、ビッグ・エンディアンにおける整数nを表す。
【0150】
【数27】
【0151】
スクリプト[Is bit set]のサイズは、λのサイズに関わらず9バイトである。
【0152】
6.2. 点倍化
2つの点P:=(x1,y1)及びQ:=(x2,y2)を二重化できることは、しばしば便利である。以下のスクリプト例はそれを行う。点のペアを二重化するために2バイトを必要とする。
【0153】
【数28】
【0154】
6.3. 点等価性(Point equality)
楕円曲線の2点は、座標が同じである場合であってその場合に限り等しい。このロジックを実装するスクリプトは、以下のボックスに与えられている。点の座標を消費し、点が等しい場合には1をスタックにプッシュし、そうでなければ0をプッシュする。スクリプトは、点座標が既にpを法として縮減されているスタックを想定している。2つの点が等しいかどうかをチェックするために、5バイトが必要になる。
【0155】
【数29】
【0156】
6.4. 単位元
εを空のアレイ(empty array)であるとする。ワイエルシュトラス曲線の単位元を次のように表す:
φ:=(128,ε)=(0x80,ε)
ここで、εは空のアレイを示す。一部の例では、スクリプト・エンジンは整数128を正のゼロとして解釈する。従って、この選択は、単位元が曲線のアフィン点のセットの一部ではないことを保証しており:スクリプト・エンジンにおけるゼロ座標は、0x80ではなく、0x00により与えられる。
【0157】
所与の点がφであるかどうかの検査は、点の等価性よりも効率的に実行されることが可能である。第1の座標がバイト・アレイとして0x80に一致するかどうかを検査することで十分である。以下のスクリプト[Is identity element]を参照されたい。座標は、pを法として縮減されている、即ち、座標は[0,p)の中にあるように仮定されている。点が単位元である場合、点を消費し、1をプッシュする。そうでない場合には、ゼロをプッシュする。点が曲線の単位元であるかどうかを検査するために、3バイトを必要とする。
【0158】
【数30】
【0159】
6.5. モジュラー縮減(Modular reduction)
オペコードOP_MODは、スクリプト・エンジンにおいて、剰余演算子%により実装されている。Cにおける整数除算は、整数を0に向かって切り捨てており、従って%は負数を出力する場合がある。即ち、-n<x<nに関し、x=x,n OP_MODである。換言すれば、OP_MODの出力レンジは、剰余系(residue system)ではない。例:
-2=-5, 3 OP_MOD
【0160】
モジュラー縮減は、以下のボックスに示されるスクリプト例を使用して実装されることが可能である。具体的には、スクリプトのレンジ出力は、最小剰余系{0,1,...,n-1}(least residue system)である。例:
1=-5, 3 [Reduce mod]
【0161】
スクリプトは、スタックのトップがx,nであり、x mod n∈[0,n)を出力し、引数を消費することを想定している。具体的な内容においては(即ち、スクリプト・エンジンOP_MOD実装の組み合わせにおいては)、(x%p+p)%p を計算する。これは、pを法とする整数(an integer modulo p)を削減するために10バイトを必要とする。
【0162】
【数31】
【0163】
6.6. altスタックからのモジュラスをロードする
多くのハイ・レベル・スクリプトでモジュラスをハード・コーディングするのを避けるために、以下のスクリプトを定義して、それをaltスタックに保持することが可能である。モジュラスは既にaltスタックに移されている、と仮定される。
【0164】
【数32】
【0165】
6.7. ベース変更
任意の点Pのスカラー乗算のサイズ(スクリプトの作成時には不明)は、既知のベースGにおけるPの対数が分かっていると仮定すると、大幅に改善することが可能である。ある固定されたGに関し、P=xG であると仮定すると、kP=(xk)Gである。従って、必要とされるものは、引数としてスカラーyを渡して、y=xyを計算し、固定小数点スクリプトを実行することである。以下のボックスに示されるスクリプト例はこれを実施する。x:=logGP は、パラメータとして渡されることに留意されたい。スクリプトはyPを出力する。スクリプトのサイズは、基礎となる固定小数点スクリプトのサイズを3バイトだけ上回る。
【0166】
【数33】
【0167】
7. 例示的なユース・ケース
上記のスクリプトにおけるEC演算を使用して、UTXOを償還(redeem)することが可能である。以下、幾つかのユース・ケース例を示す。
【0168】
7.1. ペダーセン・コミットメント(Pedersen commitments)
ロッキング・スクリプトで指定されるペダーセン・コミットメントC=xG+rPのオープニング(opening)m,rを知っているならば、その者はUTXOを消費することが可能である。ジェネレータG及びHは既知である。隠蔽コミットメントを用いると、小さなセットから、メッセージmにコミットすることが可能である。例えば、mは、小さなパブリックなセットからの文字列又はビットであるとすることが可能である。これは、コミットメント・スキームが、コミットされた値を隠すことを希望する場合に、ハッシュ・タイム・ロック・コントラクト(Hash Time Locked Contract,HTLC)において有用である可能性がある。
【0169】
一実施形態では、スクリプトが提供される可能性があり、スクリプトは、上記のセクション5.6で説明された第2のスカラー乗算(MBS)スクリプトの2つのインスタンスと、セクション5.2で説明された点加算スクリプトの1つのインスタンスとを含む。スクリプトは、コミットメント・ポイントも含んでいる。
【0170】
スクリプトは、MBSスクリプトを実装し、Hにスカラーrを乗算して、第1の楕円曲線点rHを計算するように構成されており、ここで、rはアンロッキング・スクリプトで提供される。スクリプトは、第2のMBSスクリプトの第2のインスタンスを実行して、Gにスカラーmを乗算し、第2の楕円曲線点mGを計算するように構成されている。スクリプトは、点加算スクリプトを実行して、rH及びmGの合計を計算し、次いで、コミットメント候補点C*を算出する。最終的に、スクリプトは、計算されたコミットメント候補点がスクリプトのコミットメント点に等しいことを検証するように構成されている。
【0171】
以下のボックスは、例示的なスクリプト[Open Pedersen Commitment C]であって、m及びrに関してコミットメント候補点を計算して出力するように構成されているものを示す。
【0172】
【数34】
【0173】
UTXOは、コミットメントに対するオープニングが知られている場合に限り、消費されることが可能である。コミットメントC及びジェネレータG,Hは、ロッキング・スクリプトにハード・コーディングされている。オープニング(m,r)は、アンロッキング・スクリプトで与えられる。コミットされたメッセージmは、1ビットであるとすることが可能であることに留意されたい。スクリプトは、以下のサイズを有する:
【0174】
【数35】
【0175】
ここで、曲線はκビットの基礎体(base field)Zp上でインスタンス化される。secp256k1では、これは、大まかに1.5MBのスクリプトをもたらす。

7.2. 秘密鍵パズル
秘密鍵パズルを使用すると、公開鍵P:=s・Gに対応する署名鍵sが明らかにされる場合に限り、資金(fund)は消費されることが可能である。
【0176】
秘密鍵パズルは、ECDSAの一時的な鍵(ECDSA ephemeral key)を公開して実装することが可能であり、その結果、僅か数個のオペコードの非常に軽いロッキング・スクリプトをもたらす。
【0177】
このアプローチは、ロック解除スクリプトの内容を使用して、オフ・チェーンで秘密鍵を再生成することを必要とする。署名鍵(パズルの解)に更に制約を課すロッキング・スクリプトを想定するために、EC演算を使用することが可能である。
【0178】
これは、商品の条件付支払いに対する適用例を有する。例として、オフ・チェーン演算やオフ・チェーン通信を行わないアウトソーシング・バニティ・アドレス(outsourcing vanity addresses)に適用されてもよい。実際、鍵ペア(sbuyer,Pbuyer)を有する購入者は、あるトランザクションを発行することが可能であり、そのトランザクションのロッキング・スクリプトは、アンロッキング・スクリプトの下で、ECDSA鍵ペア(s,P)に対して以下の3つの条件を強制するものである:
i. スクリプト[Multiply G by scalar]及び[Are equal points]を用いてP=s・Gを強制すること
ii. 事前に決定されたパターンを含むバニティ・アドレスd:=RIPEMD160(SHA256(P+Pbuyer))を強制すること。dを生成するために、入力P及びハード・コーディングされたPbuyer関してスクリプト[Add points]及びオペコードOP_HASH160を使用する。ハード・コーディングされたパターンに対してdを検査するために、OP_SPLITを使用する。
【0179】
このトランザクションを消費する如何なる者も、署名鍵sを提供し、従って、購入者は、バニティ・アドレスの署名鍵sbuyer+sを導出することができる。
【0180】
所定の公開鍵及び所定のアドレスと、第2のMBSのインスタンスと、点加算スクリプトのインスタンスとを含むスクリプトが提供されてもよい。
【0181】
スクリプトは、後続トランザクションのロック解除スクリプトから、秘密鍵と候補アドレスとを取得するように構成される。スクリプトは、更に、秘密鍵を、第2のMBSスクリプトのインスタンスに入力して、候補公開鍵を生成するように構成される。次いで、生成された候補公開鍵は所定の候補鍵に等しいことが、例えば[Are equal points]スクリプトを使用して、スクリプトにおいて検証される。スクリプトは、更に、候補公開鍵及び所定の公開鍵を、点加算スクリプトのインスタンスに入力して楕円曲線の候補点を生成し、生成された楕円曲線の候補点をハッシュ化して、候補アドレスを生成するように構成される。スクリプトは、候補アドレスが所定のアドレスに一致すること、又は、候補アドレスの一部が所定のアドレスの一部に一致すること、を検証するように構成される。
【0182】
secp256k1では、ロッキング・スクリプトは約700 KBである。
【0183】
7.3. 暗号テキストに対する支払
この場合、トランザクションは平文m及び解読鍵sk(固定された暗号テキストCを解読するもの)の知識を用いて引き換えられる。ロッキング・スクリプトは、Cを含み、解読アルゴリズムを実装する。
【0184】
ElGamalを使用することも可能であるが、任意のグループ・ベースの暗号化方式が機能するということは理解されるであろう。ElGamal暗号文C=(C0,C1)が、ロッキング・スクリプトで指定された楕円曲線に対して与えられているとする。ロッキング・スクリプトは、Cをm*:=C1-skC0に解読し、m=m*であるかどうかを検査する。これも、固定点スカラー乗算及びスカラー減算を用いて、EC演算により実装される。
【0185】
8. 備考
開示された技術の他の変形例又はユース・ケースは、一旦本件の開示が与えられると、当業者には明らかになるであろう。本開示の範囲は、説明された実施形態によってではなく、添付のクレームによってのみ制限される。
【0186】
例えば、上記の幾つかの実施形態は、ビットコイン・ネットワーク106、ビットコイン・ブロックチェーン150、及びビットコイン・ノード104の観点から説明されている。しかしながら、ビットコイン・ブロックチェーンはブロックチェーン150の特定の例であり、上記の説明は一般に任意のブロックチェーンに適用されてもよい、ということが理解されるであろう。即ち、本発明は、ビットコイン・ブロックチェーンに決して限定されるものではない。より一般的には、ビットコイン・ネットワーク106、ビットコイン・ブロックチェーン150、及びビットコイン・ノード104に対する上述の如何なる言及も、それぞれブロックチェーン・ネットワーク106、ブロックチェーン150、及びブロックチェーン・ノード104に対する言及に置き換えることが可能である。ブロックチェーン、ブロックチェーン・ネットワーク、及び/又はブロックチェーン・ノードは、上述のように、ビットコイン・ブロックチェーン150、ビットコイン・ネットワーク106、及びビットコイン・ノード104の説明された特徴の一部又は全部を共有することが可能である。
【0187】
本発明の好ましい実施形態では、ブロックチェーン・ネットワーク106はビットコイン・ネットワークであり、ビットコイン・ノード104は、ブロックチェーン150のブロック151を生成、公表、伝搬、記憶する説明済みの機能の少なくとも一部又は全部を実行する。これらの機能のうちの1つ又は一部のみを実行するが、全てを実行しない他のネットワーク・エンティティ(又はネットワーク要素)が存在する可能性があることは除外されない。即ち、ネットワーク・エンティティは、ブロックを生成及び公表することなく、ブロックを伝搬及び/又は格納する機能を実行する場合がある(これらのエンティティは、必ずしも好ましいビットコイン・ネットワーク106のノードと考えられないことを想起されたい)。
【0188】
本発明の他の実施形態では、ブロックチェーン・ネットワーク106はビットコイン・ネットワークではない可能性がある。これらの実施形態では、ノードが、ブロックチェーン150のブロック151を生成、公表、伝搬、及び格納する機能の少なくとも1つ又は一部を実行するが、全てを実行しない場合があることは、除外されない。例えば、これらの他のブロックチェーン・ネットワークにおいて、「ノード」は、ブロック151を作成及び公表するように構成されているが、それらのブロック151を記憶及び/又は他のノードに伝播しないように構成されたネットワーク・エンティティを参照するために使用される可能性がある。
【0189】
更に、より一般的には、上記の用語「ビットコイン・ノード」104への如何なる言及も、用語「ネットワーク・エンティティ」又は「ネットワーク要素」に置き換えられてもよく、このようなエンティティ/要素は、ブロックを作成、発行、伝搬、及び記憶する役割のうちの一部又は全部を実行するように構成される。このようなネットワーク・エンティティ/要素の機能は、ブロックチェーン・ノード104を参照しながら上述したのと同じ方法でハードウェアで実装されてもよい。
【0190】
上記の実施形態は、単なる例示として説明されているだけであることが理解されるであろう。より一般的には、以下のステートメントのうちの任意の1つ以上による方法、装置又はプログラムを提供することが可能である。
【0191】
ステートメント1.
ブロックチェーン・トランザクションを用いて実行される楕円曲線演算を可能にするコンピュータ実行方法であり、スクリプト・ジェネレータにより実行され、本方法は:
第1のブロックチェーン・トランザクションの第1のスクリプトを生成するステップ;及び
第1のブロックチェーン・トランザクションに含めるために第1のスクリプトを出力するステップ;
を含み、第1のスクリプトはモジュラー・インバージョン・スクリプトを含み、モジュラー・インバージョン・スクリプトは、スクリプト・エンジンにより実行されると:
ターゲット整数とモジュラス値を取得し、ターゲット整数のモジュラー・インバースを出力するように構成されており、ターゲット整数とモジュラス値は互いに素であり、モジュラー・インバースは、ターゲット整数とモジュラス値を入力として、拡張ユークリッド・アルゴリズムの第1のシーケンスを反復的に計算し、第1のシーケンスを用いて、ターゲット整数のベズー係数を計算することにより生成され、ターゲット整数のベズー係数はモジュラー・インバースとして出力される。
【0192】
ステートメント2.
ステートメント1の方法において、モジュラー・インバージョン・スクリプトは、拡張ユークリッド・アルゴリズムの第2のシーケンスを反復的に計算し、第2のシーケンスを用いて、ターゲット整数とモジュラス値の最大公約数(GCD)を計算するように構成されていてもよく、モジュラー・インバージョン・スクリプトは、順に実行されるサブ・スクリプトの系列を含み、各々のサブ・スクリプトは、第2のシーケンスにおけるそれぞれの値と、第1のシーケンスにおける対応するそれぞれの値とを計算するように構成されており、モジュラー・インバージョン・スクリプトは、第2のシーケンスのそれぞれの値がGCDに等しくなるまで、系列におけるサブ・スクリプトを実行するように構成されており、GCDに等しい第2のシーケンスのそれぞれの値に対応する第1のシーケンスのそれぞれの値は、ターゲット整数のベズー係数として出力される。
【0193】
ステートメント3.
ステートメント2の方法において、モジュラー・インバージョン・スクリプトは、アンラップされたループを実行するように構成されていてもよく、各々のサブ・スクリプトは、アンラップされたループのそれぞれのステップを実行し、それぞれの第1のブランチとそれぞれの第2のブランチとを含み、それぞれの第1のブランチは、第1のシーケンスの次のそれぞれの値と、第2のシーケンスの次のそれぞれの値とを計算するように構成されており、それぞれのサブ・スクリプトがGCDをシーケンスの次のそれぞれの値として算出するまで、第1数のサブ・スクリプトのそれぞれの第1のブランチが実行され、各々の残りのサブ・スクリプトのそれぞれの第2のブランチが実行され、各々の残りのサブ・スクリプトのそれぞれの第2のブランチの実行は、ベズー係数の演算には寄与しない。
【0194】
ステートメント4.
ステートメント2又はステートメント3の方法において、サブ・スクリプトの数は、予め定められていてもよく、また、κ/log2Φ-1に等しい上限に対応しており、κはモジュラス値のビット数であり、Φは黄金比(golden ratio)である。
【0195】
ステートメント5.
前述の何れかのステートメントの方法において、本方法は:
第1のスクリプトを第1のブロックチェーン・トランザクションに含めるステップ;及び
第1のブロックチェーン・トランザクションを、1つ以上のブロックチェーン・ノード及び/又は1つ以上のブロックチェーン・ユーザーへサブミットするステップを含んでいてもよい。
【0196】
ステートメント6.
前述の何れかのステートメントの方法において、本方法は:
第1のスクリプトを出力するステップは、第1のスクリプトを1つ以上のブロックチェーン・ユーザーへ送信するステップを含んでもよい。
【0197】
ステートメント7.
前述の何れかのステートメントの方法において、第1のスクリプトは点加算スクリプトを含み、点加算スクリプトは:
第1の楕円曲線点、第2の楕円曲線点、及びモジュラス値を取得するステップ;及び
第1及び第2の楕円曲線点の楕円曲線加算を実行することによって第1のターゲット楕円曲線点を出力するステップ;
を行うように構成されていてもよく、点加算スクリプトはモジュラー・インバージョン・スクリプトを含み、楕円曲線加算を実行することは、第1のターゲット楕円曲線点のそれぞれのx座標とそれぞれのy座標を計算するために使用される第1のラムダ値を計算することを含む可能性があり、第1のラムダ値を計算することは、第1の分子値と第1の分母値を計算することを含み、点加算スクリプトは、モジュラー・インバージョン・スクリプトが、ターゲット整数として設定された第1の分母値を用いて実行され、第1の分母値のモジュラー・インバースを生成することを引き起こすように構成されており、第1のラムダ値は、第1の分子値に、第1の分母値のモジュラー・インバースを乗算することにより計算される。
【0198】
ステートメント8.
ステートメント7の方法において、点加算スクリプトは、第1及び第2の楕円曲線点が等しい場合に第1の分子値と第2の分子値を生成するように構成された第1のブランチと、第1及び第2の楕円曲線点が等しくない場合に第1の分子値と第2の分子値を生成するように構成された第2のブランチとを含んでもよく、モジュラー・インバージョン・スクリプトは、第1のブランチ又は第2のブランチの何れかが実行された後に実行され、モジュラー・インバージョン・スクリプトは、点加算スクリプトの一部分として1回包含される。
【0199】
ステートメント9.
ステートメント7又はステートメント8の方法において、第1のスクリプトは点減算スクリプトを含んでもよく、点減算スクリプトは:
第3の楕円曲線点、及びモジュラス値を取得するステップ;及び
第2の楕円曲線点を点加算スクリプトへ出力するステップ;
を行うように構成されており、第2の楕円曲線点は、モジュラス値を用いて楕円曲線点の剰余を計算し、その結果をネゲートすることにより生成される。
【0200】
ステートメント10.
前述の何れかのステートメントの方法において、第1のスクリプトは点倍化スクリプトを含み、点倍化スクリプトは:
第4の楕円曲線点、及びモジュラス値を取得するステップ;及び
第4の楕円曲線点を倍化することによって第2のターゲット楕円曲線点を出力するステップ;
を行うように構成されていてもよく、点倍化スクリプトはモジュラー・インバージョン・スクリプトを含み、第4の楕円曲線点の倍化を実行することは、第2のターゲット楕円曲線点のそれぞれのx座標とそれぞれのy座標を計算するために使用される第2のラムダ値を計算することを含んでもよく、第2のラムダ値を計算することは、第2の分子値と第2の分母値を計算することを含み、点倍化スクリプトは、モジュラー・インバージョン・スクリプトが、ターゲット整数として設定された第2の分母値を用いて実行され、第2の分母値のモジュラー・インバースを生成することを引き起こすように構成されており、ラムダ値は、第2の分子値に、第2の分母値のモジュラー・インバースを乗算することにより計算される。
【0201】
ステートメント11.
ステートメント10の方法において、第1のスクリプトは、第1のスカラー乗算(MBS)スクリプトを含んでもよく、第1のMBSスクリプトは:
第5の楕円曲線点、モジュラス値、及び第1のスカラー値を取得するステップであって、第1のスカラー値はバイナリで表現されており、バイナリ表現のそれぞれのビットはそれぞれのインデックスに関連付けられている、ステップ;及び
倍化加算アルゴリズムを使用して第5の楕円曲線点にスカラー値を乗算することにより、第3のターゲット楕円曲線点を出力するステップ;
を行うように構成されており、第1のMBSスクリプトは、順に実行されるサブ・スクリプトの系列を含み、各々のサブ・スクリプトは、それぞれのインデックスに関連付けられ、点倍化スクリプトのインスタンスを含み、サブ・スクリプトのうちの第1のものは、点倍化スクリプトを用いて第5の楕円曲線点を倍化し、それぞれの中間結果を出力するように構成されており、系列における一連のサブ・スクリプトの各々は、系列における先行するサブ・スクリプトにより出力されたそれぞれの中間結果を倍化するために、点倍化スクリプトを使用するように構成されており、第1のMBSスクリプトは、第1のスカラー値のバイナリ表現のそれぞれのビットであって1に設定されているものと同じそれぞれのインデックスに対応するそれぞれのインデックスを有する、それぞれのサブ・スクリプトにより生成されたそれぞれの中間結果を共に加算することによって、第3のターゲット楕円曲線点を生成するように構成されている。
【0202】
ステートメント12.
ステートメント7又はその何れかに従属するステートメントの方法において、第1のスクリプトは、第2のスカラー乗算(MBS)スクリプトを含み、第2のMBSスクリプトは:
第2のスカラー値を取得するステップであって、第2のスカラー値はバイナリで表現されており、バイナリ表現のそれぞれのビットはそれぞれのインデックスiに関連付けられている、ステップ;及び
それぞれの第5の楕円曲線点に第2のスカラー値を乗算することにより、第4のターゲット楕円曲線点を出力するステップ;
を行うように構成されており、第2のMBSスクリプトは、順に実行されるサブ・スクリプトの系列を含み、各々のサブ・スクリプトは、それぞれのインデックスiに関連付けられ、点倍化スクリプトのインスタンスを含み、各々のサブ・スクリプトは、2iまで上昇するそれぞれの第5の楕円曲線点に対応するそれぞれの楕円曲線点を含み、第2のMBSスクリプトは、第2のスカラー値のバイナリ表現のそれぞれのビットであって1に設定されているものと同じそれぞれのインデックスに対応するそれぞれのインデックスを有する、それぞれのサブ・スクリプトに属するそれぞれの楕円曲線点を共に加算することによって、第4のターゲット楕円曲線点を生成するように構成されている。
【0203】
ステートメント13.
前述の何れかのステートメントの方法において、第1のスクリプトは、所与のスカラーのバイナリ表現のそれぞれのビットの各々が、1に設定されているかどうかを、それぞれのビットの各々について:
l(エル)はスカラーのバイト長である場合に、ビッグ・エンディアンでl(エル)バイト配列として1を出力し;
l(エル)バイト配列のそれぞれのビットを1に設定し;及び
スカラーのそれぞれのビットとl(エル)バイト配列のそれぞれのビットとを比較すること;
により決定するように構成された設定ビット決定スクリプトを含んでいてもよく、それぞれのビットは、スカラーのそれぞれのビットがl(エル)バイト配列のそれぞれのビットに合致する場合に、1に設定されるように決定されている。
【0204】
ステートメント14.
前述の何れかのステートメントの方法において、第1のスクリプトはモジュラー縮減スクリプトを含んでもよく、モジュラー縮減スクリプトは:
それぞれの整数xと、それぞれのモジュラス値pとを取得するステップ;及び
(x%p+p)%p を計算することによってそれぞれの整数のモジュラー縮減を出力するステップ;
を行うように構成されており、%は剰余演算子である。
【0205】
ステートメント15.
ステートメント12又はその何れかに従属するステートメントの方法において、第1のスクリプトは、コミットメント点と、第2のMBSスクリプトの2つのそれぞれのインスタンスと、点加算スクリプトのそれぞれのインスタンスとを含み、第1のスクリプトは:
第1の候補スカラーと第2の候補スカラーを取得するステップであって、第1及び第2の候補スカラーは、第2のブロックチェーン・トランザクションのロック解除スクリプトに含まれている、ステップ;
第1の候補スカラーを、第2のMBSスクリプトの第1のそれぞれのインスタンスに入力して、第1の楕円曲線候補点を生成するステップ;
前記第2の候補スカラーを、第2のMBSスクリプトの第2のそれぞれのインスタンスに入力して、第2の楕円曲線候補点を生成するステップ;
第1の楕円曲線候補点と第2の楕円曲線候補点とを点加算スクリプトのそれぞれのインスタンスに入力して、コミットメント候補点を生成するステップ;及び
コミットメント候補点は、コミットメント点に等しいことを検証するステップ;
を行うように構成されている。
【0206】
ステートメント16.
ステートメント12又はその何れかに従属するステートメントの方法において、第1のスクリプトは、所定の公開鍵と所定のアドレスとを含んでもよく、第1のスクリプトは:
秘密鍵と候補アドレスを取得するステップであって、秘密鍵と候補アドレスは、第2のブロックチェーン・トランザクションのロック解除スクリプトに含まれている、ステップ;
秘密鍵を第2のMBSに入力して候補公開鍵を生成するステップであって、第2のMBSのそれぞれの第5の楕円曲線点は、公開鍵生成点である、ステップ;
候補公開鍵は所定の公開鍵に等しいことを検証するステップ;
候補公開鍵と所定の公開鍵とを点加算スクリプトのインスタンスに入力して、楕円曲線候補点を生成するステップ;
1つ以上のハッシュ関数を用いて楕円曲線候補点にハッシュ演算を施して、アドレスを生成するステップ;及び
候補アドレスは所定のアドレスに合致していること、又は候補アドレスの一部が所定のアドレスの一部に合致していることを検証するステップ;
を行うように構成されている。
【0207】
ステートメント17.
ブロックチェーン・トランザクションを用いて楕円曲線演算を行うためのコンピュータ実行方法であり、本方法はスクリプト・エンジンにより実行され、本方法は:第1のブロックチェーン・トランザクションを取得するステップ;
第2のブロックチェーン・トランザクションを取得するステップ;及び
第1のスクリプトを第2のスクリプトと一緒に実行してターゲット整数のモジュラー・インバースを生成するステップ;
を含み、第1のブロックチェーン・トランザクションは第1のスクリプトを含み、第1のスクリプトはモジュラー・インバージョン・スクリプトを含み、モジュラー・インバージョン・スクリプトは、スクリプト・エンジンにより実行されると:
ターゲット整数とモジュラス値を取得し、ターゲット整数のモジュラー・インバースを出力するように構成されており、ターゲット整数とモジュラス値は互いに素であり、モジュラー・インバースは、ターゲット整数とモジュラス値を入力として、拡張ユークリッド・アルゴリズムの第1のシーケンスを反復的に計算し、第1のシーケンスを用いて、ターゲット整数のベズー係数を計算することにより生成され、ターゲット整数のベズー係数はモジュラー・インバースとして出力され;
第2のブロックチェーン・トランザクションは第2のスクリプトを含み、第2のスクリプトはターゲット整数とモジュラス値を含む。
【0208】
ステートメント18.
前述の何れかのステートメントの方法において、モジュラス値は素数である。
【0209】
ステートメント19.
コンピュータ装置は、1つ以上のメモリ・ユニットを含むメモリ;及び1つ以上の処理ユニットを含む処理装置を含み、メモリは処理装置において動作するように構成されたコードを格納しており、コードは、処理装置で実行されると、ステートメント1ないし18のうちの何れかの方法を実行するように構成されている。
【0210】
ステートメント20.
コンピュータ・プログラムは、コンピュータ読み取り可能なストレージに組み込まれ、1つ以上のプロセッサで実行されると、ステートメント1ないし18のうちの何れかの方法を実行するように構成されている。
図1
図2
図3
図4
【国際調査報告】